summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/encryption/appinfo/info.xml21
-rw-r--r--apps/encryption/appinfo/register_command.php3
-rw-r--r--apps/encryption/command/migratekeys.php12
-rw-r--r--apps/encryption/l10n/fr.js2
-rw-r--r--apps/encryption/l10n/fr.json2
-rw-r--r--apps/encryption/lib/keymanager.php25
-rw-r--r--apps/encryption/lib/migration.php130
-rw-r--r--apps/encryption/tests/lib/KeyManagerTest.php50
-rw-r--r--apps/encryption/tests/lib/MigrationTest.php248
-rw-r--r--apps/files/ajax/mimeicon.php27
-rw-r--r--apps/files/appinfo/routes.php2
-rw-r--r--apps/files/command/scan.php9
-rw-r--r--apps/files/js/filelist.js58
-rw-r--r--apps/files/js/files.js23
-rw-r--r--apps/files/l10n/hu_HU.js7
-rw-r--r--apps/files/l10n/hu_HU.json7
-rw-r--r--apps/files/l10n/ja.js2
-rw-r--r--apps/files/l10n/ja.json2
-rw-r--r--apps/files/l10n/tr.js2
-rw-r--r--apps/files/l10n/tr.json2
-rw-r--r--apps/files/tests/js/filelistSpec.js7
-rw-r--r--apps/files_external/l10n/fr.js2
-rw-r--r--apps/files_external/l10n/fr.json2
-rw-r--r--apps/files_external/tests/backends/sftp_key.php43
-rw-r--r--apps/files_sharing/l10n/cs_CZ.js1
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json1
-rw-r--r--apps/files_sharing/l10n/de.js6
-rw-r--r--apps/files_sharing/l10n/de.json6
-rw-r--r--apps/files_sharing/l10n/de_DE.js5
-rw-r--r--apps/files_sharing/l10n/de_DE.json5
-rw-r--r--apps/files_sharing/l10n/el.js1
-rw-r--r--apps/files_sharing/l10n/el.json1
-rw-r--r--apps/files_sharing/l10n/fr.js2
-rw-r--r--apps/files_sharing/l10n/fr.json2
-rw-r--r--apps/files_sharing/l10n/id.js1
-rw-r--r--apps/files_sharing/l10n/id.json1
-rw-r--r--apps/files_sharing/l10n/it.js1
-rw-r--r--apps/files_sharing/l10n/it.json1
-rw-r--r--apps/files_sharing/l10n/ja.js3
-rw-r--r--apps/files_sharing/l10n/ja.json3
-rw-r--r--apps/files_sharing/l10n/ru.js1
-rw-r--r--apps/files_sharing/l10n/ru.json1
-rw-r--r--apps/files_sharing/l10n/sk_SK.js8
-rw-r--r--apps/files_sharing/l10n/sk_SK.json8
-rw-r--r--apps/files_sharing/l10n/th_TH.js1
-rw-r--r--apps/files_sharing/l10n/th_TH.json1
-rw-r--r--apps/files_sharing/l10n/tr.js1
-rw-r--r--apps/files_sharing/l10n/tr.json1
-rw-r--r--apps/files_sharing/lib/external/storage.php2
-rw-r--r--apps/files_sharing/lib/sharedmount.php14
-rw-r--r--apps/files_sharing/publicwebdav.php2
-rw-r--r--apps/files_sharing/tests/js/shareSpec.js2
-rw-r--r--apps/files_trashbin/command/cleanup.php8
-rw-r--r--apps/files_trashbin/lib/storage.php34
-rw-r--r--apps/files_trashbin/tests/command/cleanuptest.php30
-rw-r--r--apps/files_trashbin/tests/storage.php30
-rw-r--r--apps/user_ldap/group_ldap.php6
-rw-r--r--apps/user_ldap/l10n/de.js1
-rw-r--r--apps/user_ldap/l10n/de.json1
-rw-r--r--apps/user_ldap/l10n/de_DE.js1
-rw-r--r--apps/user_ldap/l10n/de_DE.json1
-rw-r--r--apps/user_ldap/l10n/fr.js10
-rw-r--r--apps/user_ldap/l10n/fr.json10
-rw-r--r--apps/user_ldap/l10n/id.js7
-rw-r--r--apps/user_ldap/l10n/id.json7
-rw-r--r--apps/user_ldap/l10n/ja.js2
-rw-r--r--apps/user_ldap/l10n/ja.json2
-rw-r--r--apps/user_ldap/l10n/sk_SK.js25
-rw-r--r--apps/user_ldap/l10n/sk_SK.json25
-rw-r--r--apps/user_ldap/l10n/tr.js13
-rw-r--r--apps/user_ldap/l10n/tr.json13
-rw-r--r--apps/user_ldap/lib/access.php5
-rw-r--r--apps/user_ldap/lib/user/manager.php4
-rw-r--r--apps/user_ldap/lib/wizard.php3
-rw-r--r--apps/user_ldap/tests/user/manager.php254
-rw-r--r--apps/user_ldap/tests/wizard.php6
76 files changed, 888 insertions, 380 deletions
diff --git a/apps/encryption/appinfo/info.xml b/apps/encryption/appinfo/info.xml
index 8d3b680fc08..536551e4841 100644
--- a/apps/encryption/appinfo/info.xml
+++ b/apps/encryption/appinfo/info.xml
@@ -2,19 +2,14 @@
<info>
<id>encryption</id>
<description>
- This application encrypts all files accessed by ownCloud at rest,
- wherever they are stored. As an example, with this application
- enabled, external cloud based Amazon S3 storage will be encrypted,
- protecting this data on storage outside of the control of the Admin.
- When this application is enabled for the first time, all files are
- encrypted as users log in and are prompted for their password. The
- recommended recovery key option enables recovery of files in case
- the key is lost.
- Note that this app encrypts all files that are touched by ownCloud,
- so external storage providers and applications such as SharePoint
- will see new files encrypted when they are accessed. Encryption is
- based on AES 128 or 256 bit keys. More information is available in
- the Encryption documentation
+ In order to use this encryption module you need to enable server-side
+ encryption in the admin settings. Once enabled this module will encrypt
+ all your files transparently. The encryption is based on AES 256 keys.
+ The module won't touch existing files, only new files will be encrypted
+ after server-side encryption was enabled. It is also not possible to
+ disable the encryption again and switch back to a unencrypted system.
+ Please read the documentation to know all implications before you decide
+ to enable server-side encryption.
</description>
<name>Default encryption module</name>
<license>AGPL</license>
diff --git a/apps/encryption/appinfo/register_command.php b/apps/encryption/appinfo/register_command.php
index f727fdf9d70..4fdf7ecec38 100644
--- a/apps/encryption/appinfo/register_command.php
+++ b/apps/encryption/appinfo/register_command.php
@@ -26,4 +26,5 @@ $userManager = OC::$server->getUserManager();
$view = new \OC\Files\View();
$config = \OC::$server->getConfig();
$connection = \OC::$server->getDatabaseConnection();
-$application->add(new MigrateKeys($userManager, $view, $connection, $config));
+$logger = \OC::$server->getLogger();
+$application->add(new MigrateKeys($userManager, $view, $connection, $config, $logger));
diff --git a/apps/encryption/command/migratekeys.php b/apps/encryption/command/migratekeys.php
index e6e5e7b70b0..7e320102172 100644
--- a/apps/encryption/command/migratekeys.php
+++ b/apps/encryption/command/migratekeys.php
@@ -27,6 +27,7 @@ use OC\Files\View;
use OC\User\Manager;
use OCA\Encryption\Migration;
use OCP\IConfig;
+use OCP\ILogger;
use OCP\IUserBackend;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
@@ -44,22 +45,27 @@ class MigrateKeys extends Command {
private $connection;
/** @var IConfig */
private $config;
+ /** @var ILogger */
+ private $logger;
/**
* @param Manager $userManager
* @param View $view
* @param Connection $connection
* @param IConfig $config
+ * @param ILogger $logger
*/
public function __construct(Manager $userManager,
View $view,
Connection $connection,
- IConfig $config) {
+ IConfig $config,
+ ILogger $logger) {
$this->userManager = $userManager;
$this->view = $view;
$this->connection = $connection;
$this->config = $config;
+ $this->logger = $logger;
parent::__construct();
}
@@ -77,7 +83,7 @@ class MigrateKeys extends Command {
protected function execute(InputInterface $input, OutputInterface $output) {
// perform system reorganization
- $migration = new Migration($this->config, $this->view, $this->connection);
+ $migration = new Migration($this->config, $this->view, $this->connection, $this->logger);
$users = $input->getArgument('user_id');
if (!empty($users)) {
@@ -115,5 +121,7 @@ class MigrateKeys extends Command {
}
}
+ $migration->finalCleanUp();
+
}
}
diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js
index a5b5cc00707..6eaf7b125a5 100644
--- a/apps/encryption/l10n/fr.js
+++ b/apps/encryption/l10n/fr.js
@@ -39,7 +39,7 @@ OC.L10N.register(
"Change Password" : "Changer de mot de passe",
"ownCloud basic encryption module" : "Module de chiffrement de base d'ownCloud",
"Your private key password no longer matches your log-in password." : "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion.",
- "Set your old private key password to your current log-in password:" : "Faites de votre mot de passe de connexion le mot de passe de votre clef privée :",
+ "Set your old private key password to your current log-in password:" : "Remplacez l'ancien mot de passe de votre clé privée par votre mot de passe de connexion actuel :",
" If you don't remember your old password you can ask your administrator to recover your files." : "Si vous ne vous souvenez plus de votre ancien mot de passe, vous pouvez demander à votre administrateur de récupérer vos fichiers.",
"Old log-in password" : "Ancien mot de passe de connexion",
"Current log-in password" : "Actuel mot de passe de connexion",
diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json
index 2044ab7b80b..8e319e87fde 100644
--- a/apps/encryption/l10n/fr.json
+++ b/apps/encryption/l10n/fr.json
@@ -37,7 +37,7 @@
"Change Password" : "Changer de mot de passe",
"ownCloud basic encryption module" : "Module de chiffrement de base d'ownCloud",
"Your private key password no longer matches your log-in password." : "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion.",
- "Set your old private key password to your current log-in password:" : "Faites de votre mot de passe de connexion le mot de passe de votre clef privée :",
+ "Set your old private key password to your current log-in password:" : "Remplacez l'ancien mot de passe de votre clé privée par votre mot de passe de connexion actuel :",
" If you don't remember your old password you can ask your administrator to recover your files." : "Si vous ne vous souvenez plus de votre ancien mot de passe, vous pouvez demander à votre administrateur de récupérer vos fichiers.",
"Old log-in password" : "Ancien mot de passe de connexion",
"Current log-in password" : "Actuel mot de passe de connexion",
diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php
index 05d23873482..8c8c1f8fd78 100644
--- a/apps/encryption/lib/keymanager.php
+++ b/apps/encryption/lib/keymanager.php
@@ -406,19 +406,36 @@ class KeyManager {
}
/**
- * @param $userId
+ * check if user has a private and a public key
+ *
+ * @param string $userId
* @return bool
+ * @throws PrivateKeyMissingException
+ * @throws PublicKeyMissingException
*/
public function userHasKeys($userId) {
+ $privateKey = $publicKey = true;
+
try {
$this->getPrivateKey($userId);
- $this->getPublicKey($userId);
} catch (PrivateKeyMissingException $e) {
- return false;
+ $privateKey = false;
+ $exception = $e;
+ }
+ try {
+ $this->getPublicKey($userId);
} catch (PublicKeyMissingException $e) {
+ $publicKey = false;
+ $exception = $e;
+ }
+
+ if ($privateKey && $publicKey) {
+ return true;
+ } elseif (!$privateKey && !$publicKey) {
return false;
+ } else {
+ throw $exception;
}
- return true;
}
/**
diff --git a/apps/encryption/lib/migration.php b/apps/encryption/lib/migration.php
index 98fc5be777a..789f5f77757 100644
--- a/apps/encryption/lib/migration.php
+++ b/apps/encryption/lib/migration.php
@@ -23,34 +23,40 @@
namespace OCA\Encryption;
-use OC\DB\Connection;
use OC\Files\View;
use OCP\IConfig;
+use OCP\IDBConnection;
+use OCP\ILogger;
class Migration {
private $moduleId;
/** @var \OC\Files\View */
private $view;
- /** @var \OC\DB\Connection */
+ /** @var \OCP\IDBConnection */
private $connection;
/** @var IConfig */
private $config;
+ /** @var ILogger */
+ private $logger;
+
/**
* @param IConfig $config
* @param View $view
- * @param Connection $connection
+ * @param IDBConnection $connection
+ * @param ILogger $logger
*/
- public function __construct(IConfig $config, View $view, Connection $connection) {
+ public function __construct(IConfig $config, View $view, IDBConnection $connection, ILogger $logger) {
$this->view = $view;
$this->view->getUpdater()->disable();
$this->connection = $connection;
$this->moduleId = \OCA\Encryption\Crypto\Encryption::ID;
$this->config = $config;
+ $this->logger = $logger;
}
- public function __destruct() {
+ public function finalCleanUp() {
$this->view->deleteAll('files_encryption/public_keys');
$this->updateFileCache();
$this->config->deleteAppValue('files_encryption', 'installed_version');
@@ -60,10 +66,10 @@ class Migration {
* update file cache, copy unencrypted_size to the 'size' column
*/
private function updateFileCache() {
- $query = $this->connection->createQueryBuilder();
- $query->update('`*PREFIX*filecache`')
- ->set('`size`', '`unencrypted_size`')
- ->where($query->expr()->eq('`encrypted`', ':encrypted'))
+ $query = $this->connection->getQueryBuilder();
+ $query->update('*PREFIX*filecache')
+ ->set('size', 'unencrypted_size')
+ ->where($query->expr()->eq('encrypted', $query->createParameter('encrypted')))
->setParameter('encrypted', 1);
$query->execute();
}
@@ -143,22 +149,32 @@ class Migration {
$this->config->deleteAppValue('files_encryption', 'types');
$this->config->deleteAppValue('files_encryption', 'enabled');
+ $oldAppValues = $this->connection->getQueryBuilder();
+ $oldAppValues->select('*')
+ ->from('*PREFIX*appconfig')
+ ->where($oldAppValues->expr()->eq('appid', $oldAppValues->createParameter('appid')))
+ ->setParameter('appid', 'files_encryption');
+ $appSettings = $oldAppValues->execute();
+
+ while ($row = $appSettings->fetch()) {
+ // 'installed_version' gets deleted at the end of the migration process
+ if ($row['configkey'] !== 'installed_version' ) {
+ $this->config->setAppValue('encryption', $row['configkey'], $row['configvalue']);
+ $this->config->deleteAppValue('files_encryption', $row['configkey']);
+ }
+ }
- $query = $this->connection->createQueryBuilder();
- $query->update('`*PREFIX*appconfig`')
- ->set('`appid`', ':newappid')
- ->where($query->expr()->eq('`appid`', ':oldappid'))
- ->setParameter('oldappid', 'files_encryption')
- ->setParameter('newappid', 'encryption');
- $query->execute();
+ $oldPreferences = $this->connection->getQueryBuilder();
+ $oldPreferences->select('*')
+ ->from('*PREFIX*preferences')
+ ->where($oldPreferences->expr()->eq('appid', $oldPreferences->createParameter('appid')))
+ ->setParameter('appid', 'files_encryption');
+ $preferenceSettings = $oldPreferences->execute();
- $query = $this->connection->createQueryBuilder();
- $query->update('`*PREFIX*preferences`')
- ->set('`appid`', ':newappid')
- ->where($query->expr()->eq('`appid`', ':oldappid'))
- ->setParameter('oldappid', 'files_encryption')
- ->setParameter('newappid', 'encryption');
- $query->execute();
+ while ($row = $preferenceSettings->fetch()) {
+ $this->config->setUserValue($row['userid'], 'encryption', $row['configkey'], $row['configvalue']);
+ $this->config->deleteUserValue($row['userid'], 'files_encryption', $row['configkey']);
+ }
}
/**
@@ -224,9 +240,10 @@ class Migration {
private function renameUsersPrivateKey($user) {
$oldPrivateKey = $user . '/files_encryption/' . $user . '.privateKey';
$newPrivateKey = $user . '/files_encryption/' . $this->moduleId . '/' . $user . '.privateKey';
- $this->createPathForKeys(dirname($newPrivateKey));
-
- $this->view->rename($oldPrivateKey, $newPrivateKey);
+ if ($this->view->file_exists($oldPrivateKey)) {
+ $this->createPathForKeys(dirname($newPrivateKey));
+ $this->view->rename($oldPrivateKey, $newPrivateKey);
+ }
}
/**
@@ -237,9 +254,10 @@ class Migration {
private function renameUsersPublicKey($user) {
$oldPublicKey = '/files_encryption/public_keys/' . $user . '.publicKey';
$newPublicKey = $user . '/files_encryption/' . $this->moduleId . '/' . $user . '.publicKey';
- $this->createPathForKeys(dirname($newPublicKey));
-
- $this->view->rename($oldPublicKey, $newPublicKey);
+ if ($this->view->file_exists($oldPublicKey)) {
+ $this->createPathForKeys(dirname($newPublicKey));
+ $this->view->rename($oldPublicKey, $newPublicKey);
+ }
}
/**
@@ -251,6 +269,11 @@ class Migration {
*/
private function renameFileKeys($user, $path, $trash = false) {
+ if ($this->view->is_dir($user . '/' . $path) === false) {
+ $this->logger->info('Skip dir /' . $user . '/' . $path . ': does not exist');
+ return;
+ }
+
$dh = $this->view->opendir($user . '/' . $path);
if (is_resource($dh)) {
@@ -260,8 +283,15 @@ class Migration {
$this->renameFileKeys($user, $path . '/' . $file, $trash);
} else {
$target = $this->getTargetDir($user, $path, $file, $trash);
- $this->createPathForKeys(dirname($target));
- $this->view->rename($user . '/' . $path . '/' . $file, $target);
+ if ($target !== false) {
+ $this->createPathForKeys(dirname($target));
+ $this->view->rename($user . '/' . $path . '/' . $file, $target);
+ } else {
+ $this->logger->warning(
+ 'did not move key "' . $file
+ . '" could not find the corresponding file in /data/' . $user . '/files.'
+ . 'Most likely the key was already moved in a previous migration run and is already on the right place.');
+ }
}
}
}
@@ -270,22 +300,50 @@ class Migration {
}
/**
+ * get system mount points
+ * wrap static method so that it can be mocked for testing
+ *
+ * @internal
+ * @return array
+ */
+ protected function getSystemMountPoints() {
+ return \OC_Mount_Config::getSystemMountPoints();
+ }
+
+ /**
* generate target directory
*
* @param string $user
- * @param string $filePath
+ * @param string $keyPath
* @param string $filename
* @param bool $trash
* @return string
*/
- private function getTargetDir($user, $filePath, $filename, $trash) {
+ private function getTargetDir($user, $keyPath, $filename, $trash) {
if ($trash) {
- $targetDir = $user . '/files_encryption/keys/files_trashbin/' . substr($filePath, strlen('/files_trashbin/keys/')) . '/' . $this->moduleId . '/' . $filename;
+ $filePath = substr($keyPath, strlen('/files_trashbin/keys/'));
+ $targetDir = $user . '/files_encryption/keys/files_trashbin/' . $filePath . '/' . $this->moduleId . '/' . $filename;
} else {
- $targetDir = $user . '/files_encryption/keys/files/' . substr($filePath, strlen('/files_encryption/keys/')) . '/' . $this->moduleId . '/' . $filename;
+ $filePath = substr($keyPath, strlen('/files_encryption/keys/'));
+ $targetDir = $user . '/files_encryption/keys/files/' . $filePath . '/' . $this->moduleId . '/' . $filename;
}
- return $targetDir;
+ if ($user === '') {
+ // for system wide mounts we need to check if the mount point really exists
+ $normalized = \OC\Files\Filesystem::normalizePath($filePath);
+ $systemMountPoints = $this->getSystemMountPoints();
+ foreach ($systemMountPoints as $mountPoint) {
+ $normalizedMountPoint = \OC\Files\Filesystem::normalizePath($mountPoint['mountpoint']) . '/';
+ if (strpos($normalized, $normalizedMountPoint) === 0)
+ return $targetDir;
+ }
+ } else if ($trash === false && $this->view->file_exists('/' . $user. '/files/' . $filePath)) {
+ return $targetDir;
+ } else if ($trash === true && $this->view->file_exists('/' . $user. '/files_trashbin/' . $filePath)) {
+ return $targetDir;
+ }
+
+ return false;
}
/**
diff --git a/apps/encryption/tests/lib/KeyManagerTest.php b/apps/encryption/tests/lib/KeyManagerTest.php
index 2561b29462f..0bac5e0341b 100644
--- a/apps/encryption/tests/lib/KeyManagerTest.php
+++ b/apps/encryption/tests/lib/KeyManagerTest.php
@@ -182,18 +182,62 @@ class KeyManagerTest extends TestCase {
);
}
- public function testUserHasKeys() {
+ /**
+ * @dataProvider dataTestUserHasKeys
+ */
+ public function testUserHasKeys($key, $expected) {
$this->keyStorageMock->expects($this->exactly(2))
->method('getUserKey')
->with($this->equalTo($this->userId), $this->anything())
- ->willReturn('key');
+ ->willReturn($key);
- $this->assertTrue(
+ $this->assertSame($expected,
$this->instance->userHasKeys($this->userId)
);
}
+ public function dataTestUserHasKeys() {
+ return [
+ ['key', true],
+ ['', false]
+ ];
+ }
+
+ /**
+ * @expectedException \OCA\Encryption\Exceptions\PrivateKeyMissingException
+ */
+ public function testUserHasKeysMissingPrivateKey() {
+ $this->keyStorageMock->expects($this->exactly(2))
+ ->method('getUserKey')
+ ->willReturnCallback(function ($uid, $keyID, $encryptionModuleId) {
+ if ($keyID=== 'privateKey') {
+ return '';
+ }
+ return 'key';
+ });
+
+ $this->instance->userHasKeys($this->userId);
+ }
+
+ /**
+ * @expectedException \OCA\Encryption\Exceptions\PublicKeyMissingException
+ */
+ public function testUserHasKeysMissingPublicKey() {
+ $this->keyStorageMock->expects($this->exactly(2))
+ ->method('getUserKey')
+ ->willReturnCallback(function ($uid, $keyID, $encryptionModuleId){
+ if ($keyID === 'publicKey') {
+ return '';
+ }
+ return 'key';
+ });
+
+ $this->instance->userHasKeys($this->userId);
+
+ }
+
+
public function testInit() {
$this->keyStorageMock->expects($this->any())
->method('getUserKey')
diff --git a/apps/encryption/tests/lib/MigrationTest.php b/apps/encryption/tests/lib/MigrationTest.php
index c07a4539e98..a05418c5f26 100644
--- a/apps/encryption/tests/lib/MigrationTest.php
+++ b/apps/encryption/tests/lib/MigrationTest.php
@@ -24,6 +24,7 @@
namespace OCA\Encryption\Tests;
use OCA\Encryption\Migration;
+use OCP\ILogger;
class MigrationTest extends \Test\TestCase {
@@ -37,6 +38,9 @@ class MigrationTest extends \Test\TestCase {
private $recovery_key_id = 'recovery_key_id';
private $moduleId;
+ /** @var PHPUnit_Framework_MockObject_MockObject | ILogger */
+ private $logger;
+
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
\OC_User::createUser(self::TEST_ENCRYPTION_MIGRATION_USER1, 'foo');
@@ -53,6 +57,7 @@ class MigrationTest extends \Test\TestCase {
public function setUp() {
+ $this->logger = $this->getMockBuilder('\OCP\ILogger')->disableOriginalConstructor()->getMock();
$this->view = new \OC\Files\View();
$this->moduleId = \OCA\Encryption\Crypto\Encryption::ID;
}
@@ -100,6 +105,17 @@ class MigrationTest extends \Test\TestCase {
$this->view->file_put_contents($uid . '/files_encryption/keys/folder2/file.2.1/fileKey' , 'data');
}
+ protected function createDummyFiles($uid) {
+ $this->view->mkdir($uid . '/files/folder1/folder2/folder3/file3');
+ $this->view->mkdir($uid . '/files/folder1/folder2/file2');
+ $this->view->mkdir($uid . '/files/folder1/file.1');
+ $this->view->mkdir($uid . '/files/folder2/file.2.1');
+ $this->view->file_put_contents($uid . '/files/folder1/folder2/folder3/file3/fileKey' , 'data');
+ $this->view->file_put_contents($uid . '/files/folder1/folder2/file2/fileKey' , 'data');
+ $this->view->file_put_contents($uid . '/files/folder1/file.1/fileKey' , 'data');
+ $this->view->file_put_contents($uid . '/files/folder2/file.2.1/fileKey' , 'data');
+ }
+
protected function createDummyFilesInTrash($uid) {
$this->view->mkdir($uid . '/files_trashbin/keys/file1.d5457864');
$this->view->mkdir($uid . '/files_trashbin/keys/folder1.d7437648723/file2');
@@ -109,6 +125,11 @@ class MigrationTest extends \Test\TestCase {
$this->view->file_put_contents($uid . '/files_trashbin/keys/file1.d5457864/fileKey' , 'data');
$this->view->file_put_contents($uid . '/files_trashbin/keys/folder1.d7437648723/file2/fileKey' , 'data');
+
+ // create the files itself
+ $this->view->mkdir($uid . '/files_trashbin/folder1.d7437648723');
+ $this->view->file_put_contents($uid . '/files_trashbin/file1.d5457864' , 'data');
+ $this->view->file_put_contents($uid . '/files_trashbin/folder1.d7437648723/file2' , 'data');
}
protected function createDummySystemWideKeys() {
@@ -118,7 +139,6 @@ class MigrationTest extends \Test\TestCase {
$this->view->file_put_contents('files_encryption/systemwide_2.privateKey', 'data');
$this->view->file_put_contents('files_encryption/public_keys/systemwide_1.publicKey', 'data');
$this->view->file_put_contents('files_encryption/public_keys/systemwide_2.publicKey', 'data');
-
}
public function testMigrateToNewFolderStructure() {
@@ -134,6 +154,10 @@ class MigrationTest extends \Test\TestCase {
$this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER2);
$this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER3);
+ $this->createDummyFiles(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->createDummyFiles(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ $this->createDummyFiles(self::TEST_ENCRYPTION_MIGRATION_USER3);
+
$this->createDummyFilesInTrash(self::TEST_ENCRYPTION_MIGRATION_USER2);
// no user for system wide mount points
@@ -142,7 +166,21 @@ class MigrationTest extends \Test\TestCase {
$this->createDummySystemWideKeys();
- $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection());
+ $m = $this->getMockBuilder('OCA\Encryption\Migration')
+ ->setConstructorArgs(
+ [
+ \OC::$server->getConfig(),
+ new \OC\Files\View(),
+ \OC::$server->getDatabaseConnection(),
+ $this->logger
+ ]
+ )->setMethods(['getSystemMountPoints'])->getMock();
+
+ $m->expects($this->any())->method('getSystemMountPoints')
+ ->willReturn([['mountpoint' => 'folder1'], ['mountpoint' => 'folder2']]);
+
+ $m->reorganizeFolderStructure();
+ // even if it runs twice folder should always move only once
$m->reorganizeFolderStructure();
$this->assertTrue(
@@ -242,18 +280,24 @@ class MigrationTest extends \Test\TestCase {
$config->setAppValue('files_encryption', 'recoveryAdminEnabled', '1');
$config->setUserValue(self::TEST_ENCRYPTION_MIGRATION_USER1, 'files_encryption', 'recoverKeyEnabled', '1');
+ //$this->invokePrivate($config, 'cache', [[]]);
+ $cache = $this->invokePrivate(\OC::$server->getAppConfig(), 'cache');
+ unset($cache['encryption']);
+ unset($cache['files_encryption']);
+ $this->invokePrivate(\OC::$server->getAppConfig(), 'cache', [$cache]);
+
// delete default values set by the encryption app during initialization
- /** @var \OC\DB\Connection $connection */
+ /** @var \OCP\IDBConnection $connection */
$connection = \OC::$server->getDatabaseConnection();
- $query = $connection->createQueryBuilder();
- $query->delete('`*PREFIX*appconfig`')
- ->where($query->expr()->eq('`appid`', ':appid'))
+ $query = $connection->getQueryBuilder();
+ $query->delete('*PREFIX*appconfig')
+ ->where($query->expr()->eq('appid', $query->createParameter('appid')))
->setParameter('appid', 'encryption');
$query->execute();
- $query = $connection->createQueryBuilder();
- $query->delete('`*PREFIX*preferences`')
- ->where($query->expr()->eq('`appid`', ':appid'))
+ $query = $connection->getQueryBuilder();
+ $query->delete('*PREFIX*preferences')
+ ->where($query->expr()->eq('appid', $query->createParameter('appid')))
->setParameter('appid', 'encryption');
$query->execute();
}
@@ -261,23 +305,75 @@ class MigrationTest extends \Test\TestCase {
public function testUpdateDB() {
$this->prepareDB();
- $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection());
+ $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger);
$m->updateDB();
- $this->verifyDB('`*PREFIX*appconfig`', 'files_encryption', 0);
- $this->verifyDB('`*PREFIX*preferences`', 'files_encryption', 0);
- $this->verifyDB('`*PREFIX*appconfig`', 'encryption', 3);
- $this->verifyDB('`*PREFIX*preferences`', 'encryption', 1);
+ $this->verifyDB('*PREFIX*appconfig', 'files_encryption', 0);
+ $this->verifyDB('*PREFIX*preferences', 'files_encryption', 0);
+ $this->verifyDB('*PREFIX*appconfig', 'encryption', 3);
+ $this->verifyDB('*PREFIX*preferences', 'encryption', 1);
}
- public function verifyDB($table, $appid, $expected) {
+ /**
+ * test update db if the db already contain some existing new values
+ */
+ public function testUpdateDBExistingNewConfig() {
+ $this->prepareDB();
+ $config = \OC::$server->getConfig();
+ $config->setAppValue('encryption', 'publicShareKeyId', 'wrong_share_id');
+ $config->setUserValue(self::TEST_ENCRYPTION_MIGRATION_USER1, 'encryption', 'recoverKeyEnabled', '9');
+
+ $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger);
+ $m->updateDB();
+
+ $this->verifyDB('*PREFIX*appconfig', 'files_encryption', 0);
+ $this->verifyDB('*PREFIX*preferences', 'files_encryption', 0);
+ $this->verifyDB('*PREFIX*appconfig', 'encryption', 3);
+ $this->verifyDB('*PREFIX*preferences', 'encryption', 1);
+
+ // check if the existing values where overwritten correctly
/** @var \OC\DB\Connection $connection */
$connection = \OC::$server->getDatabaseConnection();
- $query = $connection->createQueryBuilder();
- $query->select('`appid`')
+ $query = $connection->getQueryBuilder();
+ $query->select('configvalue')
+ ->from('*PREFIX*appconfig')
+ ->where($query->expr()->andX(
+ $query->expr()->eq('appid', $query->createParameter('appid')),
+ $query->expr()->eq('configkey', $query->createParameter('configkey'))
+ ))
+ ->setParameter('appid', 'encryption')
+ ->setParameter('configkey', 'publicShareKeyId');
+ $result = $query->execute();
+ $value = $result->fetch();
+ $this->assertTrue(isset($value['configvalue']));
+ $this->assertSame('share_id', $value['configvalue']);
+
+ $query = $connection->getQueryBuilder();
+ $query->select('configvalue')
+ ->from('*PREFIX*preferences')
+ ->where($query->expr()->andX(
+ $query->expr()->eq('appid', $query->createParameter('appid')),
+ $query->expr()->eq('configkey', $query->createParameter('configkey')),
+ $query->expr()->eq('userid', $query->createParameter('userid'))
+ ))
+ ->setParameter('appid', 'encryption')
+ ->setParameter('configkey', 'recoverKeyEnabled')
+ ->setParameter('userid', self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $result = $query->execute();
+ $value = $result->fetch();
+ $this->assertTrue(isset($value['configvalue']));
+ $this->assertSame('1', $value['configvalue']);
+
+ }
+
+ public function verifyDB($table, $appid, $expected) {
+ /** @var \OCP\IDBConnection $connection */
+ $connection = \OC::$server->getDatabaseConnection();
+ $query = $connection->getQueryBuilder();
+ $query->select('appid')
->from($table)
- ->where($query->expr()->eq('`appid`', ':appid'))
+ ->where($query->expr()->eq('appid', $query->createParameter('appid')))
->setParameter('appid', $appid);
$result = $query->execute();
$values = $result->fetchAll();
@@ -291,16 +387,16 @@ class MigrationTest extends \Test\TestCase {
*/
public function testUpdateFileCache() {
$this->prepareFileCache();
- $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection());
+ $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger);
self::invokePrivate($m, 'updateFileCache');
// check results
- /** @var \OC\DB\Connection $connection */
+ /** @var \OCP\IDBConnection $connection */
$connection = \OC::$server->getDatabaseConnection();
- $query = $connection->createQueryBuilder();
+ $query = $connection->getQueryBuilder();
$query->select('*')
- ->from('`*PREFIX*filecache`');
+ ->from('*PREFIX*filecache');
$result = $query->execute();
$entries = $result->fetchAll();
foreach($entries as $entry) {
@@ -315,25 +411,25 @@ class MigrationTest extends \Test\TestCase {
}
public function prepareFileCache() {
- /** @var \OC\DB\Connection $connection */
+ /** @var \OCP\IDBConnection $connection */
$connection = \OC::$server->getDatabaseConnection();
- $query = $connection->createQueryBuilder();
- $query->delete('`*PREFIX*filecache`');
+ $query = $connection->getQueryBuilder();
+ $query->delete('*PREFIX*filecache');
$query->execute();
- $query = $connection->createQueryBuilder();
- $result = $query->select('`fileid`')
- ->from('`*PREFIX*filecache`')
+ $query = $connection->getQueryBuilder();
+ $result = $query->select('fileid')
+ ->from('*PREFIX*filecache')
->setMaxResults(1)->execute()->fetchAll();
$this->assertEmpty($result);
- $query = $connection->createQueryBuilder();
- $query->insert('`*PREFIX*filecache`')
+ $query = $connection->getQueryBuilder();
+ $query->insert('*PREFIX*filecache')
->values(
array(
- '`storage`' => ':storage',
- '`path_hash`' => ':path_hash',
- '`encrypted`' => ':encrypted',
- '`size`' => ':size',
- '`unencrypted_size`' => ':unencrypted_size'
+ 'storage' => $query->createParameter('storage'),
+ 'path_hash' => $query->createParameter('path_hash'),
+ 'encrypted' => $query->createParameter('encrypted'),
+ 'size' => $query->createParameter('size'),
+ 'unencrypted_size' => $query->createParameter('unencrypted_size'),
)
);
for ($i = 1; $i < 20; $i++) {
@@ -346,11 +442,87 @@ class MigrationTest extends \Test\TestCase {
$query->execute()
);
}
- $query = $connection->createQueryBuilder();
- $result = $query->select('`fileid`')
- ->from('`*PREFIX*filecache`')
+ $query = $connection->getQueryBuilder();
+ $result = $query->select('fileid')
+ ->from('*PREFIX*filecache')
->execute()->fetchAll();
$this->assertSame(19, count($result));
}
+ /**
+ * @dataProvider dataTestGetTargetDir
+ */
+ public function testGetTargetDir($user, $keyPath, $filename, $trash, $systemMounts, $expected) {
+
+ $updater = $this->getMockBuilder('\OC\Files\Cache\Updater')
+ ->disableOriginalConstructor()->getMock();
+ $view = $this->getMockBuilder('\OC\Files\View')
+ ->disableOriginalConstructor()->getMock();
+ $view->expects($this->any())->method('file_exists')->willReturn(true);
+ $view->expects($this->any())->method('getUpdater')->willReturn($updater);
+
+
+ $m = $this->getMockBuilder('OCA\Encryption\Migration')
+ ->setConstructorArgs(
+ [
+ \OC::$server->getConfig(),
+ $view,
+ \OC::$server->getDatabaseConnection(),
+ $this->logger
+ ]
+ )->setMethods(['getSystemMountPoints'])->getMock();
+
+ $m->expects($this->any())->method('getSystemMountPoints')
+ ->willReturn($systemMounts);
+
+ $this->assertSame($expected,
+ $this->invokePrivate($m, 'getTargetDir', [$user, $keyPath, $filename, $trash])
+ );
+ }
+
+ public function dataTestGetTargetDir() {
+ return [
+ [
+ 'user1',
+ '/files_encryption/keys/foo/bar.txt',
+ 'user1.shareKey',
+ false,
+ [],
+ 'user1/files_encryption/keys/files/foo/bar.txt/OC_DEFAULT_MODULE/user1.shareKey'
+ ],
+ [
+ 'user1',
+ '/files_trashbin/keys/foo/bar.txt',
+ 'user1.shareKey',
+ true,
+ [],
+ 'user1/files_encryption/keys/files_trashbin/foo/bar.txt/OC_DEFAULT_MODULE/user1.shareKey'
+ ],
+ [
+ '',
+ '/files_encryption/keys/foo/bar.txt',
+ 'user1.shareKey',
+ false,
+ [['mountpoint' => 'foo']],
+ '/files_encryption/keys/files/foo/bar.txt/OC_DEFAULT_MODULE/user1.shareKey'
+ ],
+ [
+ '',
+ '/files_encryption/keys/foo/bar.txt',
+ 'user1.shareKey',
+ false,
+ [['mountpoint' => 'foobar']],
+ false
+ ],
+ [
+ '',
+ '/files_encryption/keys/foobar/bar.txt',
+ 'user1.shareKey',
+ false,
+ [['mountpoint' => 'foo']],
+ false
+ ]
+ ];
+ }
+
}
diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php
deleted file mode 100644
index 008ad41953e..00000000000
--- a/apps/files/ajax/mimeicon.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Lukas Reschke <lukas@owncloud.com>
- * @author Robin Appelman <icewind@owncloud.com>
- *
- * @copyright Copyright (c) 2015, ownCloud, Inc.
- * @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/>
- *
- */
-\OC::$server->getSession()->close();
-
-$mime = isset($_GET['mime']) ? (string)$_GET['mime'] : '';
-
-print OC_Helper::mimetypeIcon($mime);
diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index ceeb3cdcc8a..5aa52f17a29 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -66,8 +66,6 @@ $this->create('files_ajax_getstoragestats', 'ajax/getstoragestats.php')
->actionInclude('files/ajax/getstoragestats.php');
$this->create('files_ajax_list', 'ajax/list.php')
->actionInclude('files/ajax/list.php');
-$this->create('files_ajax_mimeicon', 'ajax/mimeicon.php')
- ->actionInclude('files/ajax/mimeicon.php');
$this->create('files_ajax_move', 'ajax/move.php')
->actionInclude('files/ajax/move.php');
$this->create('files_ajax_newfile', 'ajax/newfile.php')
diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index 599dc603c7b..99ce64e09cc 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -92,10 +92,10 @@ class Scan extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $path = $input->getOption('path');
- if ($path) {
- $path = '/'.trim($path, '/');
- list (, $user, ) = explode('/', $path, 3);
+ $inputPath = $input->getOption('path');
+ if ($inputPath) {
+ $inputPath = '/' . trim($inputPath, '/');
+ list (, $user,) = explode('/', $inputPath, 3);
$users = array($user);
} else if ($input->getOption('all')) {
$users = $this->userManager->search('');
@@ -114,6 +114,7 @@ class Scan extends Command {
if (is_object($user)) {
$user = $user->getUID();
}
+ $path = $inputPath ? $inputPath : '/' . $user;
if ($this->userManager->userExists($user)) {
$this->scanFiles($user, $path, $quiet, $output);
} else {
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 417c4b9fe99..183b5e909a6 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -670,7 +670,7 @@
*/
_createRow: function(fileData, options) {
var td, simpleSize, basename, extension, sizeColor,
- icon = OC.Util.replaceSVGIcon(fileData.icon),
+ icon = OC.MimeType.getIconUrl(fileData.mimetype),
name = fileData.name,
type = fileData.type || 'file',
mtime = parseInt(fileData.mtime, 10),
@@ -685,6 +685,10 @@
if (type === 'dir') {
mime = mime || 'httpd/unix-directory';
+
+ if (fileData.mountType && fileData.mountType.indexOf('external') === 0) {
+ icon = OC.MimeType.getIconUrl('dir-external');
+ }
}
//containing tr
@@ -1213,36 +1217,34 @@
var etag = options.etag;
// get mime icon url
- OCA.Files.Files.getMimeIcon(mime, function(iconURL) {
- var previewURL,
- urlSpec = {};
- ready(iconURL); // set mimeicon URL
+ var iconURL = OC.MimeType.getIconUrl(mime);
+ var previewURL,
+ urlSpec = {};
+ ready(iconURL); // set mimeicon URL
- urlSpec.file = OCA.Files.Files.fixPath(path);
+ urlSpec.file = OCA.Files.Files.fixPath(path);
- if (etag){
- // use etag as cache buster
- urlSpec.c = etag;
- }
- else {
- console.warn('OCA.Files.FileList.lazyLoadPreview(): missing etag argument');
- }
+ if (etag){
+ // use etag as cache buster
+ urlSpec.c = etag;
+ } else {
+ console.warn('OCA.Files.FileList.lazyLoadPreview(): missing etag argument');
+ }
- previewURL = self.generatePreviewUrl(urlSpec);
- previewURL = previewURL.replace('(', '%28');
- previewURL = previewURL.replace(')', '%29');
-
- // preload image to prevent delay
- // this will make the browser cache the image
- var img = new Image();
- img.onload = function(){
- // if loading the preview image failed (no preview for the mimetype) then img.width will < 5
- if (img.width > 5) {
- ready(previewURL);
- }
- };
- img.src = previewURL;
- });
+ previewURL = self.generatePreviewUrl(urlSpec);
+ previewURL = previewURL.replace('(', '%28');
+ previewURL = previewURL.replace(')', '%29');
+
+ // preload image to prevent delay
+ // this will make the browser cache the image
+ var img = new Image();
+ img.onload = function(){
+ // if loading the preview image failed (no preview for the mimetype) then img.width will < 5
+ if (img.width > 5) {
+ ready(previewURL);
+ }
+ };
+ img.src = previewURL;
},
setDirectoryPermissions: function(permissions) {
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 44868e78bd0..034045ee40b 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -61,7 +61,7 @@
if (response.data !== undefined && response.data.uploadMaxFilesize !== undefined) {
$('#max_upload').val(response.data.uploadMaxFilesize);
$('#free_space').val(response.data.freeSpace);
- $('#upload.button').attr('original-title', response.data.maxHumanFilesize);
+ $('#upload.button').attr('data-original-title', response.data.maxHumanFilesize);
$('#usedSpacePercent').val(response.data.usedSpacePercent);
$('#owner').val(response.data.owner);
$('#ownerDisplayName').val(response.data.ownerDisplayName);
@@ -72,7 +72,7 @@
}
if (response[0].uploadMaxFilesize !== undefined) {
$('#max_upload').val(response[0].uploadMaxFilesize);
- $('#upload.button').attr('original-title', response[0].maxHumanFilesize);
+ $('#upload.button').attr('data-original-title', response[0].maxHumanFilesize);
$('#usedSpacePercent').val(response[0].usedSpacePercent);
Files.displayStorageWarnings();
}
@@ -163,18 +163,14 @@
return OC.filePath('files', 'ajax', action + '.php') + q;
},
+ /**
+ * Fetch the icon url for the mimetype
+ * @param {string} mime The mimetype
+ * @param {Files~mimeicon} ready Function to call when mimetype is retrieved
+ * @deprecated use OC.MimeType.getIconUrl(mime)
+ */
getMimeIcon: function(mime, ready) {
- if (Files.getMimeIcon.cache[mime]) {
- ready(Files.getMimeIcon.cache[mime]);
- } else {
- $.get( OC.filePath('files','ajax','mimeicon.php'), {mime: mime}, function(path) {
- if(OC.Util.hasSVGSupport()){
- path = path.substr(0, path.length-4) + '.svg';
- }
- Files.getMimeIcon.cache[mime]=path;
- ready(Files.getMimeIcon.cache[mime]);
- });
- }
+ ready(OC.MimeType.getIconUrl(mime));
},
/**
@@ -211,7 +207,6 @@
* Initialize the files view
*/
initialize: function() {
- Files.getMimeIcon.cache = {};
Files.bindKeyboardShortcuts(document, $);
// TODO: move file list related code (upload) to OCA.Files.FileList
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index 52800fc6cee..0f7d09bc123 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "No permission to delete" : "Nincs törlési jogosultsága",
"Download" : "Letöltés",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
"Unable to determine date" : "Nem lehet meghatározni a dátumot",
+ "This operation is forbidden" : "Tiltott művelet",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort",
"Error moving file." : "Hiba történt a fájl áthelyezése közben.",
"Error moving file" : "Az állomány áthelyezése nem sikerült.",
"Error" : "Hiba",
@@ -61,7 +64,9 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"],
"\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.",
"File name cannot be empty." : "A fájlnév nem lehet semmi.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!",
"Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "A tároló majdnem tele van ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["egyezések '{filter}'","egyezés '{filter}'"],
"{dirs} and {files}" : "{dirs} és {files}",
@@ -70,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
"A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>",
"A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Szűkítse le az értesítéseket a létrehozásról és a változásokról a <strong>kedvenc fájlok</strong> <em>(Stream only)</em> -ra",
"A file or folder has been <strong>deleted</strong>" : "Fájl vagy könyvtár <strong>törlése</strong>",
"A file or folder has been <strong>restored</strong>" : "Fájl vagy könyvtár <strong>visszatöltése</strong>",
"You created %1$s" : "Létrehoztam: %1$s",
@@ -99,6 +105,7 @@ OC.L10N.register(
"Folder" : "Mappa",
"Upload" : "Feltöltés",
"Cancel upload" : "A feltöltés megszakítása",
+ "No files in here" : "Itt nincsenek fájlok",
"Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
"Select all" : "Összes kijelölése",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 3f2d8e133f2..bf98eef627b 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -40,10 +40,13 @@
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "No permission to delete" : "Nincs törlési jogosultsága",
"Download" : "Letöltés",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
"Unable to determine date" : "Nem lehet meghatározni a dátumot",
+ "This operation is forbidden" : "Tiltott művelet",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort",
"Error moving file." : "Hiba történt a fájl áthelyezése közben.",
"Error moving file" : "Az állomány áthelyezése nem sikerült.",
"Error" : "Hiba",
@@ -59,7 +62,9 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"],
"\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.",
"File name cannot be empty." : "A fájlnév nem lehet semmi.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!",
"Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "A tároló majdnem tele van ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["egyezések '{filter}'","egyezés '{filter}'"],
"{dirs} and {files}" : "{dirs} és {files}",
@@ -68,6 +73,7 @@
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
"A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>",
"A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Szűkítse le az értesítéseket a létrehozásról és a változásokról a <strong>kedvenc fájlok</strong> <em>(Stream only)</em> -ra",
"A file or folder has been <strong>deleted</strong>" : "Fájl vagy könyvtár <strong>törlése</strong>",
"A file or folder has been <strong>restored</strong>" : "Fájl vagy könyvtár <strong>visszatöltése</strong>",
"You created %1$s" : "Létrehoztam: %1$s",
@@ -97,6 +103,7 @@
"Folder" : "Mappa",
"Upload" : "Feltöltés",
"Cancel upload" : "A feltöltés megszakítása",
+ "No files in here" : "Itt nincsenek fájlok",
"Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
"Select all" : "Összes kijelölése",
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 154fc6d2106..5a0b4247e93 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -64,7 +64,9 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"],
"\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。",
"File name cannot be empty." : "ファイル名を空にすることはできません。",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!",
"Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "ストレージがほぼ一杯です({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : [" '{filter}' にマッチ"],
"{dirs} and {files}" : "{dirs} と {files}",
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index e82b9dfc986..bcc9c1c77a1 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -62,7 +62,9 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"],
"\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。",
"File name cannot be empty." : "ファイル名を空にすることはできません。",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!",
"Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "ストレージがほぼ一杯です({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : [" '{filter}' にマッチ"],
"{dirs} and {files}" : "{dirs} と {files}",
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index a92d45e2481..dbc91ba15dc 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -47,6 +47,8 @@ OC.L10N.register(
"Select" : "Seç",
"Pending" : "Bekliyor",
"Unable to determine date" : "Tarih tespit edilemedi",
+ "This operation is forbidden" : "Bu işlem yasak",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Bu dizine yazılamıyor, lütfen günlüğü kontrol edin veya yönetici ile iletişime geçin",
"Error moving file." : "Dosya taşıma hatası.",
"Error moving file" : "Dosya taşıma hatası",
"Error" : "Hata",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index 1eb5534accb..eb967e2e3ec 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -45,6 +45,8 @@
"Select" : "Seç",
"Pending" : "Bekliyor",
"Unable to determine date" : "Tarih tespit edilemedi",
+ "This operation is forbidden" : "Bu işlem yasak",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Bu dizine yazılamıyor, lütfen günlüğü kontrol edin veya yönetici ile iletişime geçin",
"Error moving file." : "Dosya taşıma hatası.",
"Error moving file" : "Dosya taşıma hatası",
"Error" : "Hata",
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index b12ac2f2517..316df0281e9 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -697,7 +697,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.findFileEl('One.txt').length).toEqual(1);
expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
- .toEqual(OC.imagePath('core', 'filetypes/file.svg'));
+ .toEqual(OC.imagePath('core', 'filetypes/text.svg'));
});
});
describe('Moving files', function() {
@@ -816,7 +816,7 @@ describe('OCA.Files.FileList tests', function() {
expect(notificationStub.getCall(0).args[0]).toEqual('Error while moving file');
expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
- .toEqual(OC.imagePath('core', 'filetypes/file.svg'));
+ .toEqual(OC.imagePath('core', 'filetypes/text.svg'));
});
});
describe('List rendering', function() {
@@ -1161,7 +1161,8 @@ describe('OCA.Files.FileList tests', function() {
var fileData = {
type: 'file',
name: 'test dir',
- icon: OC.webroot + '/core/img/filetypes/application-pdf.svg'
+ icon: OC.webroot + '/core/img/filetypes/application-pdf.svg',
+ mimetype: 'application/pdf'
};
var $tr = fileList.add(fileData);
var $imgDiv = $tr.find('td.filename .thumbnail');
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index 6363f90467d..9877d2b2407 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -38,7 +38,7 @@ OC.L10N.register(
"Service Name (required for OpenStack Object Storage)" : "Nom du service (requis pour le stockage OpenStack)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL du point d'accès d'identité (requis pour le stockage OpenStack)",
"Timeout of HTTP requests in seconds" : "Délai d'attente maximal des requêtes HTTP en secondes",
- "Share" : "Partager",
+ "Share" : "Partage",
"SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC",
"Username as share" : "Nom d'utilisateur comme nom de partage",
"URL" : "URL",
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index 047b5151063..22c5106b44a 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -36,7 +36,7 @@
"Service Name (required for OpenStack Object Storage)" : "Nom du service (requis pour le stockage OpenStack)",
"URL of identity endpoint (required for OpenStack Object Storage)" : "URL du point d'accès d'identité (requis pour le stockage OpenStack)",
"Timeout of HTTP requests in seconds" : "Délai d'attente maximal des requêtes HTTP en secondes",
- "Share" : "Partager",
+ "Share" : "Partage",
"SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC",
"Username as share" : "Nom d'utilisateur comme nom de partage",
"URL" : "URL",
diff --git a/apps/files_external/tests/backends/sftp_key.php b/apps/files_external/tests/backends/sftp_key.php
index 7936c9addce..c83d12251aa 100644
--- a/apps/files_external/tests/backends/sftp_key.php
+++ b/apps/files_external/tests/backends/sftp_key.php
@@ -33,7 +33,8 @@ class SFTP_Key extends Storage {
if ( ! is_array($this->config) or ! isset($this->config['sftp_key']) or ! $this->config['sftp_key']['run']) {
$this->markTestSkipped('SFTP with key backend not configured');
}
- $this->config['sftp_key']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ // Make sure we have an new empty folder to work in
+ $this->config['sftp_key']['root'] .= '/' . $id;
$this->instance = new \OC\Files\Storage\SFTP_Key($this->config['sftp_key']);
$this->instance->mkdir('/');
}
@@ -47,16 +48,16 @@ class SFTP_Key extends Storage {
}
/**
- * @expectedException InvalidArgumentException
- */
- public function testInvalidAddressShouldThrowException() {
- # I'd use example.com for this, but someone decided to break the spec and make it resolve
- $this->instance->assertHostAddressValid('notarealaddress...');
- }
+ * @expectedException InvalidArgumentException
+ */
+ public function testInvalidAddressShouldThrowException() {
+ // I'd use example.com for this, but someone decided to break the spec and make it resolve
+ $this->instance->assertHostAddressValid('notarealaddress...');
+ }
public function testValidAddressShouldPass() {
- $this->assertTrue($this->instance->assertHostAddressValid('localhost'));
- }
+ $this->assertTrue($this->instance->assertHostAddressValid('localhost'));
+ }
/**
* @expectedException InvalidArgumentException
@@ -66,20 +67,20 @@ class SFTP_Key extends Storage {
}
/**
- * @expectedException InvalidArgumentException
- */
- public function testNonNumericalPortNumberShouldThrowException() {
- $this->instance->assertPortNumberValid('a');
- }
+ * @expectedException InvalidArgumentException
+ */
+ public function testNonNumericalPortNumberShouldThrowException() {
+ $this->instance->assertPortNumberValid('a');
+ }
/**
- * @expectedException InvalidArgumentException
- */
- public function testHighPortNumberShouldThrowException() {
- $this->instance->assertPortNumberValid('65536');
- }
+ * @expectedException InvalidArgumentException
+ */
+ public function testHighPortNumberShouldThrowException() {
+ $this->instance->assertPortNumberValid('65536');
+ }
public function testValidPortNumberShouldPass() {
- $this->assertTrue($this->instance->assertPortNumberValid('22222'));
- }
+ $this->assertTrue($this->instance->assertPortNumberValid('22222'));
+ }
}
diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index 66a1314ff29..dc15a19e520 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Soubor nebo složka byla <strong>nasdílena</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
+ "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
"You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
"%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
"%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json
index 330d64061e4..8533ee053c3 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Soubor nebo složka byla <strong>nasdílena</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
+ "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
"You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
"%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
"%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index d46e907e0c8..21cba85c2fd 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
"A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
"%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
@@ -40,6 +41,8 @@ OC.L10N.register(
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt",
"You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben",
"Shares" : "Freigaben",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.",
"Password" : "Passwort",
@@ -62,6 +65,9 @@ OC.L10N.register(
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
+ "Share it:" : "Zum Teilen:",
+ "Add it to your website:" : "Zum Hinzufügen zu Deiner Website:",
+ "Share with me via ownCloud" : "Teile mit mir über ownCloud",
"HTML Code:" : "HTML-Code:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index 30d6badbb34..b465569337a 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
"A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
"%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
@@ -38,6 +39,8 @@
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt",
"You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben",
"Shares" : "Freigaben",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.",
"Password" : "Passwort",
@@ -60,6 +63,9 @@
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
+ "Share it:" : "Zum Teilen:",
+ "Add it to your website:" : "Zum Hinzufügen zu Deiner Website:",
+ "Share with me via ownCloud" : "Teile mit mir über ownCloud",
"HTML Code:" : "HTML-Code:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js
index 0074bdbecad..1a6e334f588 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
"A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "You received a new remote share %2$s from %1$s" : "Sie haben eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
"%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
@@ -40,6 +41,8 @@ OC.L10N.register(
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt",
"You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt",
"Shares" : "Geteiltes",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
"Password" : "Passwort",
@@ -62,6 +65,8 @@ OC.L10N.register(
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:",
+ "Share it:" : "Zum Teilen:",
+ "Add it to your website:" : "Zum Hinzufügen zu Ihrer Website:",
"Share with me via ownCloud" : "Teilen Sie mit mir über ownCloud",
"HTML Code:" : "HTML-Code:"
},
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index fef8ebf7b9d..4101c5834fa 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
"A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "You received a new remote share %2$s from %1$s" : "Sie haben eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
"%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
@@ -38,6 +39,8 @@
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt",
"You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt",
"Shares" : "Geteiltes",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID",
"This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
"Password" : "Passwort",
@@ -60,6 +63,8 @@
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:",
+ "Share it:" : "Zum Teilen:",
+ "Add it to your website:" : "Zum Hinzufügen zu Ihrer Website:",
"Share with me via ownCloud" : "Teilen Sie mit mir über ownCloud",
"HTML Code:" : "HTML-Code:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js
index 4f20489a687..01effb3f91f 100644
--- a/apps/files_sharing/l10n/el.js
+++ b/apps/files_sharing/l10n/el.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Ένα αρχείο ή φάκελος <strong>διαμοιράστηκε</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Ένα αρχείο ή φάκελος διαμοιράστηκε από <strong>έναν άλλο διακομιστή</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Ένα δημόσια διαμοιρασμένο αρχείο ή φάκελος <strong>ελήφθη</strong>",
+ "You received a new remote share %2$s from %1$s" : "Λάβατε ένα νέο απομακρυσμένο διαμοιρασμό %2$s από %1$s",
"You received a new remote share from %s" : "Λάβατε ένα νέο απομακρυσμένο κοινόχρηστο φάκελο από %s",
"%1$s accepted remote share %2$s" : "Ο %1$s αποδέχθηκε τον απομακρυσμένο φάκελο %2$s",
"%1$s declined remote share %2$s" : "Ο %1$s αρνήθηκε τον απομακρυσμένο διαμοιρασμένο φάκελο %2$s",
diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json
index 8d5a947f4c2..aee0ccb29a1 100644
--- a/apps/files_sharing/l10n/el.json
+++ b/apps/files_sharing/l10n/el.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Ένα αρχείο ή φάκελος <strong>διαμοιράστηκε</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Ένα αρχείο ή φάκελος διαμοιράστηκε από <strong>έναν άλλο διακομιστή</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Ένα δημόσια διαμοιρασμένο αρχείο ή φάκελος <strong>ελήφθη</strong>",
+ "You received a new remote share %2$s from %1$s" : "Λάβατε ένα νέο απομακρυσμένο διαμοιρασμό %2$s από %1$s",
"You received a new remote share from %s" : "Λάβατε ένα νέο απομακρυσμένο κοινόχρηστο φάκελο από %s",
"%1$s accepted remote share %2$s" : "Ο %1$s αποδέχθηκε τον απομακρυσμένο φάκελο %2$s",
"%1$s declined remote share %2$s" : "Ο %1$s αρνήθηκε τον απομακρυσμένο διαμοιρασμένο φάκελο %2$s",
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index ca10ca211d1..0a8a19ed142 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -29,7 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé publiquement a été <strong>téléchargé</strong>",
- "You received a new remote share %2$s from %1$s" : "L'utilisateur %1$s a partagé la ressource %2$s avec vous.",
+ "You received a new remote share %2$s from %1$s" : "L'utilisateur %1$s a partagé la ressource distante %2$s avec vous",
"You received a new remote share from %s" : "Vous avez reçu un partage distant de %s",
"%1$s accepted remote share %2$s" : "%1$s a accepté le partage distant %2$s",
"%1$s declined remote share %2$s" : "%1$s a refusé le partage distant %2$s",
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index ed8b166729a..15ddb2d4187 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -27,7 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé publiquement a été <strong>téléchargé</strong>",
- "You received a new remote share %2$s from %1$s" : "L'utilisateur %1$s a partagé la ressource %2$s avec vous.",
+ "You received a new remote share %2$s from %1$s" : "L'utilisateur %1$s a partagé la ressource distante %2$s avec vous",
"You received a new remote share from %s" : "Vous avez reçu un partage distant de %s",
"%1$s accepted remote share %2$s" : "%1$s a accepté le partage distant %2$s",
"%1$s declined remote share %2$s" : "%1$s a refusé le partage distant %2$s",
diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js
index 6322747c9c1..e6055596261 100644
--- a/apps/files_sharing/l10n/id.js
+++ b/apps/files_sharing/l10n/id.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Sebuah berkas atau folder telah <strong>dibagikan</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Sebuah berkas atau folder telah dibagikan dari <strong>server lainnya</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Sebuah berkas atau folder berbagi publik telah <strong>diunduh</strong>",
+ "You received a new remote share %2$s from %1$s" : "Anda menerima berbagi remote baru %2$s dari %1$s",
"You received a new remote share from %s" : "Anda menerima berbagi remote baru dari %s",
"%1$s accepted remote share %2$s" : "%1$s menerima berbagi remote %2$s",
"%1$s declined remote share %2$s" : "%1$s menolak berbagi remote %2$s",
diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json
index ed1a6fb7bca..e0f19c8537f 100644
--- a/apps/files_sharing/l10n/id.json
+++ b/apps/files_sharing/l10n/id.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Sebuah berkas atau folder telah <strong>dibagikan</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Sebuah berkas atau folder telah dibagikan dari <strong>server lainnya</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Sebuah berkas atau folder berbagi publik telah <strong>diunduh</strong>",
+ "You received a new remote share %2$s from %1$s" : "Anda menerima berbagi remote baru %2$s dari %1$s",
"You received a new remote share from %s" : "Anda menerima berbagi remote baru dari %s",
"%1$s accepted remote share %2$s" : "%1$s menerima berbagi remote %2$s",
"%1$s declined remote share %2$s" : "%1$s menolak berbagi remote %2$s",
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 1b17e1b28c9..1a5e4c0bbde 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Un file o una cartella è stato <strong>condiviso</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Un file condiviso pubblicamente o una cartella è stato <strong>scaricato</strong>",
+ "You received a new remote share %2$s from %1$s" : "Hai ricevuto una nuova condivisione remota %2$s da %1$s",
"You received a new remote share from %s" : "Hai ricevuto una nuova condivisione remota da %s",
"%1$s accepted remote share %2$s" : "%1$s ha accettato la condivisione remota %2$s",
"%1$s declined remote share %2$s" : "%1$s ha rifiutato la condivisione remota %2$s",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index bcac10073d0..319a4a44c91 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Un file o una cartella è stato <strong>condiviso</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Un file condiviso pubblicamente o una cartella è stato <strong>scaricato</strong>",
+ "You received a new remote share %2$s from %1$s" : "Hai ricevuto una nuova condivisione remota %2$s da %1$s",
"You received a new remote share from %s" : "Hai ricevuto una nuova condivisione remota da %s",
"%1$s accepted remote share %2$s" : "%1$s ha accettato la condivisione remota %2$s",
"%1$s declined remote share %2$s" : "%1$s ha rifiutato la condivisione remota %2$s",
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index bc81dc8dbd4..93e73238829 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -61,6 +61,9 @@ OC.L10N.register(
"Open documentation" : "ドキュメントを開く",
"Allow users on this server to send shares to other servers" : "ユーザーがこのサーバーから他のサーバーに共有することを許可する",
"Allow users on this server to receive shares from other servers" : "ユーザーが他のサーバーからこのサーバーに共有することを許可する",
+ "Share it:" : "共有:",
+ "Add it to your website:" : "ウェブサイトに追加:",
+ "Share with me via ownCloud" : "OwnCloud経由で共有",
"HTML Code:" : "HTMLコード:"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index 9e9018b0ca5..6f3acbb7479 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -59,6 +59,9 @@
"Open documentation" : "ドキュメントを開く",
"Allow users on this server to send shares to other servers" : "ユーザーがこのサーバーから他のサーバーに共有することを許可する",
"Allow users on this server to receive shares from other servers" : "ユーザーが他のサーバーからこのサーバーに共有することを許可する",
+ "Share it:" : "共有:",
+ "Add it to your website:" : "ウェブサイトに追加:",
+ "Share with me via ownCloud" : "OwnCloud経由で共有",
"HTML Code:" : "HTMLコード:"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 50ea0c28631..17790058fe1 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
"A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Общий файл или каталог был <strong>скачан</strong>",
+ "You received a new remote share %2$s from %1$s" : "Вы получили новый удаленный общий ресурс %2$s от %1$s",
"You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
"%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
"%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 9fd69583970..a3fdafbed83 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
"A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Общий файл или каталог был <strong>скачан</strong>",
+ "You received a new remote share %2$s from %1$s" : "Вы получили новый удаленный общий ресурс %2$s от %1$s",
"You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
"%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
"%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
diff --git a/apps/files_sharing/l10n/sk_SK.js b/apps/files_sharing/l10n/sk_SK.js
index c7e199cf4b5..897b0ae624c 100644
--- a/apps/files_sharing/l10n/sk_SK.js
+++ b/apps/files_sharing/l10n/sk_SK.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Remote share password" : "Heslo k vzdialenému úložisku",
"Cancel" : "Zrušiť",
"Add remote share" : "Pridať vzdialené úložisko",
+ "You can upload into this folder" : "Môžete nahrávať do tohto priečinka",
"No ownCloud installation (7 or higher) found at {remote}" : "Nebola nájdená inštalácia ownCloudu (7 alebo vyššia) {remote}",
"Invalid ownCloud url" : "Chybná ownCloud url",
"Share" : "Zdieľať",
@@ -28,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Súbor alebo priečinok bol <strong>zdieľaný</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Súbor alebo priečinok bol vyzdieľaný z <strong>iného servera</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Verejne zdieľaný súbor alebo priečinok bol <strong>stiahnutý</strong>",
+ "You received a new remote share %2$s from %1$s" : "Dostali ste nové vzdialené zdieľanie %2$s od používateľa %1$s",
"You received a new remote share from %s" : "Dostali ste nové vzdialené zdieľanie z %s",
"%1$s accepted remote share %2$s" : "%1$s povolil vzdialené zdieľanie %2$s",
"%1$s declined remote share %2$s" : "%1$s odmietol vzdialené zdieľanie %2$s",
@@ -39,6 +41,8 @@ OC.L10N.register(
"%2$s shared %1$s with you" : "%2$s vám zdieľal %1$s",
"You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu",
"Shares" : "Zdieľanie",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID, viac n %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID",
"This share is password-protected" : "Toto zdieľanie je chránené heslom",
"The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.",
"Password" : "Heslo",
@@ -56,9 +60,13 @@ OC.L10N.register(
"Download %s" : "Stiahnuť %s",
"Direct link" : "Priama linka",
"Federated Cloud Sharing" : "Združené cloudové zdieľanie",
+ "Open documentation" : "Otvoriť dokumentáciu",
"Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohoto servera posielať zdieľania na iné servery",
"Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov",
"Your Federated Cloud ID:" : "Vaše združené Cloud ID",
+ "Share it:" : "Zdieľať:",
+ "Add it to your website:" : "Pridať na svoju webstránku:",
+ "Share with me via ownCloud" : "Zdieľané so mnou cez ownCloud",
"HTML Code:" : "HTML kód:"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_sharing/l10n/sk_SK.json b/apps/files_sharing/l10n/sk_SK.json
index d8bbbf6a57d..f7f72174695 100644
--- a/apps/files_sharing/l10n/sk_SK.json
+++ b/apps/files_sharing/l10n/sk_SK.json
@@ -19,6 +19,7 @@
"Remote share password" : "Heslo k vzdialenému úložisku",
"Cancel" : "Zrušiť",
"Add remote share" : "Pridať vzdialené úložisko",
+ "You can upload into this folder" : "Môžete nahrávať do tohto priečinka",
"No ownCloud installation (7 or higher) found at {remote}" : "Nebola nájdená inštalácia ownCloudu (7 alebo vyššia) {remote}",
"Invalid ownCloud url" : "Chybná ownCloud url",
"Share" : "Zdieľať",
@@ -26,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Súbor alebo priečinok bol <strong>zdieľaný</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Súbor alebo priečinok bol vyzdieľaný z <strong>iného servera</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "Verejne zdieľaný súbor alebo priečinok bol <strong>stiahnutý</strong>",
+ "You received a new remote share %2$s from %1$s" : "Dostali ste nové vzdialené zdieľanie %2$s od používateľa %1$s",
"You received a new remote share from %s" : "Dostali ste nové vzdialené zdieľanie z %s",
"%1$s accepted remote share %2$s" : "%1$s povolil vzdialené zdieľanie %2$s",
"%1$s declined remote share %2$s" : "%1$s odmietol vzdialené zdieľanie %2$s",
@@ -37,6 +39,8 @@
"%2$s shared %1$s with you" : "%2$s vám zdieľal %1$s",
"You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu",
"Shares" : "Zdieľanie",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID, viac n %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID",
"This share is password-protected" : "Toto zdieľanie je chránené heslom",
"The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.",
"Password" : "Heslo",
@@ -54,9 +58,13 @@
"Download %s" : "Stiahnuť %s",
"Direct link" : "Priama linka",
"Federated Cloud Sharing" : "Združené cloudové zdieľanie",
+ "Open documentation" : "Otvoriť dokumentáciu",
"Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohoto servera posielať zdieľania na iné servery",
"Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov",
"Your Federated Cloud ID:" : "Vaše združené Cloud ID",
+ "Share it:" : "Zdieľať:",
+ "Add it to your website:" : "Pridať na svoju webstránku:",
+ "Share with me via ownCloud" : "Zdieľané so mnou cez ownCloud",
"HTML Code:" : "HTML kód:"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/th_TH.js b/apps/files_sharing/l10n/th_TH.js
index 2ab0d72bb56..3314dcdb9fc 100644
--- a/apps/files_sharing/l10n/th_TH.js
+++ b/apps/files_sharing/l10n/th_TH.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "ไฟล์หรือโฟลเดอร์ได้ถูก <strong>แชร์</strong>",
"A file or folder was shared from <strong>another server</strong>" : "ไฟล์หรือโฟลเดอร์จะถูกแชร์จาก <strong>เซิร์ฟเวอร์อื่นๆ</ strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "แชร์ไฟล์หรือโฟลเดอร์สาธารณะถูก <strong>ดาวน์โหลด</strong>",
+ "You received a new remote share %2$s from %1$s" : "คุณได้รับการแชร์ระยะไกลใหม่ %2$s จาก %1$s",
"You received a new remote share from %s" : "คุณได้รับการแชร์ระยะไกลใหม่จาก %s",
"%1$s accepted remote share %2$s" : "%1$s ยอมรับการแชร์ %2$s จากระยะไกล",
"%1$s declined remote share %2$s" : "%1$s ปฏิเสธการแชร์ %2$s จากระยะไกล",
diff --git a/apps/files_sharing/l10n/th_TH.json b/apps/files_sharing/l10n/th_TH.json
index a4525d255f4..fc9189e1c7d 100644
--- a/apps/files_sharing/l10n/th_TH.json
+++ b/apps/files_sharing/l10n/th_TH.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "ไฟล์หรือโฟลเดอร์ได้ถูก <strong>แชร์</strong>",
"A file or folder was shared from <strong>another server</strong>" : "ไฟล์หรือโฟลเดอร์จะถูกแชร์จาก <strong>เซิร์ฟเวอร์อื่นๆ</ strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "แชร์ไฟล์หรือโฟลเดอร์สาธารณะถูก <strong>ดาวน์โหลด</strong>",
+ "You received a new remote share %2$s from %1$s" : "คุณได้รับการแชร์ระยะไกลใหม่ %2$s จาก %1$s",
"You received a new remote share from %s" : "คุณได้รับการแชร์ระยะไกลใหม่จาก %s",
"%1$s accepted remote share %2$s" : "%1$s ยอมรับการแชร์ %2$s จากระยะไกล",
"%1$s declined remote share %2$s" : "%1$s ปฏิเสธการแชร์ %2$s จากระยะไกล",
diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js
index b822570238b..12a85f732b2 100644
--- a/apps/files_sharing/l10n/tr.js
+++ b/apps/files_sharing/l10n/tr.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"A file or folder has been <strong>shared</strong>" : "Bir dosya veya klasör <strong>paylaşıldı</strong>",
"A file or folder was shared from <strong>another server</strong>" : "<strong>Başka sunucudan</strong> bir dosya veya klasör paylaşıldı",
"A public shared file or folder was <strong>downloaded</strong>" : "Herkese açık paylaşılan bir dosya veya klasör <strong>indirildi</strong>",
+ "You received a new remote share %2$s from %1$s" : "%1$s kişisinden, %2$s uzak paylaşımını aldınız",
"You received a new remote share from %s" : "%s kişisinden yeni bir uzak paylaşım aldınız",
"%1$s accepted remote share %2$s" : "%1$s, %2$s uzak paylaşımını kabul etti",
"%1$s declined remote share %2$s" : "%1$s, %2$s uzak paylaşımını reddetti",
diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json
index 4e6ed7f967d..c6f23ef0772 100644
--- a/apps/files_sharing/l10n/tr.json
+++ b/apps/files_sharing/l10n/tr.json
@@ -27,6 +27,7 @@
"A file or folder has been <strong>shared</strong>" : "Bir dosya veya klasör <strong>paylaşıldı</strong>",
"A file or folder was shared from <strong>another server</strong>" : "<strong>Başka sunucudan</strong> bir dosya veya klasör paylaşıldı",
"A public shared file or folder was <strong>downloaded</strong>" : "Herkese açık paylaşılan bir dosya veya klasör <strong>indirildi</strong>",
+ "You received a new remote share %2$s from %1$s" : "%1$s kişisinden, %2$s uzak paylaşımını aldınız",
"You received a new remote share from %s" : "%s kişisinden yeni bir uzak paylaşım aldınız",
"%1$s accepted remote share %2$s" : "%1$s, %2$s uzak paylaşımını kabul etti",
"%1$s declined remote share %2$s" : "%1$s, %2$s uzak paylaşımını reddetti",
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 3284a60172f..dc8d1738b05 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -253,7 +253,7 @@ class Storage extends DAV implements ISharedStorage {
// throw this to be on the safe side: the share will still be visible
// in the UI in case the failure is intermittent, and the user will
// be able to decide whether to remove it if it's really gone
- throw new NotFoundException();
+ throw new StorageNotAvailableException();
}
return json_decode($response->getBody(), true);
diff --git a/apps/files_sharing/lib/sharedmount.php b/apps/files_sharing/lib/sharedmount.php
index fd672d0500c..2771e0415b0 100644
--- a/apps/files_sharing/lib/sharedmount.php
+++ b/apps/files_sharing/lib/sharedmount.php
@@ -46,12 +46,18 @@ class SharedMount extends MountPoint implements MoveableMount {
*/
private $recipientView;
+ /**
+ * @var string
+ */
+ private $user;
+
public function __construct($storage, $mountpoint, $arguments = null, $loader = null) {
// first update the mount point before creating the parent
$this->ownerPropagator = $arguments['propagator'];
- $this->recipientView = new View('/' . $arguments['user'] . '/files');
+ $this->user = $arguments['user'];
+ $this->recipientView = new View('/' . $this->user . '/files');
$newMountPoint = $this->verifyMountPoint($arguments['share']);
- $absMountPoint = '/' . $arguments['user'] . '/files' . $newMountPoint;
+ $absMountPoint = '/' . $this->user . '/files' . $newMountPoint;
$arguments['ownerView'] = new View('/' . $arguments['share']['uid_owner'] . '/files');
parent::__construct($storage, $absMountPoint, $arguments, $loader);
}
@@ -90,7 +96,7 @@ class SharedMount extends MountPoint implements MoveableMount {
* @param array $share reference to the share which should be modified
* @return bool
*/
- private static function updateFileTarget($newPath, &$share) {
+ private function updateFileTarget($newPath, &$share) {
// if the user renames a mount point from a group share we need to create a new db entry
// for the unique name
if ($share['share_type'] === \OCP\Share::SHARE_TYPE_GROUP && empty($share['unique_name'])) {
@@ -98,7 +104,7 @@ class SharedMount extends MountPoint implements MoveableMount {
.' `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`,'
.' `file_target`, `token`, `parent`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)');
$arguments = array($share['item_type'], $share['item_source'], $share['item_target'],
- 2, \OCP\User::getUser(), $share['uid_owner'], $share['permissions'], $share['stime'], $share['file_source'],
+ 2, $this->user, $share['uid_owner'], $share['permissions'], $share['stime'], $share['file_source'],
$newPath, $share['token'], $share['id']);
} else {
// rename mount point
diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php
index c0a9dc328d1..5bde908109d 100644
--- a/apps/files_sharing/publicwebdav.php
+++ b/apps/files_sharing/publicwebdav.php
@@ -45,7 +45,7 @@ $defaults = new OC_Defaults();
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
// FIXME: The following line is a workaround for legacy components relying on being able to send a GET to /
$server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin());
-$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
+$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree, true));
$server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin(\OC::$server->getConfig()));
$server->addPlugin(new \OC\Connector\Sabre\ExceptionLoggerPlugin('webdav', \OC::$server->getLogger()));
diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js
index 1bbf4ffca09..aa409285ca4 100644
--- a/apps/files_sharing/tests/js/shareSpec.js
+++ b/apps/files_sharing/tests/js/shareSpec.js
@@ -90,7 +90,7 @@ describe('OCA.Sharing.Util tests', function() {
type: 'dir',
name: 'One',
path: '/subdir',
- mimetype: 'text/plain',
+ mimetype: 'httpd/unix-directory',
size: 12,
permissions: OC.PERMISSION_ALL,
etag: 'abc'
diff --git a/apps/files_trashbin/command/cleanup.php b/apps/files_trashbin/command/cleanup.php
index 961f72763ea..0cc94912339 100644
--- a/apps/files_trashbin/command/cleanup.php
+++ b/apps/files_trashbin/command/cleanup.php
@@ -38,7 +38,7 @@ class CleanUp extends Command {
/** @var IRootFolder */
protected $rootFolder;
- /** @var \OC\DB\Connection */
+ /** @var \OCP\IDBConnection */
protected $dbConnection;
/**
@@ -107,9 +107,9 @@ class CleanUp extends Command {
\OC_Util::setupFS($uid);
if ($this->rootFolder->nodeExists('/' . $uid . '/files_trashbin')) {
$this->rootFolder->get('/' . $uid . '/files_trashbin')->delete();
- $query = $this->dbConnection->createQueryBuilder();
- $query->delete('`*PREFIX*files_trash`')
- ->where($query->expr()->eq('`user`', ':uid'))
+ $query = $this->dbConnection->getQueryBuilder();
+ $query->delete('*PREFIX*files_trash')
+ ->where($query->expr()->eq('user', $query->createParameter('uid')))
->setParameter('uid', $uid);
$query->execute();
}
diff --git a/apps/files_trashbin/lib/storage.php b/apps/files_trashbin/lib/storage.php
index 006971fb242..4185fc6aec4 100644
--- a/apps/files_trashbin/lib/storage.php
+++ b/apps/files_trashbin/lib/storage.php
@@ -26,6 +26,7 @@ namespace OCA\Files_Trashbin;
use OC\Files\Filesystem;
use OC\Files\Storage\Wrapper\Wrapper;
+use OCP\IUserManager;
class Storage extends Wrapper {
@@ -41,8 +42,12 @@ class Storage extends Wrapper {
*/
private static $disableTrash = false;
- function __construct($parameters) {
+ /** @var IUserManager */
+ private $userManager;
+
+ function __construct($parameters, IUserManager $userManager = null) {
$this->mountPoint = $parameters['mountPoint'];
+ $this->userManager = $userManager;
parent::__construct($parameters);
}
@@ -101,6 +106,27 @@ class Storage extends Wrapper {
}
/**
+ * check if it is a file located in data/user/files only files in the
+ * 'files' directory should be moved to the trash
+ *
+ * @param $path
+ * @return bool
+ */
+ protected function shouldMoveToTrash($path){
+ $normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path);
+ $parts = explode('/', $normalized);
+ if (count($parts) < 4) {
+ return false;
+ }
+
+ if ($this->userManager->userExists($parts[1]) && $parts[2] == 'files') {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
* Run the delete operation with the given method
*
* @param string $path path of file or folder to delete
@@ -112,6 +138,7 @@ class Storage extends Wrapper {
if (self::$disableTrash
|| !\OC_App::isEnabled('files_trashbin')
|| (pathinfo($path, PATHINFO_EXTENSION) === 'part')
+ || $this->shouldMoveToTrash($path) === false
) {
return call_user_func_array([$this->storage, $method], [$path]);
}
@@ -144,7 +171,10 @@ class Storage extends Wrapper {
*/
public static function setupStorage() {
\OC\Files\Filesystem::addStorageWrapper('oc_trashbin', function ($mountPoint, $storage) {
- return new \OCA\Files_Trashbin\Storage(array('storage' => $storage, 'mountPoint' => $mountPoint));
+ return new \OCA\Files_Trashbin\Storage(
+ array('storage' => $storage, 'mountPoint' => $mountPoint),
+ \OC::$server->getUserManager()
+ );
}, 1);
}
diff --git a/apps/files_trashbin/tests/command/cleanuptest.php b/apps/files_trashbin/tests/command/cleanuptest.php
index 6e2f78093e0..a7400e901fa 100644
--- a/apps/files_trashbin/tests/command/cleanuptest.php
+++ b/apps/files_trashbin/tests/command/cleanuptest.php
@@ -43,7 +43,7 @@ class CleanUpTest extends TestCase {
protected $dbConnection;
/** @var string */
- protected $trashTable = '`*PREFIX*files_trash`';
+ protected $trashTable = '*PREFIX*files_trash';
/** @var string */
protected $user0 = 'user0';
@@ -64,19 +64,22 @@ class CleanUpTest extends TestCase {
* populate files_trash table with 10 dummy values
*/
public function initTable() {
- $query = $this->dbConnection->createQueryBuilder();
+ $query = $this->dbConnection->getQueryBuilder();
$query->delete($this->trashTable)->execute();
for ($i = 0; $i < 10; $i++) {
$query->insert($this->trashTable)
->values(array(
- '`id`' => $query->expr()->literal('file'.$i),
- '`timestamp`' => $query->expr()->literal($i),
- '`location`' => $query->expr()->literal('.'),
- '`user`' => $query->expr()->literal('user'.$i%2)
+ 'id' => $query->expr()->literal('file'.$i),
+ 'timestamp' => $query->expr()->literal($i),
+ 'location' => $query->expr()->literal('.'),
+ 'user' => $query->expr()->literal('user'.$i%2)
))->execute();
}
- $getAllQuery = $this->dbConnection->createQueryBuilder();
- $result = $getAllQuery->select('`id`')->from($this->trashTable)->execute()->fetchAll();
+ $getAllQuery = $this->dbConnection->getQueryBuilder();
+ $result = $getAllQuery->select('id')
+ ->from($this->trashTable)
+ ->execute()
+ ->fetchAll();
$this->assertSame(10, count($result));
}
@@ -106,8 +109,8 @@ class CleanUpTest extends TestCase {
if ($nodeExists) {
// if the delete operation was execute only files from user1
// should be left.
- $query = $this->dbConnection->createQueryBuilder();
- $result = $query->select('`user`')
+ $query = $this->dbConnection->getQueryBuilder();
+ $result = $query->select('user')
->from($this->trashTable)
->execute()->fetchAll();
$this->assertSame(5, count($result));
@@ -117,8 +120,11 @@ class CleanUpTest extends TestCase {
} else {
// if no delete operation was execute we should still have all 10
// database entries
- $getAllQuery = $this->dbConnection->createQueryBuilder();
- $result = $getAllQuery->select('`id`')->from($this->trashTable)->execute()->fetchAll();
+ $getAllQuery = $this->dbConnection->getQueryBuilder();
+ $result = $getAllQuery->select('id')
+ ->from($this->trashTable)
+ ->execute()
+ ->fetchAll();
$this->assertSame(10, count($result));
}
diff --git a/apps/files_trashbin/tests/storage.php b/apps/files_trashbin/tests/storage.php
index 637543683dc..64540505d22 100644
--- a/apps/files_trashbin/tests/storage.php
+++ b/apps/files_trashbin/tests/storage.php
@@ -493,4 +493,34 @@ class Storage extends \Test\TestCase {
$results = $this->rootView->getDirectoryContent($this->user . '/files_trashbin/files/');
$this->assertEquals(0, count($results));
}
+
+ /**
+ * @dataProvider dataTestShouldMoveToTrash
+ */
+ public function testShouldMoveToTrash($mountPoint, $path, $userExists, $expected) {
+ $tmpStorage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
+ ->disableOriginalConstructor()->getMock();
+ $userManager = $this->getMockBuilder('OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $userManager->expects($this->any())
+ ->method('userExists')->willReturn($userExists);
+ $storage = new \OCA\Files_Trashbin\Storage(
+ ['mountPoint' => $mountPoint, 'storage' => $tmpStorage],
+ $userManager
+ );
+
+ $this->assertSame($expected,
+ $this->invokePrivate($storage, 'shouldMoveToTrash', [$path])
+ );
+
+ }
+
+ public function dataTestShouldMoveToTrash() {
+ return [
+ ['/schiesbn/', '/files/test.txt', true, true],
+ ['/schiesbn/', '/files/test.txt', false, false],
+ ['/schiesbn/', '/test.txt', true, false],
+ ['/schiesbn/', '/test.txt', false, false],
+ ];
+ }
}
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index 24695f64fa8..1bc0392a7d7 100644
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -525,8 +525,7 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
if($isMemberUid) {
//we got uids, need to get their DNs to 'translate' them to user names
$filter = $this->access->combineFilterWithAnd(array(
- \OCP\Util::mb_str_replace('%uid', $member,
- $this->access->connection->ldapLoginFilter, 'UTF-8'),
+ str_replace('%uid', $member, $this->access->connection->ldapLoginFilter),
$this->access->getFilterPartForUserSearch($search)
));
$ldap_users = $this->access->fetchListOfUsers($filter, 'dn');
@@ -615,8 +614,7 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
if($isMemberUid) {
//we got uids, need to get their DNs to 'translate' them to user names
$filter = $this->access->combineFilterWithAnd(array(
- \OCP\Util::mb_str_replace('%uid', $member,
- $this->access->connection->ldapLoginFilter, 'UTF-8'),
+ str_replace('%uid', $member, $this->access->connection->ldapLoginFilter),
$this->access->getFilterPartForUserSearch($search)
));
$ldap_users = $this->access->fetchListOfUsers($filter, 'dn');
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index e25b3cb10a8..44ed60fa041 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -78,6 +78,7 @@ OC.L10N.register(
"Verify settings" : "Einstellungen überprüfen",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Eine neue und leere Konfiguration hinzufügen",
"Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren",
"Delete the current configuration" : "Aktuelle Konfiguration löschen",
"Host" : "Host",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index 845d382af36..d6c89b20b7c 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -76,6 +76,7 @@
"Verify settings" : "Einstellungen überprüfen",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Eine neue und leere Konfiguration hinzufügen",
"Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren",
"Delete the current configuration" : "Aktuelle Konfiguration löschen",
"Host" : "Host",
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 6880c5f1b70..458b47a4cd6 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -78,6 +78,7 @@ OC.L10N.register(
"Verify settings" : "Einstellungen überprüfen",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Eine neue und leere Konfiguration hinzufügen",
"Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren ",
"Delete the current configuration" : "Aktuelle Konfiguration löschen",
"Host" : "Host",
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index 61644710a34..c0279e52966 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -76,6 +76,7 @@
"Verify settings" : "Einstellungen überprüfen",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Eine neue und leere Konfiguration hinzufügen",
"Copy current configuration into new directory binding" : "Aktuelle Konfiguration in eine neues Verzeichnis-Bind kopieren ",
"Delete the current configuration" : "Aktuelle Konfiguration löschen",
"Host" : "Host",
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index 0dfba342d31..2c4f4bfb5fa 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -115,8 +115,8 @@ OC.L10N.register(
"Backup (Replica) Port" : "Port du serveur de backup (réplique)",
"Disable Main Server" : "Désactiver le serveur principal",
"Only connect to the replica server." : "Se connecter uniquement à la réplique",
- "Case insensitive LDAP server (Windows)" : "Serveur LDAP insensible à la casse (Windows)",
- "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL.",
+ "Case insensitive LDAP server (Windows)" : "Serveur LDAP non sensible à la casse (Windows)",
+ "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.",
"Cache Time-To-Live" : "Durée de vie du cache (TTL)",
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
@@ -129,7 +129,7 @@ OC.L10N.register(
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
"The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
- "Base Group Tree" : "Base Group Tree",
+ "Base Group Tree" : "DN racine de l'arbre groupes",
"One Group Base DN per line" : "Un DN de base groupe par ligne",
"Group Search Attributes" : "Attributs de recherche des groupes",
"Group-Member association" : "Association groupe-membre",
@@ -145,9 +145,9 @@ OC.L10N.register(
"User Home Folder Naming Rule" : "Règle de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide pour user name (défaut). Vous pouvez aussi spécifier un attribut LDAP / AD.",
"Internal Username" : "Nom d'utilisateur interne",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laisser à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
"Internal Username Attribute:" : "Nom d'utilisateur interne :",
- "Override UUID detection" : "Passer outre la détection d'UUID",
+ "Override UUID detection" : "Passer outre la détection des UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.",
"UUID Attribute for Users:" : "Attribut UUID pour les Utilisateurs :",
"UUID Attribute for Groups:" : "Attribut UUID pour les Groupes :",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index 32df29372a2..43519556e12 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -113,8 +113,8 @@
"Backup (Replica) Port" : "Port du serveur de backup (réplique)",
"Disable Main Server" : "Désactiver le serveur principal",
"Only connect to the replica server." : "Se connecter uniquement à la réplique",
- "Case insensitive LDAP server (Windows)" : "Serveur LDAP insensible à la casse (Windows)",
- "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL.",
+ "Case insensitive LDAP server (Windows)" : "Serveur LDAP non sensible à la casse (Windows)",
+ "Turn off SSL certificate validation." : "Désactiver la validation des certificats SSL",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.",
"Cache Time-To-Live" : "Durée de vie du cache (TTL)",
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
@@ -127,7 +127,7 @@
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
"The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
- "Base Group Tree" : "Base Group Tree",
+ "Base Group Tree" : "DN racine de l'arbre groupes",
"One Group Base DN per line" : "Un DN de base groupe par ligne",
"Group Search Attributes" : "Attributs de recherche des groupes",
"Group-Member association" : "Association groupe-membre",
@@ -143,9 +143,9 @@
"User Home Folder Naming Rule" : "Règle de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide pour user name (défaut). Vous pouvez aussi spécifier un attribut LDAP / AD.",
"Internal Username" : "Nom d'utilisateur interne",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laisser à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
"Internal Username Attribute:" : "Nom d'utilisateur interne :",
- "Override UUID detection" : "Passer outre la détection d'UUID",
+ "Override UUID detection" : "Passer outre la détection des UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.",
"UUID Attribute for Users:" : "Attribut UUID pour les Utilisateurs :",
"UUID Attribute for Groups:" : "Attribut UUID pour les Groupes :",
diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js
index 5daf846dc04..a89323bc3c2 100644
--- a/apps/user_ldap/l10n/id.js
+++ b/apps/user_ldap/l10n/id.js
@@ -148,7 +148,12 @@ OC.L10N.register(
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Secara default, nama pengguna internal akan dibuat dari atribut UUID. Hal ini untuk memastikan bahwa nama pengguna agar unik dan karakter tidak perlu dikonversi. Nama pengguna internal memiliki batasan hanya karakter ini yang diizinkan: [ a-zA-Z0-9_.@- ]. Karakter selain itu akan diganti dengan korespondensi ASCII mereka atau akan dihilangkan. Pada nama yang bentrok, sebuah angka akan ditambahkan dan ditingkatkan. Nama pengguna internal ini digunakan untuk mengenali sebuah nama secara internal. Itu juga dipakai sebagai nama folder home default, serta sebagai bagian dari URL remote untuk semua instansi layanan *DAV. Dengan pengaturan ini, perilaku default dapat diganti. Untuk mewujudkan perilaku seperti sebelum ownCloud 5, masukkan atribut nama tampilan pengguna di bidang isian berikut. Tinggalkan kosong untuk menggunakan perilaku default. Perubahan hanya akan terlihat untuk pengguna LDAP yang baru dipetakan (ditambahkan).",
"Internal Username Attribute:" : "Atribut Nama Pengguna Internal:",
"Override UUID detection" : "Timpa deteksi UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Secara default, atribut UUID akan secara otomatis terdeteksi. Atribut UUID ini digunakan untuk mengidentifikasi pengguna dan grup LDAP yang diragukan. Nama pengguna internal juga akan dibuat berdasarkan UUID jika belum ditetapkan di atas. Anda dapat mengganti pengaturan dan meluluskan atribut pilihan Anda. Anda harus memastikan bahwa atribut pilihan Anda dapat diambil untuk pengguna dan grup, serta haruslah unik. Biarkan kosong untuk perilaku default. Perubahan akan berpengaruh hanya pada pengguna dan grup LDAP yang baru dipetakan (ditambahkan).",
"UUID Attribute for Users:" : "Atribut UUID untuk Pengguna:",
- "UUID Attribute for Groups:" : "Atribut UUID untuk Grup:"
+ "UUID Attribute for Groups:" : "Atribut UUID untuk Grup:",
+ "Username-LDAP User Mapping" : "Pemetaan Pengguna LDAP-Nama pengguna",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nama pengguna digunakan untuk menyimpan dan menetapkan (meta) data. Dalam rangka untuk mengidentifikasi dan mengenali pengguna secara tepat, setiap pengguna LDAP akan memiliki nama pengguna internal. Hal ini memerlukan sebuah pemetaan dari nama pengguna ke pengguna LDAP. Nama pengguna yang dibuat akan dipetakan pada UUID pengguna LDAP. Selain itu, DN akan di cache untuk mengurangi interaksi LDAP, tetapi tidak digunakan untuk identifikasi. Jika DN berubah, perubahan akan ditemukan. Nama pengguna internal digunakan secara menyeluruh. Membersihkan pemetaan akan mempengaruhi semua konfigurasi LDAP! JANGAN PERNAH MENGHAPUS PEMETAAN PADA LINGKUNGAN PRODUKSI, hanya gunakan dalam tahap uji coba dan pengujian.",
+ "Clear Username-LDAP User Mapping" : "Bersihkan Pemetaan Pengguna LDAP-Nama pengguna",
+ "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup"
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json
index a0f8c05c430..fc41e5d2c74 100644
--- a/apps/user_ldap/l10n/id.json
+++ b/apps/user_ldap/l10n/id.json
@@ -146,7 +146,12 @@
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Secara default, nama pengguna internal akan dibuat dari atribut UUID. Hal ini untuk memastikan bahwa nama pengguna agar unik dan karakter tidak perlu dikonversi. Nama pengguna internal memiliki batasan hanya karakter ini yang diizinkan: [ a-zA-Z0-9_.@- ]. Karakter selain itu akan diganti dengan korespondensi ASCII mereka atau akan dihilangkan. Pada nama yang bentrok, sebuah angka akan ditambahkan dan ditingkatkan. Nama pengguna internal ini digunakan untuk mengenali sebuah nama secara internal. Itu juga dipakai sebagai nama folder home default, serta sebagai bagian dari URL remote untuk semua instansi layanan *DAV. Dengan pengaturan ini, perilaku default dapat diganti. Untuk mewujudkan perilaku seperti sebelum ownCloud 5, masukkan atribut nama tampilan pengguna di bidang isian berikut. Tinggalkan kosong untuk menggunakan perilaku default. Perubahan hanya akan terlihat untuk pengguna LDAP yang baru dipetakan (ditambahkan).",
"Internal Username Attribute:" : "Atribut Nama Pengguna Internal:",
"Override UUID detection" : "Timpa deteksi UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Secara default, atribut UUID akan secara otomatis terdeteksi. Atribut UUID ini digunakan untuk mengidentifikasi pengguna dan grup LDAP yang diragukan. Nama pengguna internal juga akan dibuat berdasarkan UUID jika belum ditetapkan di atas. Anda dapat mengganti pengaturan dan meluluskan atribut pilihan Anda. Anda harus memastikan bahwa atribut pilihan Anda dapat diambil untuk pengguna dan grup, serta haruslah unik. Biarkan kosong untuk perilaku default. Perubahan akan berpengaruh hanya pada pengguna dan grup LDAP yang baru dipetakan (ditambahkan).",
"UUID Attribute for Users:" : "Atribut UUID untuk Pengguna:",
- "UUID Attribute for Groups:" : "Atribut UUID untuk Grup:"
+ "UUID Attribute for Groups:" : "Atribut UUID untuk Grup:",
+ "Username-LDAP User Mapping" : "Pemetaan Pengguna LDAP-Nama pengguna",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nama pengguna digunakan untuk menyimpan dan menetapkan (meta) data. Dalam rangka untuk mengidentifikasi dan mengenali pengguna secara tepat, setiap pengguna LDAP akan memiliki nama pengguna internal. Hal ini memerlukan sebuah pemetaan dari nama pengguna ke pengguna LDAP. Nama pengguna yang dibuat akan dipetakan pada UUID pengguna LDAP. Selain itu, DN akan di cache untuk mengurangi interaksi LDAP, tetapi tidak digunakan untuk identifikasi. Jika DN berubah, perubahan akan ditemukan. Nama pengguna internal digunakan secara menyeluruh. Membersihkan pemetaan akan mempengaruhi semua konfigurasi LDAP! JANGAN PERNAH MENGHAPUS PEMETAAN PADA LINGKUNGAN PRODUKSI, hanya gunakan dalam tahap uji coba dan pengujian.",
+ "Clear Username-LDAP User Mapping" : "Bersihkan Pemetaan Pengguna LDAP-Nama pengguna",
+ "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js
index 259f9facbd2..049d7236418 100644
--- a/apps/user_ldap/l10n/ja.js
+++ b/apps/user_ldap/l10n/ja.js
@@ -26,6 +26,7 @@ OC.L10N.register(
"More than 1.000 directory entries available." : "1000 以上のディレクトリエントリが利用可能です。",
"Do you really want to delete the current Server Configuration?" : "現在のサーバー設定を本当に削除してもよろしいですか?",
"Confirm Deletion" : "削除の確認",
+ "Mappings cleared successfully!" : "マッピングのクリアに成功しました!",
"Select attributes" : "属性を選択",
"_%s group found_::_%s groups found_" : ["%s グループが見つかりました"],
"_%s user found_::_%s users found_" : ["%s ユーザーが見つかりました"],
@@ -42,6 +43,7 @@ OC.L10N.register(
"Search groups" : "グループを検索",
"Available groups" : "利用可能なグループ",
"Selected groups" : "選択されたグループ",
+ "Edit LDAP Query" : "LDAPクエリの編集",
"LDAP Filter:" : "LDAP フィルタ:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "フィルターは、どの LDAP グループが %s にアクセスするかを指定します。",
"Verify settings and count groups" : "設定を検証し、グループを数える",
diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json
index 3dceb217eb6..8e44a9fedfb 100644
--- a/apps/user_ldap/l10n/ja.json
+++ b/apps/user_ldap/l10n/ja.json
@@ -24,6 +24,7 @@
"More than 1.000 directory entries available." : "1000 以上のディレクトリエントリが利用可能です。",
"Do you really want to delete the current Server Configuration?" : "現在のサーバー設定を本当に削除してもよろしいですか?",
"Confirm Deletion" : "削除の確認",
+ "Mappings cleared successfully!" : "マッピングのクリアに成功しました!",
"Select attributes" : "属性を選択",
"_%s group found_::_%s groups found_" : ["%s グループが見つかりました"],
"_%s user found_::_%s users found_" : ["%s ユーザーが見つかりました"],
@@ -40,6 +41,7 @@
"Search groups" : "グループを検索",
"Available groups" : "利用可能なグループ",
"Selected groups" : "選択されたグループ",
+ "Edit LDAP Query" : "LDAPクエリの編集",
"LDAP Filter:" : "LDAP フィルタ:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "フィルターは、どの LDAP グループが %s にアクセスするかを指定します。",
"Verify settings and count groups" : "設定を検証し、グループを数える",
diff --git a/apps/user_ldap/l10n/sk_SK.js b/apps/user_ldap/l10n/sk_SK.js
index 612296be0cc..654f0cfee31 100644
--- a/apps/user_ldap/l10n/sk_SK.js
+++ b/apps/user_ldap/l10n/sk_SK.js
@@ -20,14 +20,32 @@ OC.L10N.register(
"Select object classes" : "Vyberte triedy objektov",
"Please check the credentials, they seem to be wrong." : "Overte svoje oprávnenia, nie sú správne nastavené.",
"Please specify the port, it could not be auto-detected." : "Zadajte port, nemožno ho detekovať automaticky.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "Základnú DN nemožno automaticky detekovať, overte prihlasovacie údaje, host a port.",
+ "Could not detect Base DN, please enter it manually." : "Nemožno automaticky detekovať základnú DN, zadajte ručne prosím.",
"{nthServer}. Server" : "{nthServer}. Server",
- "More than 1.000 directory entries available." : "Viac ako 1.000 priečinkov k dispozícii.",
+ "No object found in the given Base DN. Please revise." : "Objekt nebol nájdený v zadanej základnej DN. Overte to prosím.",
+ "More than 1.000 directory entries available." : "K dispozícii je viac ako 1.000 priečinkov.",
+ " entries available within the provided Base DN" : "dostupných záznamov v zadanej základnej DN",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Nastala chyba. Overte základnú DN, nastavenia pripojenia a prihlasovacie údaje.",
"Do you really want to delete the current Server Configuration?" : "Naozaj chcete zmazať súčasné nastavenie servera?",
"Confirm Deletion" : "Potvrdiť vymazanie",
- "Mappings cleared successfully!" : "Mapovanie úspešne odstránené!",
+ "Mappings cleared successfully!" : "Mapovanie bolo úspešne odstránené!",
+ "Error while clearing the mappings." : "Chyba pri čistení mapovania.",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymný bind nie je povolený. Zadajte používateľské DN a heslo.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operácie. Anonymný bind asi nie je povolený.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukladanie zlyhalo. Uistite sa, že databáza pracuje. Znovu načítajte pred pokračovaním.",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Prepnutie režimu povolí automatické LDAP požiadavky. V závislosti na veľkosti vášho LDAP môže vyhľadávanie chvíľu trvať. Naozaj chcete prepnúť režim?",
"Mode switch" : "Prepínač režimov",
"Select attributes" : "Vyberte atribúty",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Používateľ nenájdený. Skontrolujte si svoje prihlasovacie údaje a meno. Použitý filter (pre skopírovanie a overenie v príkazovom riadku): <br/>",
"User found and settings verified." : "Používateľ bol nájdený a nastavenie bolo overené.",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra.",
+ "An unspecified error occurred. Please check the settings and the log." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.",
+ "Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.",
"_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín"],
"_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.",
@@ -60,6 +78,8 @@ OC.L10N.register(
"Verify settings" : "Overiť nastavenia",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Pridať novú prázdnu konfiguráciu",
+ "Copy current configuration into new directory binding" : "Skopírovať súčasnú konfiguráciu do nového adresárového pripojenia",
"Delete the current configuration" : "Vymazať súčasnú konfiguráciu",
"Host" : "Hostiteľ",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Môžete vynechať protokol, okrem prípadu, kedy sa vyžaduje SSL. Vtedy začnite s ldaps://",
@@ -76,6 +96,7 @@ OC.L10N.register(
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Bráni automatickým LDAP požiadavkám. Výhodné pre objemné nastavenia ale vyžaduje si dobrú znalosť o LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ručné vloženie LDAP filtrov (odporúčané pre rozsiahle adresáre)",
"Limit %s access to users meeting these criteria:" : "Obmedziť %s prístup na používateľov spĺňajúcich tieto kritériá:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Najčastejšie triedy objektov pre používateľov sú organizationalPerson, user a inetOrgPerson. Ak si nie ste istí, ktoré triedy máte zvoliť, obráťte sa na správcu LDAP.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Tento filter LDAP určuje, ktorí používatelia majú prístup k %s inštancii.",
"Verify settings and count users" : "Overiť nastavenia a spočítať používateľov",
"Saving" : "Ukladá sa",
diff --git a/apps/user_ldap/l10n/sk_SK.json b/apps/user_ldap/l10n/sk_SK.json
index abc6b5ec248..441ca4fd069 100644
--- a/apps/user_ldap/l10n/sk_SK.json
+++ b/apps/user_ldap/l10n/sk_SK.json
@@ -18,14 +18,32 @@
"Select object classes" : "Vyberte triedy objektov",
"Please check the credentials, they seem to be wrong." : "Overte svoje oprávnenia, nie sú správne nastavené.",
"Please specify the port, it could not be auto-detected." : "Zadajte port, nemožno ho detekovať automaticky.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "Základnú DN nemožno automaticky detekovať, overte prihlasovacie údaje, host a port.",
+ "Could not detect Base DN, please enter it manually." : "Nemožno automaticky detekovať základnú DN, zadajte ručne prosím.",
"{nthServer}. Server" : "{nthServer}. Server",
- "More than 1.000 directory entries available." : "Viac ako 1.000 priečinkov k dispozícii.",
+ "No object found in the given Base DN. Please revise." : "Objekt nebol nájdený v zadanej základnej DN. Overte to prosím.",
+ "More than 1.000 directory entries available." : "K dispozícii je viac ako 1.000 priečinkov.",
+ " entries available within the provided Base DN" : "dostupných záznamov v zadanej základnej DN",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Nastala chyba. Overte základnú DN, nastavenia pripojenia a prihlasovacie údaje.",
"Do you really want to delete the current Server Configuration?" : "Naozaj chcete zmazať súčasné nastavenie servera?",
"Confirm Deletion" : "Potvrdiť vymazanie",
- "Mappings cleared successfully!" : "Mapovanie úspešne odstránené!",
+ "Mappings cleared successfully!" : "Mapovanie bolo úspešne odstránené!",
+ "Error while clearing the mappings." : "Chyba pri čistení mapovania.",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymný bind nie je povolený. Zadajte používateľské DN a heslo.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Chyba LDAP operácie. Anonymný bind asi nie je povolený.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukladanie zlyhalo. Uistite sa, že databáza pracuje. Znovu načítajte pred pokračovaním.",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Prepnutie režimu povolí automatické LDAP požiadavky. V závislosti na veľkosti vášho LDAP môže vyhľadávanie chvíľu trvať. Naozaj chcete prepnúť režim?",
"Mode switch" : "Prepínač režimov",
"Select attributes" : "Vyberte atribúty",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Používateľ nenájdený. Skontrolujte si svoje prihlasovacie údaje a meno. Použitý filter (pre skopírovanie a overenie v príkazovom riadku): <br/>",
"User found and settings verified." : "Používateľ bol nájdený a nastavenie bolo overené.",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra.",
+ "An unspecified error occurred. Please check the settings and the log." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.",
+ "Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.",
"_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín"],
"_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.",
@@ -58,6 +76,8 @@
"Verify settings" : "Overiť nastavenia",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Pridať novú prázdnu konfiguráciu",
+ "Copy current configuration into new directory binding" : "Skopírovať súčasnú konfiguráciu do nového adresárového pripojenia",
"Delete the current configuration" : "Vymazať súčasnú konfiguráciu",
"Host" : "Hostiteľ",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Môžete vynechať protokol, okrem prípadu, kedy sa vyžaduje SSL. Vtedy začnite s ldaps://",
@@ -74,6 +94,7 @@
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Bráni automatickým LDAP požiadavkám. Výhodné pre objemné nastavenia ale vyžaduje si dobrú znalosť o LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ručné vloženie LDAP filtrov (odporúčané pre rozsiahle adresáre)",
"Limit %s access to users meeting these criteria:" : "Obmedziť %s prístup na používateľov spĺňajúcich tieto kritériá:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Najčastejšie triedy objektov pre používateľov sú organizationalPerson, user a inetOrgPerson. Ak si nie ste istí, ktoré triedy máte zvoliť, obráťte sa na správcu LDAP.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Tento filter LDAP určuje, ktorí používatelia majú prístup k %s inštancii.",
"Verify settings and count users" : "Overiť nastavenia a spočítať používateľov",
"Saving" : "Ukladá sa",
diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js
index e01fe04297e..7f6945468f6 100644
--- a/apps/user_ldap/l10n/tr.js
+++ b/apps/user_ldap/l10n/tr.js
@@ -32,6 +32,7 @@ OC.L10N.register(
"Mappings cleared successfully!" : "Eşleştirmeler başarıyla temizlendi!",
"Error while clearing the mappings." : "Eşleşmeler temizlenirken hata.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve Parola sağlayın.",
+ "Mode switch" : "Kip değişimi",
"Select attributes" : "Nitelikleri seç",
"Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin.",
"An unspecified error occurred. Please check the settings and the log." : "Belirtilmeyen bir hata oluştu. Lütfen ayarları ve günlüğü denetleyin.",
@@ -43,17 +44,29 @@ OC.L10N.register(
"Invalid Host" : "Geçersiz Makine",
"Server" : "Sunucu",
"Users" : "Kullanıcılar",
+ "Login Attributes" : "Oturum Açma Öznitelikleri",
"Groups" : "Gruplar",
"Test Configuration" : "Yapılandırmayı Sına",
"Help" : "Yardım",
"Groups meeting these criteria are available in %s:" : "Bu kriterlerle eşleşen gruplar %s içinde mevcut:",
+ "Only these object classes:" : "Sadece bu nesne sınıflarına:",
+ "Only from these groups:" : "Sadece bu gruplardan:",
+ "Search groups" : "Grupları ara",
+ "Available groups" : "Kullanılabilir gruplar",
+ "Selected groups" : "Seçili gruplar",
+ "Edit LDAP Query" : "LDAP Sorgusunu Düzenle",
+ "LDAP Filter:" : "LDAP Filtresi:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtre, %s örneğine erişmesi gereken LDAP gruplarını belirtir.",
+ "Verify settings and count groups" : "Ayarları doğrula ve grupları say",
+ "When logging in, %s will find the user based on the following attributes:" : "Oturum açılırken, %s, aşağıdaki özniteliklere bağlı kullanıcıyı bulacak:",
+ "LDAP / AD Username:" : "LDAP / AD Kullanıcı Adı:",
"Other Attributes:" : "Diğer Nitelikler:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Oturum açma girişimi olduğunda uygulanacak filtreyi tanımlar. %%uid, oturum işleminde kullanıcı adı ile değiştirilir. Örneğin: \"uid=%%uid\"",
"Test Loginname" : "Oturum açma adını sına",
"Verify settings" : "Ayarları doğrula",
"1. Server" : "1. Sunucu",
"%s. Server:" : "%s. Sunucu:",
+ "Add a new and blank configuration" : "Yeni ve boş bir yapılandırma ekle",
"Copy current configuration into new directory binding" : "Geçerli yapılandırmayı yeni dizin bağlamasına kopyala",
"Delete the current configuration" : "Geçerli yapılandırmayı sil",
"Host" : "Sunucu",
diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json
index 5936b41f7f0..47203b48185 100644
--- a/apps/user_ldap/l10n/tr.json
+++ b/apps/user_ldap/l10n/tr.json
@@ -30,6 +30,7 @@
"Mappings cleared successfully!" : "Eşleştirmeler başarıyla temizlendi!",
"Error while clearing the mappings." : "Eşleşmeler temizlenirken hata.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve Parola sağlayın.",
+ "Mode switch" : "Kip değişimi",
"Select attributes" : "Nitelikleri seç",
"Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin.",
"An unspecified error occurred. Please check the settings and the log." : "Belirtilmeyen bir hata oluştu. Lütfen ayarları ve günlüğü denetleyin.",
@@ -41,17 +42,29 @@
"Invalid Host" : "Geçersiz Makine",
"Server" : "Sunucu",
"Users" : "Kullanıcılar",
+ "Login Attributes" : "Oturum Açma Öznitelikleri",
"Groups" : "Gruplar",
"Test Configuration" : "Yapılandırmayı Sına",
"Help" : "Yardım",
"Groups meeting these criteria are available in %s:" : "Bu kriterlerle eşleşen gruplar %s içinde mevcut:",
+ "Only these object classes:" : "Sadece bu nesne sınıflarına:",
+ "Only from these groups:" : "Sadece bu gruplardan:",
+ "Search groups" : "Grupları ara",
+ "Available groups" : "Kullanılabilir gruplar",
+ "Selected groups" : "Seçili gruplar",
+ "Edit LDAP Query" : "LDAP Sorgusunu Düzenle",
+ "LDAP Filter:" : "LDAP Filtresi:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtre, %s örneğine erişmesi gereken LDAP gruplarını belirtir.",
+ "Verify settings and count groups" : "Ayarları doğrula ve grupları say",
+ "When logging in, %s will find the user based on the following attributes:" : "Oturum açılırken, %s, aşağıdaki özniteliklere bağlı kullanıcıyı bulacak:",
+ "LDAP / AD Username:" : "LDAP / AD Kullanıcı Adı:",
"Other Attributes:" : "Diğer Nitelikler:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Oturum açma girişimi olduğunda uygulanacak filtreyi tanımlar. %%uid, oturum işleminde kullanıcı adı ile değiştirilir. Örneğin: \"uid=%%uid\"",
"Test Loginname" : "Oturum açma adını sına",
"Verify settings" : "Ayarları doğrula",
"1. Server" : "1. Sunucu",
"%s. Server:" : "%s. Sunucu:",
+ "Add a new and blank configuration" : "Yeni ve boş bir yapılandırma ekle",
"Copy current configuration into new directory binding" : "Geçerli yapılandırmayı yeni dizin bağlamasına kopyala",
"Delete the current configuration" : "Geçerli yapılandırmayı sil",
"Host" : "Sunucu",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 44237b52393..a2eb834b496 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -643,8 +643,7 @@ class Access extends LDAPUtility implements user\IUserTools {
*/
public function fetchUsersByLoginName($loginName, $attributes = array('dn')) {
$loginName = $this->escapeFilterPart($loginName);
- $filter = \OCP\Util::mb_str_replace(
- '%uid', $loginName, $this->connection->ldapLoginFilter, 'UTF-8');
+ $filter = str_replace('%uid', $loginName, $this->connection->ldapLoginFilter);
$users = $this->fetchListOfUsers($filter, $attributes);
return $users;
}
@@ -1023,7 +1022,7 @@ class Access extends LDAPUtility implements user\IUserTools {
$name = iconv('UTF-8', 'ASCII//TRANSLIT', $name);
// Replacements
- $name = \OCP\Util::mb_str_replace(' ', '_', $name, 'UTF-8');
+ $name = str_replace(' ', '_', $name);
// Every remaining disallowed characters will be removed
$name = preg_replace('/[^a-zA-Z0-9_.@-]/u', '', $name);
diff --git a/apps/user_ldap/lib/user/manager.php b/apps/user_ldap/lib/user/manager.php
index 2f5ee3adfb7..b70e057741f 100644
--- a/apps/user_ldap/lib/user/manager.php
+++ b/apps/user_ldap/lib/user/manager.php
@@ -110,8 +110,8 @@ class Manager {
$user = new User($uid, $dn, $this->access, $this->ocConfig,
$this->ocFilesystem, clone $this->image, $this->ocLog,
$this->avatarManager);
- $users['byDN'][$dn] = $user;
- $users['byUid'][$uid] = $user;
+ $this->users['byDN'][$dn] = $user;
+ $this->users['byUid'][$uid] = $user;
return $user;
}
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index 6ca84c8718f..13ccf805b69 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -630,8 +630,7 @@ class Wizard extends LDAPUtility {
if($this->ldap->errno($cr) !== 0) {
throw new \Exception($this->ldap->error($cr));
}
- $filter = \OCP\Util::mb_str_replace(
- '%uid', $loginName, $this->access->connection->ldapLoginFilter, 'UTF-8');
+ $filter = str_replace('%uid', $loginName, $this->access->connection->ldapLoginFilter);
$this->result->addChange('ldap_test_loginname', count($users));
$this->result->addChange('ldap_test_effective_filter', $filter);
return $this->result;
diff --git a/apps/user_ldap/tests/user/manager.php b/apps/user_ldap/tests/user/manager.php
index e86db6b9f81..d659323fc7f 100644
--- a/apps/user_ldap/tests/user/manager.php
+++ b/apps/user_ldap/tests/user/manager.php
@@ -28,174 +28,182 @@ use OCA\user_ldap\lib\user\Manager;
class Test_User_Manager extends \Test\TestCase {
- private function getTestInstances() {
- $access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
- $config = $this->getMock('\OCP\IConfig');
- $filesys = $this->getMock('\OCA\user_ldap\lib\FilesystemHelper');
- $log = $this->getMock('\OCA\user_ldap\lib\LogWrapper');
- $avaMgr = $this->getMock('\OCP\IAvatarManager');
- $image = $this->getMock('\OCP\Image');
- $dbc = $this->getMock('\OCP\IDBConnection');
+ private function getTestInstances() {
+ $access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
+ $config = $this->getMock('\OCP\IConfig');
+ $filesys = $this->getMock('\OCA\user_ldap\lib\FilesystemHelper');
+ $log = $this->getMock('\OCA\user_ldap\lib\LogWrapper');
+ $avaMgr = $this->getMock('\OCP\IAvatarManager');
+ $image = $this->getMock('\OCP\Image');
+ $dbc = $this->getMock('\OCP\IDBConnection');
- return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc);
- }
+ return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc);
+ }
- public function testGetByDNExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
- $this->getTestInstances();
+ public function testGetByDNExisting() {
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
+ $this->getTestInstances();
- $inputDN = 'cn=foo,dc=foobar,dc=bar';
- $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
+ $inputDN = 'cn=foo,dc=foobar,dc=bar';
+ $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
$access->expects($this->once())
- ->method('stringResemblesDN')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue(true));
+ ->method('stringResemblesDN')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue(true));
- $access->expects($this->once())
- ->method('dn2username')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue($uid));
+ $access->expects($this->once())
+ ->method('dn2username')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue($uid));
+
+ $access->expects($this->never())
+ ->method('username2dn');
- $access->expects($this->never())
- ->method('username2dn');
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
+ $manager->setLdapAccess($access);
+ $user = $manager->get($inputDN);
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
- $manager->setLdapAccess($access);
- $user = $manager->get($inputDN);
+ // Now we fetch the user again. If this leads to a failing test,
+ // runtime caching the manager is broken.
+ $user = $manager->get($inputDN);
- $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
- }
+ $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
+ }
- public function testGetByEDirectoryDN() {
- list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
- $this->getTestInstances();
+ public function testGetByEDirectoryDN() {
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
+ $this->getTestInstances();
- $inputDN = 'uid=foo,o=foobar,c=bar';
- $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
+ $inputDN = 'uid=foo,o=foobar,c=bar';
+ $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
$access->expects($this->once())
- ->method('stringResemblesDN')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue(true));
+ ->method('stringResemblesDN')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue(true));
- $access->expects($this->once())
- ->method('dn2username')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue($uid));
+ $access->expects($this->once())
+ ->method('dn2username')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue($uid));
- $access->expects($this->never())
- ->method('username2dn');
+ $access->expects($this->never())
+ ->method('username2dn');
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
- $manager->setLdapAccess($access);
- $user = $manager->get($inputDN);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
+ $manager->setLdapAccess($access);
+ $user = $manager->get($inputDN);
- $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
- }
+ $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
+ }
- public function testGetByExoticDN() {
- list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
- $this->getTestInstances();
+ public function testGetByExoticDN() {
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
+ $this->getTestInstances();
- $inputDN = 'ab=cde,f=ghei,mno=pq';
- $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
+ $inputDN = 'ab=cde,f=ghei,mno=pq';
+ $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
$access->expects($this->once())
- ->method('stringResemblesDN')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue(true));
+ ->method('stringResemblesDN')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue(true));
- $access->expects($this->once())
- ->method('dn2username')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue($uid));
+ $access->expects($this->once())
+ ->method('dn2username')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue($uid));
- $access->expects($this->never())
- ->method('username2dn');
+ $access->expects($this->never())
+ ->method('username2dn');
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
- $manager->setLdapAccess($access);
- $user = $manager->get($inputDN);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
+ $manager->setLdapAccess($access);
+ $user = $manager->get($inputDN);
- $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
- }
+ $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
+ }
- public function testGetByDNNotExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
- $this->getTestInstances();
+ public function testGetByDNNotExisting() {
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
+ $this->getTestInstances();
- $inputDN = 'cn=gone,dc=foobar,dc=bar';
+ $inputDN = 'cn=gone,dc=foobar,dc=bar';
$access->expects($this->once())
- ->method('stringResemblesDN')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue(true));
+ ->method('stringResemblesDN')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue(true));
- $access->expects($this->once())
- ->method('dn2username')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue(false));
+ $access->expects($this->once())
+ ->method('dn2username')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue(false));
- $access->expects($this->once())
- ->method('username2dn')
- ->with($this->equalTo($inputDN))
- ->will($this->returnValue(false));
+ $access->expects($this->once())
+ ->method('username2dn')
+ ->with($this->equalTo($inputDN))
+ ->will($this->returnValue(false));
+
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
+ $manager->setLdapAccess($access);
+ $user = $manager->get($inputDN);
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
- $manager->setLdapAccess($access);
- $user = $manager->get($inputDN);
+ $this->assertNull($user);
+ }
- $this->assertNull($user);
- }
+ public function testGetByUidExisting() {
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
+ $this->getTestInstances();
- public function testGetByUidExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
- $this->getTestInstances();
+ $dn = 'cn=foo,dc=foobar,dc=bar';
+ $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
- $dn = 'cn=foo,dc=foobar,dc=bar';
- $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
+ $access->expects($this->never())
+ ->method('dn2username');
- $access->expects($this->never())
- ->method('dn2username');
+ $access->expects($this->once())
+ ->method('username2dn')
+ ->with($this->equalTo($uid))
+ ->will($this->returnValue($dn));
- $access->expects($this->once())
- ->method('username2dn')
- ->with($this->equalTo($uid))
- ->will($this->returnValue($dn));
+ $access->expects($this->once())
+ ->method('stringResemblesDN')
+ ->with($this->equalTo($uid))
+ ->will($this->returnValue(false));
- $access->expects($this->once())
- ->method('stringResemblesDN')
- ->with($this->equalTo($uid))
- ->will($this->returnValue(false));
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
+ $manager->setLdapAccess($access);
+ $user = $manager->get($uid);
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
- $manager->setLdapAccess($access);
- $user = $manager->get($uid);
+ // Now we fetch the user again. If this leads to a failing test,
+ // runtime caching the manager is broken.
+ $user = $manager->get($uid);
- $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
- }
+ $this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
+ }
- public function testGetByUidNotExisting() {
- list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
- $this->getTestInstances();
+ public function testGetByUidNotExisting() {
+ list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
+ $this->getTestInstances();
- $dn = 'cn=foo,dc=foobar,dc=bar';
- $uid = 'gone';
+ $dn = 'cn=foo,dc=foobar,dc=bar';
+ $uid = 'gone';
- $access->expects($this->never())
- ->method('dn2username');
+ $access->expects($this->never())
+ ->method('dn2username');
- $access->expects($this->exactly(1))
- ->method('username2dn')
- ->with($this->equalTo($uid))
- ->will($this->returnValue(false));
+ $access->expects($this->exactly(1))
+ ->method('username2dn')
+ ->with($this->equalTo($uid))
+ ->will($this->returnValue(false));
- $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
- $manager->setLdapAccess($access);
- $user = $manager->get($uid);
+ $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
+ $manager->setLdapAccess($access);
+ $user = $manager->get($uid);
- $this->assertNull($user);
- }
+ $this->assertNull($user);
+ }
}
diff --git a/apps/user_ldap/tests/wizard.php b/apps/user_ldap/tests/wizard.php
index f8e14f08bc9..525364390bc 100644
--- a/apps/user_ldap/tests/wizard.php
+++ b/apps/user_ldap/tests/wizard.php
@@ -140,7 +140,7 @@ class Test_Wizard extends \Test\TestCase {
return $uidnumber++;
}));
- # The following expectations are the real test #
+ // The following expectations are the real test
$filters = array('f1', 'f2', '*');
$wizard->cumulativeSearchOnAttribute($filters, 'cn', 5);
unset($uidnumber);
@@ -216,7 +216,7 @@ class Test_Wizard extends \Test\TestCase {
return $uidnumber++;
}));
- # The following expectations are the real test #
+ // The following expectations are the real test
$filters = array('f1', 'f2', '*');
$wizard->cumulativeSearchOnAttribute($filters, 'cn', 0);
unset($uidnumber);
@@ -431,7 +431,7 @@ class Test_Wizard extends \Test\TestCase {
return $b;
}));
- # The following expectations are the real test #
+ // The following expectations are the real test
$filters = array('f1', 'f2', '*');
$resultArray = $wizard->cumulativeSearchOnAttribute($filters, 'cn', 0);
$this->assertSame(6, count($resultArray));