aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/command/scan.php36
-rw-r--r--apps/files/l10n/sl.php4
-rw-r--r--apps/files_encryption/hooks/hooks.php51
-rw-r--r--apps/files_encryption/l10n/es.php1
-rw-r--r--apps/files_encryption/l10n/pl.php1
-rwxr-xr-xapps/files_encryption/lib/helper.php26
-rwxr-xr-xapps/files_encryption/lib/keymanager.php59
-rw-r--r--apps/files_encryption/tests/hooks.php2
-rw-r--r--apps/files_encryption/tests/keymanager.php69
-rw-r--r--apps/files_external/l10n/zh_TW.php19
-rw-r--r--apps/files_sharing/appinfo/app.php10
-rw-r--r--apps/files_sharing/js/external.js46
-rw-r--r--apps/files_sharing/l10n/es.php7
-rw-r--r--apps/files_sharing/l10n/ja.php18
-rw-r--r--apps/files_sharing/l10n/nl.php7
-rw-r--r--apps/files_sharing/l10n/pl.php10
-rw-r--r--apps/files_sharing/lib/cache.php6
-rw-r--r--apps/files_sharing/lib/external/storage.php4
-rw-r--r--apps/files_sharing/lib/helper.php14
-rw-r--r--apps/files_sharing/lib/updater.php62
-rw-r--r--apps/files_sharing/tests/externalstorage.php91
-rw-r--r--apps/files_sharing/tests/permissions.php5
-rw-r--r--apps/files_sharing/tests/sharedstorage.php31
-rw-r--r--apps/files_sharing/tests/updater.php115
-rw-r--r--apps/user_ldap/l10n/pt_BR.php18
-rw-r--r--apps/user_ldap/l10n/sl.php6
-rw-r--r--apps/user_ldap/lib/access.php21
-rw-r--r--apps/user_ldap/lib/connection.php16
-rw-r--r--apps/user_ldap/lib/wizard.php167
-rw-r--r--apps/user_ldap/tests/wizard.php6
-rw-r--r--core/css/share.css2
-rw-r--r--core/js/js.js4
-rw-r--r--core/js/share.js6
-rw-r--r--core/l10n/da.php5
-rw-r--r--core/l10n/es.php4
-rw-r--r--core/l10n/ja.php8
-rw-r--r--core/l10n/nl.php10
-rw-r--r--core/l10n/pl.php8
-rw-r--r--core/l10n/sl.php6
-rw-r--r--core/l10n/zh_TW.php1
-rw-r--r--l10n/da/core.po51
-rw-r--r--l10n/es/core.po48
-rw-r--r--l10n/es/files_encryption.po10
-rw-r--r--l10n/es/files_sharing.po23
-rw-r--r--l10n/ja/core.po14
-rw-r--r--l10n/ja/files_external.po6
-rw-r--r--l10n/ja/files_sharing.po22
-rw-r--r--l10n/ja/settings.po18
-rw-r--r--l10n/nl/core.po60
-rw-r--r--l10n/nl/files_sharing.po14
-rw-r--r--l10n/nl/lib.po4
-rw-r--r--l10n/nl/settings.po8
-rw-r--r--l10n/pl/core.po58
-rw-r--r--l10n/pl/files_encryption.po10
-rw-r--r--l10n/pl/files_sharing.po32
-rw-r--r--l10n/pl/settings.po110
-rw-r--r--l10n/pt_BR/core.po4
-rw-r--r--l10n/pt_BR/files.po64
-rw-r--r--l10n/pt_BR/files_external.po6
-rw-r--r--l10n/pt_BR/files_sharing.po12
-rw-r--r--l10n/pt_BR/lib.po48
-rw-r--r--l10n/pt_BR/user_ldap.po34
-rw-r--r--l10n/pt_BR/user_webdavauth.po4
-rw-r--r--l10n/sl/core.po52
-rw-r--r--l10n/sl/files.po70
-rw-r--r--l10n/sl/settings.po108
-rw-r--r--l10n/sl/user_ldap.po28
-rw-r--r--l10n/templates/core.pot2
-rw-r--r--l10n/templates/files.pot2
-rw-r--r--l10n/templates/files_encryption.pot2
-rw-r--r--l10n/templates/files_external.pot2
-rw-r--r--l10n/templates/files_sharing.pot4
-rw-r--r--l10n/templates/files_trashbin.pot2
-rw-r--r--l10n/templates/files_versions.pot2
-rw-r--r--l10n/templates/lib.pot2
-rw-r--r--l10n/templates/private.pot2
-rw-r--r--l10n/templates/settings.pot6
-rw-r--r--l10n/templates/user_ldap.pot14
-rw-r--r--l10n/templates/user_webdavauth.pot2
-rw-r--r--l10n/zh_TW/core.po40
-rw-r--r--l10n/zh_TW/files_external.po47
-rw-r--r--lib/base.php1
-rw-r--r--lib/private/app.php4
-rw-r--r--lib/private/connector/sabre/objecttree.php5
-rw-r--r--lib/private/files/utils/scanner.php11
-rw-r--r--lib/private/files/view.php2
-rw-r--r--lib/private/share/helper.php22
-rw-r--r--lib/private/share/share.php60
-rw-r--r--settings/l10n/ja.php8
-rw-r--r--settings/l10n/pl.php5
-rw-r--r--settings/l10n/sl.php4
-rw-r--r--tests/lib/connector/sabre/objecttree.php4
-rw-r--r--version.php4
93 files changed, 1348 insertions, 811 deletions
diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index 25ab70af362..3412cf80dea 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -9,6 +9,7 @@
namespace OCA\Files\Command;
+use OC\ForbiddenException;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
@@ -32,28 +33,32 @@ class Scan extends Command {
->setName('files:scan')
->setDescription('rescan filesystem')
->addArgument(
- 'user_id',
- InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
- 'will rescan all files of the given user(s)'
- )
+ 'user_id',
+ InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
+ 'will rescan all files of the given user(s)'
+ )
->addOption(
- 'all',
- null,
- InputOption::VALUE_NONE,
- 'will rescan all files of all known users'
- )
- ;
+ 'all',
+ null,
+ InputOption::VALUE_NONE,
+ 'will rescan all files of all known users'
+ );
}
protected function scanFiles($user, OutputInterface $output) {
$scanner = new \OC\Files\Utils\Scanner($user);
- $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function($path) use ($output) {
+ $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
$output->writeln("Scanning <info>$path</info>");
});
- $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function($path) use ($output) {
+ $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
$output->writeln("Scanning <info>$path</info>");
});
- $scanner->scan('');
+ try {
+ $scanner->scan('');
+ } catch (ForbiddenException $e) {
+ $output->writeln("<error>Home storage for user $user not writable</error>");
+ $output->writeln("Make sure you're running the scan command only as the user the web server runs as");
+ }
}
protected function execute(InputInterface $input, OutputInterface $output) {
@@ -63,6 +68,11 @@ class Scan extends Command {
$users = $input->getArgument('user_id');
}
+ if (count($users) === 0) {
+ $output->writeln("<error>Please specify the user id to scan or \"--all\" to scan for all users</error>");
+ return;
+ }
+
foreach ($users as $user) {
if (is_object($user)) {
$user = $user->getUID();
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index c155e79c211..a0238646b28 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -71,7 +71,7 @@ $TRANSLATIONS = array(
"max. possible: " => "največ mogoče:",
"Save" => "Shrani",
"WebDAV" => "WebDAV",
-"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek rpeko sistema WebDAV</a>.",
+"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek peko sistema WebDAV</a>.",
"New" => "Novo",
"New text file" => "Nova besedilna datoteka",
"Text file" => "Besedilna datoteka",
@@ -85,6 +85,6 @@ $TRANSLATIONS = array(
"Upload too large" => "Prekoračenje omejitve velikosti",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku.",
"Files are being scanned, please wait." => "Poteka preučevanje datotek, počakajte ...",
-"Currently scanning" => "Trenutno preverjam"
+"Currently scanning" => "Poteka preverjanje"
);
$PLURAL_FORMS = "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);";
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index df101acab9d..3625d5a09f3 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -464,61 +464,44 @@ class Hooks {
$newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew;
}
- // add key ext if this is not an folder
+ // create new key folders if it doesn't exists
+ if (!$view->file_exists(dirname($newShareKeyPath))) {
+ $view->mkdir(dirname($newShareKeyPath));
+ }
+ if (!$view->file_exists(dirname($newKeyfilePath))) {
+ $view->mkdir(dirname($newKeyfilePath));
+ }
+
+ // handle share keys
if (!$view->is_dir($oldKeyfilePath)) {
$oldKeyfilePath .= '.key';
$newKeyfilePath .= '.key';
// handle share-keys
- $localKeyPath = $view->getLocalFile($oldShareKeyPath);
- $escapedPath = Helper::escapeGlobPattern($localKeyPath);
- $matches = glob($escapedPath . '*.shareKey');
+ $matches = Helper::findShareKeys($oldShareKeyPath, $view);
foreach ($matches as $src) {
$dst = \OC\Files\Filesystem::normalizePath(str_replace($pathOld, $pathNew, $src));
-
- // create destination folder if not exists
- if (!file_exists(dirname($dst))) {
- mkdir(dirname($dst), 0750, true);
- }
-
- rename($src, $dst);
+ $view->rename($src, $dst);
}
} else {
// handle share-keys folders
-
- // create destination folder if not exists
- if (!$view->file_exists(dirname($newShareKeyPath))) {
- mkdir($view->getLocalFile($newShareKeyPath), 0750, true);
- }
-
$view->rename($oldShareKeyPath, $newShareKeyPath);
}
// Rename keyfile so it isn't orphaned
if ($view->file_exists($oldKeyfilePath)) {
-
- // create destination folder if not exists
- if (!$view->file_exists(dirname($newKeyfilePath))) {
- mkdir(dirname($view->getLocalFile($newKeyfilePath)), 0750, true);
- }
-
$view->rename($oldKeyfilePath, $newKeyfilePath);
}
- // build the path to the file
- $newPath = '/' . $ownerNew . '/files' . $pathNew;
+ // update share keys
+ $sharingEnabled = \OCP\Share::isEnabled();
- if ($util->fixFileSize($newPath)) {
- // get sharing app state
- $sharingEnabled = \OCP\Share::isEnabled();
-
- // get users
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew);
+ // get users
+ $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew);
- // update sharing-keys
- $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew);
- }
+ // update sharing-keys
+ $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew);
\OC_FileProxy::$enabled = $proxyStatus;
}
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php
index f8bed2f720b..2c88589bf9d 100644
--- a/apps/files_encryption/l10n/es.php
+++ b/apps/files_encryption/l10n/es.php
@@ -17,6 +17,7 @@ $TRANSLATIONS = array(
"Following users are not set up for encryption:" => "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." => "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." => "Cifrado inicial en curso... Inténtelo más tarde.",
+"Go directly to your %spersonal settings%s." => "Ir directamente a %sOpciones%s.",
"Encryption" => "Cifrado",
"Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);",
"Recovery key password" => "Contraseña de clave de recuperación",
diff --git a/apps/files_encryption/l10n/pl.php b/apps/files_encryption/l10n/pl.php
index 7063161b20a..e134430d8d3 100644
--- a/apps/files_encryption/l10n/pl.php
+++ b/apps/files_encryption/l10n/pl.php
@@ -17,6 +17,7 @@ $TRANSLATIONS = array(
"Following users are not set up for encryption:" => "Następujący użytkownicy nie mają skonfigurowanego szyfrowania:",
"Initial encryption started... This can take some time. Please wait." => "Rozpoczęto szyfrowanie... To może chwilę potrwać. Proszę czekać.",
"Initial encryption running... Please try again later." => "Trwa szyfrowanie początkowe...Spróbuj ponownie.",
+"Go directly to your %spersonal settings%s." => "Przejdź bezpośrednio do %spersonal settings%s.",
"Encryption" => "Szyfrowanie",
"Enable recovery key (allow to recover users files in case of password loss):" => "Włączhasło klucza odzyskiwania (pozwala odzyskać pliki użytkowników w przypadku utraty hasła):",
"Recovery key password" => "Hasło klucza odzyskiwania",
diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index 2684bf7be33..fed0788028f 100755
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -430,12 +430,28 @@ class Helper {
}
/**
- * glob uses different pattern than regular expressions, escape glob pattern only
- * @param string $path unescaped path
- * @return string path
+ * find all share keys for a given file
+ * @param string $path to the file
+ * @param \OC\Files\View $view view, relative to data/
+ * @return array list of files, path relative to data/
*/
- public static function escapeGlobPattern($path) {
- return preg_replace('/(\*|\?|\[)/', '[$1]', $path);
+ public static function findShareKeys($path, $view) {
+ $result = array();
+ $pathinfo = pathinfo($path);
+ $dirContent = $view->opendir($pathinfo['dirname']);
+
+ if (is_resource($dirContent)) {
+ while (($file = readdir($dirContent)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+ if (preg_match("/" . $pathinfo['filename'] . ".(.*).shareKey/", $file)) {
+ $result[] = $pathinfo['dirname'] . '/' . $file;
+ }
+ }
+ }
+ closedir($dirContent);
+ }
+
+ return $result;
}
/**
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index 98986d1486f..e71fec56854 100755
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -133,20 +133,7 @@ class Keymanager {
$basePath = '/' . $owner . '/files_encryption/keyfiles';
}
- $targetPath = self::keySetPreparation($view, $filename, $basePath, $owner);
-
- if (!$view->is_dir($basePath . '/' . $targetPath)) {
-
- // create all parent folders
- $info = pathinfo($basePath . '/' . $targetPath);
- $keyfileFolderName = $view->getLocalFolder($info['dirname']);
-
- if (!file_exists($keyfileFolderName)) {
-
- mkdir($keyfileFolderName, 0750, true);
-
- }
- }
+ $targetPath = self::keySetPreparation($view, $filename, $basePath);
// try reusing key file if part file
if (Helper::isPartialFilePath($targetPath)) {
@@ -281,8 +268,9 @@ class Keymanager {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- if (!$view->file_exists(''))
+ if (!$view->file_exists('')) {
$view->mkdir('');
+ }
$result = $view->file_put_contents($user . '.private.key', $key);
@@ -340,7 +328,7 @@ class Keymanager {
$basePath = '/' . $owner . '/files_encryption/share-keys';
}
- $shareKeyPath = self::keySetPreparation($view, $filename, $basePath, $owner);
+ $shareKeyPath = self::keySetPreparation($view, $filename, $basePath);
$result = true;
@@ -466,8 +454,7 @@ class Keymanager {
if ($view->is_dir($shareKeyPath)) {
- $localPath = \OC\Files\Filesystem::normalizePath($view->getLocalFolder($shareKeyPath));
- self::recursiveDelShareKeys($localPath, $userIds);
+ self::recursiveDelShareKeys($shareKeyPath, $userIds, $view);
} else {
@@ -491,23 +478,25 @@ class Keymanager {
* @param string $dir directory
* @param array $userIds user ids for which the share keys should be deleted
*/
- private static function recursiveDelShareKeys($dir, $userIds) {
- foreach ($userIds as $userId) {
- $extension = '.' . $userId . '.shareKey';
- $escapedDir = Helper::escapeGlobPattern($dir);
- $escapedExtension = Helper::escapeGlobPattern($extension);
- $matches = glob($escapedDir . '/*' . $escapedExtension);
- }
- /** @var $matches array */
- foreach ($matches as $ma) {
- if (!unlink($ma)) {
- \OCP\Util::writeLog('Encryption library',
- 'Could not delete shareKey; does not exist: "' . $ma . '"', \OCP\Util::ERROR);
+ private static function recursiveDelShareKeys($dir, $userIds, $view) {
+
+ $dirContent = $view->opendir($dir);
+
+ if (is_resource($dirContent)) {
+ while (($file = readdir($dirContent)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+ if ($view->is_dir($dir . '/' . $file)) {
+ self::recursiveDelShareKeys($dir . '/' . $file, $userIds, $view);
+ } else {
+ foreach ($userIds as $userId) {
+ if (preg_match("/(.*)." . $userId . ".shareKey/", $file)) {
+ $view->unlink($dir . '/' . $file);
+ }
+ }
+ }
+ }
}
- }
- $subdirs = glob($escapedDir . '/*', GLOB_ONLYDIR);
- foreach ($subdirs as $subdir) {
- self::recursiveDelShareKeys($subdir, $userIds);
+ closedir($dirContent);
}
}
@@ -516,7 +505,7 @@ class Keymanager {
* @param string|boolean $path
* @param string $basePath
*/
- protected static function keySetPreparation(\OC\Files\View $view, $path, $basePath, $userId) {
+ protected static function keySetPreparation(\OC\Files\View $view, $path, $basePath) {
$targetPath = ltrim($path, '/');
diff --git a/apps/files_encryption/tests/hooks.php b/apps/files_encryption/tests/hooks.php
index 79699a3ef35..5eda8df01b9 100644
--- a/apps/files_encryption/tests/hooks.php
+++ b/apps/files_encryption/tests/hooks.php
@@ -307,7 +307,7 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
$this->assertTrue($this->rootView->is_dir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder));
- // move the file out of the shared folder
+ // move the file to the sub-subfolder
$root = $this->rootView->getRoot();
$this->rootView->chroot('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/');
$this->rootView->rename($this->filename, '/' . $this->folder . '/' . $this->folder . '/' . $this->filename);
diff --git a/apps/files_encryption/tests/keymanager.php b/apps/files_encryption/tests/keymanager.php
index 0c025443cd6..3339f8c73e6 100644
--- a/apps/files_encryption/tests/keymanager.php
+++ b/apps/files_encryption/tests/keymanager.php
@@ -206,55 +206,56 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
*/
function testRecursiveDelShareKeys() {
- // generate filename
- $filename = '/tmp-' . uniqid() . '.txt';
-
// create folder structure
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/subfolder');
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/subfolder/subsubfolder');
-
- // enable encryption proxy
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = true;
-
- // save file with content
- $cryptedFile = file_put_contents('crypt:///'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/subfolder/subsubfolder' . $filename, $this->dataShort);
-
- // test that data was successfully written
- $this->assertTrue(is_int($cryptedFile));
-
- // change encryption proxy to previous state
- \OC_FileProxy::$enabled = $proxyStatus;
-
- // recursive delete keys
- Encryption\Keymanager::delShareKey($this->view, array('admin'), '/folder1/');
-
- // check if share key not exists
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder');
+
+ // create some dummy share keys
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user2.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user3.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/file2.user3.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1.user1.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user2.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user3.shareKey', 'data');
+
+ // recursive delete share keys from user1 and user2
+ Encryption\Keymanager::delShareKey($this->view, array('user1', 'user2'), '/folder1/');
+
+ // check if share keys from user1 and user2 are deleted
+ $this->assertFalse($this->view->file_exists(
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.shareKey'));
+ $this->assertFalse($this->view->file_exists(
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user2.shareKey'));
+ $this->assertFalse($this->view->file_exists(
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1.user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/admin/files_encryption/share-keys/folder1/subfolder/subsubfolder/' . $filename . '.admin.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user2.shareKey'));
- // enable encryption proxy
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = true;
+ // check if share keys from user3 still exists
+ $this->assertTrue($this->view->file_exists(
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user3.shareKey'));
+ $this->assertTrue($this->view->file_exists(
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user3.shareKey'));
+ $this->assertTrue($this->view->file_exists(
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/file2.user3.shareKey'));
// cleanup
- $this->view->deleteAll('/admin/files/folder1');
+ $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys');
- // change encryption proxy to previous state
- \OC_FileProxy::$enabled = $proxyStatus;
}
function testKeySetPreperation() {
$basePath = '/'.Test_Encryption_Keymanager::TEST_USER.'/files';
- $path = '/folder1/subfolder/subsubfolder';
+ $path = '/folder1/subfolder/subsubfolder/file.txt';
$this->assertFalse($this->view->is_dir($basePath . '/testKeySetPreperation'));
$result = TestProtectedKeymanagerMethods::testKeySetPreperation($this->view, $path, $basePath);
// return path without leading slash
- $this->assertSame('folder1/subfolder/subsubfolder', $result);
+ $this->assertSame('folder1/subfolder/subsubfolder/file.txt', $result);
// check if directory structure was created
$this->assertTrue($this->view->is_dir($basePath . '/folder1/subfolder/subsubfolder'));
@@ -283,6 +284,6 @@ class TestProtectedKeymanagerMethods extends \OCA\Encryption\Keymanager {
* @param string $basePath
*/
public static function testKeySetPreperation($view, $path, $basePath) {
- return self::keySetPreparation($view, $path, $basePath, '');
+ return self::keySetPreparation($view, $path, $basePath);
}
}
diff --git a/apps/files_external/l10n/zh_TW.php b/apps/files_external/l10n/zh_TW.php
index 0701b47bcfa..70339801f0c 100644
--- a/apps/files_external/l10n/zh_TW.php
+++ b/apps/files_external/l10n/zh_TW.php
@@ -3,9 +3,18 @@ $TRANSLATIONS = array(
"External storage" => "外部儲存",
"Local" => "本地",
"Location" => "地點",
+"Amazon S3" => "Amazon S3",
+"Key" => "鑰",
+"Secret" => "密",
+"Secret Key" => "密鑰",
+"Hostname (optional)" => "主機名稱 (選填)",
+"Port (optional)" => "埠號 (選填)",
+"Region (optional)" => "區域 (選填)",
+"Enable SSL" => "啟用 SSL",
"Host" => "主機",
"Username" => "使用者名稱:",
"Password" => "密碼",
+"Username (required)" => "使用者名稱 (必填)",
"Share" => "分享",
"URL" => "URL",
"Access granted" => "允許存取",
@@ -14,18 +23,28 @@ $TRANSLATIONS = array(
"Please provide a valid Dropbox app key and secret." => "請提供有效的 Dropbox app key 和 app secret 。",
"Error configuring Google Drive storage" => "設定 Google Drive 儲存時發生錯誤",
"Personal" => "個人",
+"System" => "系統",
"Saved" => "已儲存",
+"<b>Note:</b> " => "<b>警告:</b> ",
+" and " => "與",
+"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。",
+"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。",
+"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。",
+"You don't have any external storages" => "您沒有任何外部儲存",
"Name" => "名稱",
"External Storage" => "外部儲存",
"Folder name" => "資料夾名稱",
"Configuration" => "設定",
"Options" => "選項",
+"Available for" => "可用的",
"Add storage" => "增加儲存區",
+"No user or group" => "沒有使用者或群組",
"All Users" => "所有使用者",
"Groups" => "群組",
"Users" => "使用者",
"Delete" => "刪除",
"Enable User External Storage" => "啓用使用者外部儲存",
+"Allow users to mount the following external storage" => "允許使用者自行掛載以下的外部儲存",
"SSL root certificates" => "SSL 根憑證",
"Import Root Certificate" => "匯入根憑證"
);
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index a4a0a57c675..b55a80ea640 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -14,20 +14,14 @@ OC::$CLASSPATH['OCA\Files\Share\Proxy'] = 'files_sharing/lib/proxy.php';
\OCP\App::registerAdmin('files_sharing', 'settings-admin');
-OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
-OCP\Util::connectHook('OC_Filesystem', 'setup', '\OCA\Files_Sharing\External\Manager', 'setup');
+\OCA\Files_Sharing\Helper::registerHooks();
+
OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file');
OCP\Util::addScript('files_sharing', 'share');
OCP\Util::addScript('files_sharing', 'external');
-\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Shared_Updater', 'writeHook');
-\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Shared_Updater', 'postDeleteHook');
-\OC_Hook::connect('OC_Filesystem', 'delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
-\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
-\OC_Hook::connect('OC_Appconfig', 'post_set_value', '\OCA\Files\Share\Maintainer', 'configChangeHook');
-
OC_FileProxy::register(new OCA\Files\Share\Proxy());
\OCA\Files\App::getNavigationManager()->add(
diff --git a/apps/files_sharing/js/external.js b/apps/files_sharing/js/external.js
index 5c476b2d43d..a142819b112 100644
--- a/apps/files_sharing/js/external.js
+++ b/apps/files_sharing/js/external.js
@@ -8,13 +8,6 @@
*
*/
(function () {
- var getParameterByName = function (query, name) {
- name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
- var regex = new RegExp("[\\#&]" + name + "=([^&#]*)"),
- results = regex.exec(query);
- return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
- };
-
var addExternalShare = function (remote, token, owner, name, password) {
return $.post(OC.generateUrl('apps/files_sharing/external'), {
remote: remote,
@@ -25,7 +18,16 @@
});
};
- var showAddExternalDialog = function (remote, token, owner, name, passwordProtected) {
+ /**
+ * Shows "add external share" dialog.
+ *
+ * @param {String} remote remote server URL
+ * @param {String} owner owner name
+ * @param {String} name name of the shared folder
+ * @param {String} token authentication token
+ * @param {bool} passwordProtected true if the share is password protected
+ */
+ OCA.Sharing.showAddExternalDialog = function (remote, token, owner, name, passwordProtected) {
var remoteClean = (remote.substr(0, 8) === 'https://') ? remote.substr(8) : remote.substr(7);
var callback = function (add, password) {
password = password || '';
@@ -47,25 +49,23 @@
, 'Add Share', callback, true, 'Password', true);
}
};
-
- OCA.Sharing.showAddExternalDialog = function (hash) {
- var remote = getParameterByName(hash, 'remote');
- var owner = getParameterByName(hash, 'owner');
- var name = getParameterByName(hash, 'name');
- var token = getParameterByName(hash, 'token');
- var passwordProtected = parseInt(getParameterByName(hash, 'protected'), 10);
-
- if (remote && token && owner && name) {
- showAddExternalDialog(remote, token, owner, name, passwordProtected);
- }
- };
})();
$(document).ready(function () {
// FIXME: HACK: do not init when running unit tests, need a better way
if (!window.TESTING && OCA.Files) {// only run in the files app
- var hash = location.hash;
- location.hash = '';
- OCA.Sharing.showAddExternalDialog(hash);
+ var params = OC.Util.History.parseUrlQuery();
+ if (params.remote && params.token && params.owner && params.name) {
+ // clear hash, it is unlikely that it contain any extra parameters
+ location.hash = '';
+ params.passwordProtected = parseInt(params.passwordProtected, 10) === 1;
+ OCA.Sharing.showAddExternalDialog(
+ params.remote,
+ params.token,
+ params.owner,
+ params.name,
+ params.passwordProtected
+ );
+ }
}
});
diff --git a/apps/files_sharing/l10n/es.php b/apps/files_sharing/l10n/es.php
index 6e8d055446a..117b97eb942 100644
--- a/apps/files_sharing/l10n/es.php
+++ b/apps/files_sharing/l10n/es.php
@@ -1,11 +1,14 @@
<?php
$TRANSLATIONS = array(
+"Server to server sharing is not enabled on this server" => "Compartir entre servidores no está habilitado en este servidor",
+"Couldn't add remote share" => "No se puede añadir un compartido remoto",
"Shared with you" => "Compartido contigo",
"Shared with others" => "Compartido con otros",
"Shared by link" => "Compartido por medio de enlaces",
"No files have been shared with you yet." => "Aún no han compartido contigo ningún archivo.",
"You haven't shared any files yet." => "Aún no has compartido ningún archivo.",
"You haven't shared any files by link yet." => "Usted todavía no ha compartido ningún archivo por medio de enlaces.",
+"Add {name} from {owner}@{remote}" => "Añadir {name} desde {owner}@{remote}",
"No ownCloud installation found at {remote}" => "No se encontró una instalación de ownCloud en {remote}",
"Invalid ownCloud url" => "URL de ownCloud inválido",
"Shared by {owner}" => "Compartido por {owner}",
@@ -27,6 +30,8 @@ $TRANSLATIONS = array(
"Download" => "Descargar",
"Download %s" => "Descargar %s",
"Direct link" => "Enlace directo",
-"File Sharing" => "Compartir archivos"
+"File Sharing" => "Compartir archivos",
+"Allow other instances to mount public links shared from this server" => "Permitir a otros montar enlaces publicos compartidos de este servidor",
+"Allow users to mount public link shares" => "Permitir a los usuarios montar enlaces publicos compartidos"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/ja.php b/apps/files_sharing/l10n/ja.php
index 43c8f1c06d6..27fa30005a5 100644
--- a/apps/files_sharing/l10n/ja.php
+++ b/apps/files_sharing/l10n/ja.php
@@ -2,12 +2,12 @@
$TRANSLATIONS = array(
"Server to server sharing is not enabled on this server" => "このサーバーでは、サーバー間の共有が有効ではありません",
"Couldn't add remote share" => "リモート共有を追加できませんでした",
-"Shared with you" => "あなたと共有",
-"Shared with others" => "他人と共有",
-"Shared by link" => "URLリンクで共有済",
-"No files have been shared with you yet." => "まだ共有を行なっているファイルはありません。",
-"You haven't shared any files yet." => "まだ共有を行なっているファイルはありません。",
-"You haven't shared any files by link yet." => "まだURLリンクで共有を行なっているファイルはありません。",
+"Shared with you" => "他ユーザーがあなたと共有中",
+"Shared with others" => "他ユーザーと共有中",
+"Shared by link" => "URLリンクで共有中",
+"No files have been shared with you yet." => "他のユーザーがあなたと共有しているファイルはありません。",
+"You haven't shared any files yet." => "他のユーザーと共有しているファイルはありません。",
+"You haven't shared any files by link yet." => "URLリンクで共有しているファイルはありません。",
"Add {name} from {owner}@{remote}" => "{owner}@{remote} から {name} を追加",
"No ownCloud installation found at {remote}" => "{remote} には ownCloud がインストールされていません",
"Invalid ownCloud url" => "無効な ownCloud URL です",
@@ -22,7 +22,7 @@ $TRANSLATIONS = array(
"Reasons might be:" => "理由は以下の通りと考えられます:",
"the item was removed" => "アイテムが削除されました",
"the link expired" => "リンクの期限が切れています",
-"sharing is disabled" => "共有が無効になっています",
+"sharing is disabled" => "共有は無効になっています",
"For more info, please ask the person who sent this link." => "不明な点は、こちらのリンクの提供者に確認をお願いします。",
"Save to ownCloud" => "ownCloud に保存",
"example.com/owncloud" => "example.com/owncloud",
@@ -31,7 +31,7 @@ $TRANSLATIONS = array(
"Download %s" => "%s をダウンロード",
"Direct link" => "リンク",
"File Sharing" => "ファイル共有",
-"Allow other instances to mount public links shared from this server" => "このサーバの公開共有リンクを他のインスタンスからマウントできるようにする",
-"Allow users to mount public link shares" => "ユーザが公開共有リンクをマウントできるようにする"
+"Allow other instances to mount public links shared from this server" => "このサーバにおけるURLでの共有を他のインスタンスからマウントできるようにする",
+"Allow users to mount public link shares" => "ユーザーがURLでの共有をマウントできるようにする"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_sharing/l10n/nl.php b/apps/files_sharing/l10n/nl.php
index de6644cd385..0f229d91945 100644
--- a/apps/files_sharing/l10n/nl.php
+++ b/apps/files_sharing/l10n/nl.php
@@ -1,5 +1,7 @@
<?php
$TRANSLATIONS = array(
+"Server to server sharing is not enabled on this server" => "Server met server delen is niet geactiveerd op deze server",
+"Couldn't add remote share" => "Kon geen externe share toevoegen",
"Shared with you" => "Deelde met u",
"Shared with others" => "Deelde met anderen",
"Shared by link" => "Gedeeld via een link",
@@ -7,6 +9,7 @@ $TRANSLATIONS = array(
"You haven't shared any files yet." => "U hebt nog geen bestanden gedeeld.",
"You haven't shared any files by link yet." => "U hebt nog geen bestanden via een link gedeeld.",
"Add {name} from {owner}@{remote}" => "Toevoegen {name} van {owner}@{remote}",
+"No ownCloud installation found at {remote}" => "Geen ownCloud installatie gevonden op {remote}",
"Invalid ownCloud url" => "Ongeldige ownCloud url",
"Shared by {owner}" => "Gedeeld door {owner}",
"Shared by" => "Gedeeld door",
@@ -27,6 +30,8 @@ $TRANSLATIONS = array(
"Download" => "Downloaden",
"Download %s" => "Download %s",
"Direct link" => "Directe link",
-"File Sharing" => "Bestand delen"
+"File Sharing" => "Bestand delen",
+"Allow other instances to mount public links shared from this server" => "Toestaan dat andere oanClouds openbaar gedeelde links mounten vanaf deze server",
+"Allow users to mount public link shares" => "Toestaan dat gebruikers openbaar gedeelde links mounten"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/pl.php b/apps/files_sharing/l10n/pl.php
index 8b1bcf70399..59c7615ab6b 100644
--- a/apps/files_sharing/l10n/pl.php
+++ b/apps/files_sharing/l10n/pl.php
@@ -1,11 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Couldn't add remote share" => "Nie można dodać zdalnego folderu",
"Shared with you" => "Współdzielony z Tobą",
"Shared with others" => "Współdzielony z innymi",
"Shared by link" => "Współdzielony linkiem",
"No files have been shared with you yet." => "Nie ma jeszcze żadnych plików współdzielonych z Tobą",
"You haven't shared any files yet." => "Nie współdzielisz jeszcze żadnych plików.",
"You haven't shared any files by link yet." => "Nie współdzielisz jeszcze żadnych plików linkiem",
+"Add {name} from {owner}@{remote}" => "Dodaj {name} z {owner}@{remote}",
+"No ownCloud installation found at {remote}" => "Nie znaleziono instalacji ownCloud na {remote}",
+"Invalid ownCloud url" => "Błędny adres URL",
"Shared by {owner}" => "Udostępnione przez {owner}",
"Shared by" => "Udostępniane przez",
"This share is password-protected" => "Udział ten jest chroniony hasłem",
@@ -19,9 +23,13 @@ $TRANSLATIONS = array(
"the link expired" => "link wygasł",
"sharing is disabled" => "Udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." => "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
+"Save to ownCloud" => "Zapis do ownCloud",
+"example.com/owncloud" => "mojastrona.pl/owncloud",
"Save" => "Zapisz",
"Download" => "Pobierz",
"Download %s" => "Pobierz %s",
-"Direct link" => "Bezpośredni link"
+"Direct link" => "Bezpośredni link",
+"File Sharing" => "Udostępnione pliki",
+"Allow users to mount public link shares" => "Zezwalaj użytkownikom na montowanie publicznych linków"
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 7a6b70d82b5..6bc9e131949 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -95,9 +95,9 @@ class Shared_Cache extends Cache {
}
$data['uid_owner'] = $this->storage->getOwner($file);
if (isset($data['permissions'])) {
- $data['permissions'] &= $this->storage->getPermissions('');
+ $data['permissions'] &= $this->storage->getPermissions($file);
} else {
- $data['permissions'] = $this->storage->getPermissions('');
+ $data['permissions'] = $this->storage->getPermissions($file);
}
return $data;
}
@@ -163,7 +163,7 @@ class Shared_Cache extends Cache {
$sourceFolderContent[$key]['path'] = $dir . $c['name'];
$sourceFolderContent[$key]['uid_owner'] = $parent['uid_owner'];
$sourceFolderContent[$key]['displayname_owner'] = $parent['uid_owner'];
- $sourceFolderContent[$key]['permissions'] = $sourceFolderContent[$key]['permissions'] & $this->storage->getPermissions('');
+ $sourceFolderContent[$key]['permissions'] = $sourceFolderContent[$key]['permissions'] & $this->storage->getPermissions($dir . $c['name']);
}
return $sourceFolderContent;
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index cd04841bb09..2771f974614 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -37,9 +37,9 @@ class Storage extends DAV implements ISharedStorage {
$this->remote = $options['remote'];
$this->remoteUser = $options['owner'];
list($protocol, $remote) = explode('://', $this->remote);
- list($host, $root) = explode('/', $remote);
+ list($host, $root) = explode('/', $remote, 2);
$secure = $protocol === 'https';
- $root .= '/public.php/webdav';
+ $root = rtrim($root, '/') . '/public.php/webdav';
$this->mountPoint = $options['mountpoint'];
$this->token = $options['token'];
parent::__construct(array(
diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php
index 34de3a915ab..0b3433576f6 100644
--- a/apps/files_sharing/lib/helper.php
+++ b/apps/files_sharing/lib/helper.php
@@ -7,6 +7,20 @@ use PasswordHash;
class Helper {
+ public static function registerHooks() {
+ \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
+ \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OCA\Files_Sharing\External\Manager', 'setup');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_write', '\OC\Files\Cache\Shared_Updater', 'writeHook');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Shared_Updater', 'postDeleteHook');
+ \OCP\Util::connectHook('OC_Filesystem', 'delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
+ \OCP\Util::connectHook('OC_Appconfig', 'post_set_value', '\OCA\Files\Share\Maintainer', 'configChangeHook');
+
+ \OCP\Util::connectHook('OCP\Share', 'post_shared', '\OC\Files\Cache\Shared_Updater', 'postShareHook');
+ \OCP\Util::connectHook('OCP\Share', 'post_unshare', '\OC\Files\Cache\Shared_Updater', 'postUnshareHook');
+ \OCP\Util::connectHook('OCP\Share', 'post_unshareFromSelf', '\OC\Files\Cache\Shared_Updater', 'postUnshareFromSelfHook');
+ }
+
/**
* Sets up the filesystem and user for public sharing
* @param string $token string share token
diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
index 5cb2b638e5a..e114c3ba0ac 100644
--- a/apps/files_sharing/lib/updater.php
+++ b/apps/files_sharing/lib/updater.php
@@ -133,6 +133,68 @@ class Shared_Updater {
}
/**
+ * update etags if a file was shared
+ * @param array $params
+ */
+ static public function postShareHook($params) {
+
+ if ($params['itemType'] === 'folder' || $params['itemType'] === 'file') {
+
+ $shareWith = $params['shareWith'];
+ $shareType = $params['shareType'];
+
+ if ($shareType === \OCP\Share::SHARE_TYPE_USER) {
+ self::correctUsersFolder($shareWith, '/');
+ } elseif ($shareType === \OCP\Share::SHARE_TYPE_GROUP) {
+ foreach (\OC_Group::usersInGroup($shareWith) as $user) {
+ self::correctUsersFolder($user, '/');
+ }
+ }
+ }
+ }
+
+ /**
+ * update etags if a file was unshared
+ *
+ * @param array $params
+ */
+ static public function postUnshareHook($params) {
+
+ if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {
+
+ $deletedShares = isset($params['deletedShares']) ? $params['deletedShares'] : array();
+
+ foreach ($deletedShares as $share) {
+ if ($share['shareType'] === \OCP\Share::SHARE_TYPE_GROUP) {
+ foreach (\OC_Group::usersInGroup($share['shareWith']) as $user) {
+ self::correctUsersFolder($user, dirname($share['fileTarget']));
+ }
+ } else {
+ self::correctUsersFolder($share['shareWith'], dirname($share['fileTarget']));
+ }
+ }
+ }
+ }
+
+ /**
+ * update etags if file was unshared from self
+ * @param array $params
+ */
+ static public function postUnshareFromSelfHook($params) {
+ if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {
+ foreach ($params['unsharedItems'] as $item) {
+ if ($item['shareType'] === \OCP\Share::SHARE_TYPE_GROUP) {
+ foreach (\OC_Group::usersInGroup($item['shareWith']) as $user) {
+ self::correctUsersFolder($user, dirname($item['fileTarget']));
+ }
+ } else {
+ self::correctUsersFolder($item['shareWith'], dirname($item['fileTarget']));
+ }
+ }
+ }
+ }
+
+ /**
* clean up oc_share table from files which are no longer exists
*
* This fixes issues from updates from files_sharing < 0.3.5.6 (ownCloud 4.5)
diff --git a/apps/files_sharing/tests/externalstorage.php b/apps/files_sharing/tests/externalstorage.php
new file mode 100644
index 00000000000..b7797333c10
--- /dev/null
+++ b/apps/files_sharing/tests/externalstorage.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2014 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+require_once __DIR__ . '/base.php';
+
+require_once __DIR__ . '/../../files_external/lib/webdav.php';
+
+/**
+ * Tests for the external Storage class for remote shares.
+ */
+class Test_Files_Sharing_External_Storage extends \PHPUnit_Framework_TestCase {
+
+ function optionsProvider() {
+ return array(
+ array(
+ 'http://remoteserver:8080/owncloud',
+ 'http://remoteserver:8080/owncloud/public.php/webdav/',
+ ),
+ // extra slash
+ array(
+ 'http://remoteserver:8080/owncloud/',
+ 'http://remoteserver:8080/owncloud/public.php/webdav/',
+ ),
+ // extra path
+ array(
+ 'http://remoteserver:8080/myservices/owncloud/',
+ 'http://remoteserver:8080/myservices/owncloud/public.php/webdav/',
+ ),
+ // root path
+ array(
+ 'http://remoteserver:8080/',
+ 'http://remoteserver:8080/public.php/webdav/',
+ ),
+ // without port
+ array(
+ 'http://remoteserver/oc.test',
+ 'http://remoteserver/oc.test/public.php/webdav/',
+ ),
+ // https
+ array(
+ 'https://remoteserver/',
+ 'https://remoteserver/public.php/webdav/',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider optionsProvider
+ */
+ public function testStorageMountOptions($inputUri, $baseUri) {
+ $storage = new TestSharingExternalStorage(
+ array(
+ 'remote' => $inputUri,
+ 'owner' => 'testOwner',
+ 'mountpoint' => 'remoteshare',
+ 'token' => 'abcdef',
+ 'password' => '',
+ )
+ );
+ $this->assertEquals($baseUri, $storage->getBaseUri());
+ }
+}
+
+/**
+ * Dummy subclass to make it possible to access private members
+ */
+class TestSharingExternalStorage extends \OCA\Files_Sharing\External\Storage {
+
+ public function getBaseUri() {
+ return $this->createBaseUri();
+ }
+}
diff --git a/apps/files_sharing/tests/permissions.php b/apps/files_sharing/tests/permissions.php
index 2cbc412d261..299e471a3fd 100644
--- a/apps/files_sharing/tests/permissions.php
+++ b/apps/files_sharing/tests/permissions.php
@@ -145,10 +145,9 @@ class Test_Files_Sharing_Permissions extends Test_Files_Sharing_Base {
$this->assertEquals(27, $contents[1]['permissions']);
$contents = $this->secondView->getDirectoryContent('files/shareddirrestricted');
$this->assertEquals('subdir', $contents[0]['name']);
- $this->assertEquals(7 | \OCP\PERMISSION_DELETE, $contents[0]['permissions']);
+ $this->assertEquals(7, $contents[0]['permissions']);
$this->assertEquals('textfile1.txt', $contents[1]['name']);
// 3 is correct because create is reserved to folders only
- // delete permissions are added since mount points can always be deleted
- $this->assertEquals(3 | \OCP\PERMISSION_DELETE, $contents[1]['permissions']);
+ $this->assertEquals(3, $contents[1]['permissions']);
}
}
diff --git a/apps/files_sharing/tests/sharedstorage.php b/apps/files_sharing/tests/sharedstorage.php
index b80ab6b4f14..27f3b5150d5 100644
--- a/apps/files_sharing/tests/sharedstorage.php
+++ b/apps/files_sharing/tests/sharedstorage.php
@@ -166,4 +166,35 @@ class Test_Files_Sharing_Storage extends Test_Files_Sharing_Base {
$this->assertTrue($result);
}
+ function testGetPermissions() {
+ $fileinfoFolder = $this->view->getFileInfo($this->folder);
+
+ $result = \OCP\Share::shareItem('folder', $fileinfoFolder['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER2, 1);
+ $this->assertTrue($result);
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $this->assertTrue(\OC\Files\Filesystem::is_dir($this->folder));
+
+ // for the share root we expect:
+ // the shared permissions (1)
+ // the delete permission (8), to enable unshare
+ // the update permission (2), to allow renaming of the mount point
+ $rootInfo = \OC\Files\Filesystem::getFileInfo($this->folder);
+ $this->assertSame(11, $rootInfo->getPermissions());
+
+ // for the file within the shared folder we expect:
+ // the shared permissions (1)
+ $subfileInfo = \OC\Files\Filesystem::getFileInfo($this->folder . $this->filename);
+ $this->assertSame(1, $subfileInfo->getPermissions());
+
+
+ //cleanup
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $result = \OCP\Share::unshare('folder', $fileinfoFolder['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER2);
+ $this->assertTrue($result);
+ }
+
}
diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php
index 8183e7067a4..cdb44068254 100644
--- a/apps/files_sharing/tests/updater.php
+++ b/apps/files_sharing/tests/updater.php
@@ -28,14 +28,19 @@ require_once __DIR__ . '/base.php';
*/
class Test_Files_Sharing_Updater extends Test_Files_Sharing_Base {
- const TEST_FOLDER_NAME = '/folder_share_api_test';
+ const TEST_FOLDER_NAME = '/folder_share_updater_test';
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+ \OCA\Files_Sharing\Helper::registerHooks();
+ }
function setUp() {
parent::setUp();
$this->folder = self::TEST_FOLDER_NAME;
- $this->filename = '/share-api-test.txt';
+ $this->filename = '/share-updater-test.txt';
// save file with content
$this->view->file_put_contents($this->filename, $this->data);
@@ -104,6 +109,112 @@ class Test_Files_Sharing_Updater extends Test_Files_Sharing_Base {
if ($status === false) {
\OC_App::disable('files_trashbin');
}
+ // cleanup
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $result = \OCP\Share::unshare('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2);
+ $this->assertTrue($result);
+ }
+
+ /**
+ * if a file gets shared the etag for the recipients root should change
+ */
+ function testShareFile() {
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $beforeShare = \OC\Files\Filesystem::getFileInfo('');
+ $etagBeforeShare = $beforeShare->getEtag();
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $fileinfo = \OC\Files\Filesystem::getFileInfo($this->folder);
+ $result = \OCP\Share::shareItem('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
+ $this->assertTrue($result);
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $afterShare = \OC\Files\Filesystem::getFileInfo('');
+ $etagAfterShare = $afterShare->getEtag();
+
+ $this->assertTrue(is_string($etagBeforeShare));
+ $this->assertTrue(is_string($etagAfterShare));
+ $this->assertTrue($etagBeforeShare !== $etagAfterShare);
+
+ // cleanup
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $result = \OCP\Share::unshare('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2);
+ $this->assertTrue($result);
+ }
+
+ /**
+ * if a file gets unshared by the owner the etag for the recipients root should change
+ */
+ function testUnshareFile() {
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $fileinfo = \OC\Files\Filesystem::getFileInfo($this->folder);
+ $result = \OCP\Share::shareItem('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
+ $this->assertTrue($result);
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $beforeUnshare = \OC\Files\Filesystem::getFileInfo('');
+ $etagBeforeUnshare = $beforeUnshare->getEtag();
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $result = \OCP\Share::unshare('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2);
+ $this->assertTrue($result);
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $afterUnshare = \OC\Files\Filesystem::getFileInfo('');
+ $etagAfterUnshare = $afterUnshare->getEtag();
+
+ $this->assertTrue(is_string($etagBeforeUnshare));
+ $this->assertTrue(is_string($etagAfterUnshare));
+ $this->assertTrue($etagBeforeUnshare !== $etagAfterUnshare);
+
+ }
+
+ /**
+ * if a file gets unshared from self the etag for the recipients root should change
+ */
+ function testUnshareFromSelfFile() {
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $fileinfo = \OC\Files\Filesystem::getFileInfo($this->folder);
+ $result = \OCP\Share::shareItem('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
+ $this->assertTrue($result);
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $result = \OCP\Share::shareItem('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER3, 31);
+
+ $beforeUnshareUser2 = \OC\Files\Filesystem::getFileInfo('');
+ $etagBeforeUnshareUser2 = $beforeUnshareUser2->getEtag();
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER3);
+
+ $beforeUnshareUser3 = \OC\Files\Filesystem::getFileInfo('');
+ $etagBeforeUnshareUser3 = $beforeUnshareUser3->getEtag();
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $result = \OC\Files\Filesystem::unlink($this->folder);
+ $this->assertTrue($result);
+
+ $afterUnshareUser2 = \OC\Files\Filesystem::getFileInfo('');
+ $etagAfterUnshareUser2 = $afterUnshareUser2->getEtag();
+
+ $this->loginHelper(self::TEST_FILES_SHARING_API_USER3);
+
+ $afterUnshareUser3 = \OC\Files\Filesystem::getFileInfo('');
+ $etagAfterUnshareUser3 = $afterUnshareUser3->getEtag();
+
+ $this->assertTrue(is_string($etagBeforeUnshareUser2));
+ $this->assertTrue(is_string($etagBeforeUnshareUser3));
+ $this->assertTrue(is_string($etagAfterUnshareUser2));
+ $this->assertTrue(is_string($etagAfterUnshareUser3));
+ $this->assertTrue($etagBeforeUnshareUser2 !== $etagAfterUnshareUser2);
+ $this->assertTrue($etagBeforeUnshareUser3 !== $etagAfterUnshareUser3);
+
}
}
diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php
index ab2cb67c596..6e5a1663e2d 100644
--- a/apps/user_ldap/l10n/pt_BR.php
+++ b/apps/user_ldap/l10n/pt_BR.php
@@ -11,7 +11,7 @@ $TRANSLATIONS = array(
" Could not set configuration %s" => "Não foi possível definir a configuração %s",
"Deletion failed" => "Remoção falhou",
"Take over settings from recent server configuration?" => "Tomar parámetros de recente configuração de servidor?",
-"Keep settings?" => "Manter ajustes?",
+"Keep settings?" => "Manter configurações?",
"{nthServer}. Server" => "Servidor {nthServer}.",
"Cannot add server configuration" => "Impossível adicionar a configuração do servidor",
"mappings cleared" => "mapeamentos limpos",
@@ -32,18 +32,18 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Confirmar Exclusão",
"_%s group found_::_%s groups found_" => array("grupo% s encontrado","grupos% s encontrado"),
"_%s user found_::_%s users found_" => array("usuário %s encontrado","usuários %s encontrados"),
-"Invalid Host" => "Host inválido",
"Could not find the desired feature" => "Não foi possível encontrar a função desejada",
+"Invalid Host" => "Host Inválido",
"Server" => "Servidor",
"User Filter" => "Filtro de Usuário",
"Login Filter" => "Filtro de Login",
"Group Filter" => "Filtro de Grupo",
-"Save" => "Guardar",
+"Save" => "Salvar",
"Test Configuration" => "Teste de Configuração",
"Help" => "Ajuda",
"Groups meeting these criteria are available in %s:" => "Grupos que satisfazem estes critérios estão disponíveis em %s:",
"only those object classes:" => "apenas essas classes de objetos:",
-"only from those groups:" => "apenas a partir dos grupos:",
+"only from those groups:" => "apenas desses grupos:",
"Edit raw filter instead" => "Editar filtro raw ao invéz",
"Raw LDAP filter" => "Filtro LDAP Raw",
"The filter specifies which LDAP groups shall have access to the %s instance." => "O filtro especifica quais grupos LDAP devem ter acesso à instância do %s.",
@@ -51,13 +51,13 @@ $TRANSLATIONS = array(
"Users login with this attribute:" => "Usuários entrar com este atributo:",
"LDAP Username:" => "Usuário LDAP:",
"LDAP Email Address:" => "LDAP Endereço de E-mail:",
-"Other Attributes:" => "Outros atributos:",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Define o filtro a ser aplicado, o login é feito. %%uid substitui o nome do usuário na ação de login. Exemplo: \"uid=%%uid\"",
+"Other Attributes:" => "Outros Atributos:",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Define o filtro a ser aplicado, quando o login for feito. %%uid substitui o nome do usuário na ação de login. Exemplo: \"uid=%%uid\"",
"1. Server" => "1. Servidor",
"%s. Server:" => "%s. Servidor:",
"Add Server Configuration" => "Adicionar Configuração de Servidor",
"Delete Configuration" => "Excluir Configuração",
-"Host" => "Servidor",
+"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Você pode omitir o protocolo, exceto quando requerer SSL. Então inicie com ldaps://",
"Port" => "Porta",
"User DN" => "DN Usuário",
@@ -76,9 +76,9 @@ $TRANSLATIONS = array(
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Aviso:</b> Os aplicativos user_ldap e user_webdavauth são incompatíveis. Você pode experimentar comportamento inesperado. Por favor, peça ao seu administrador do sistema para desabilitar um deles.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Aviso:</b> O módulo PHP LDAP não está instalado, o backend não funcionará. Por favor, peça ao seu administrador do sistema para instalá-lo.",
"Connection Settings" => "Configurações de Conexão",
-"Configuration Active" => "Configuração ativa",
+"Configuration Active" => "Configuração Ativa",
"When unchecked, this configuration will be skipped." => "Quando não marcada, esta configuração será ignorada.",
-"Backup (Replica) Host" => "Servidor de Backup (Réplica)",
+"Backup (Replica) Host" => "Host de Backup (Réplica)",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Defina um servidor de backup opcional. Ele deverá ser uma réplica do servidor LDAP/AD principal.",
"Backup (Replica) Port" => "Porta do Backup (Réplica)",
"Disable Main Server" => "Desativar Servidor Principal",
diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php
index d0b6ab8fb0d..60aebba7dcc 100644
--- a/apps/user_ldap/l10n/sl.php
+++ b/apps/user_ldap/l10n/sl.php
@@ -28,8 +28,11 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Potrdi brisanje",
"_%s group found_::_%s groups found_" => array("%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"),
"_%s user found_::_%s users found_" => array("%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"),
-"Invalid Host" => "Neveljaven gostitelj",
"Could not find the desired feature" => "Želene zmožnosti ni mogoče najti",
+"Invalid Host" => "Neveljaven gostitelj",
+"Server" => "Strežnik",
+"User Filter" => "Uporabniški filter",
+"Login Filter" => "Filter prijave",
"Group Filter" => "Filter skupin",
"Save" => "Shrani",
"Test Configuration" => "Preizkusne nastavitve",
@@ -45,6 +48,7 @@ $TRANSLATIONS = array(
"Other Attributes:" => "Drugi atributi:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Določi filter, ki bo uveljavljen ob poskusu prijave. %%uid zamenja uporabniško ime pri prijavi, na primer: \"uid=%%uid\"",
"Add Server Configuration" => "Dodaj nastavitve strežnika",
+"Delete Configuration" => "Izbriši nastavitve",
"Host" => "Gostitelj",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokol je lahko izpuščen, če ni posebej zahtevan SSL. V tem primeru se mora naslov začeti z ldaps://",
"Port" => "Vrata",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index d289627bead..ca5d1386995 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -724,10 +724,18 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
- * prepares and executes an LDAP search operation
- * @param string $filter the LDAP filter for the search
- * @param array $base an array containing the LDAP subtree(s) that shall be searched
- * @param string|string[] $attr optional, array, one or more attributes that shall be
+ * returns the number of available groups
+ * @param string $filter the LDAP search filter
+ * @param string[] $attr optional
+ * @param int|null $limit
+ * @param int|null $offset
+ * @return int|bool
+ */
+ public function countGroups($filter, $attr = array('dn'), $limit = null, $offset = null) {
+ return $this->count($filter, $this->connection->ldapBaseGroups, $attr, $limit, $offset);
+ }
+
+ /**
* retrieved. Results will according to the order in the array.
* @param int $limit optional, maximum results to be counted
* @param int $offset optional, a starting point
@@ -827,7 +835,7 @@ class Access extends LDAPUtility implements user\IUserTools {
\OCP\Util::writeLog('user_ldap', 'Count filter: '.print_r($filter, true), \OCP\Util::DEBUG);
if(is_null($limit)) {
- $limit = $this->connection->ldapPagingSize;
+ $limit = intval($this->connection->ldapPagingSize);
}
$counter = 0;
@@ -1026,9 +1034,10 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
- * combines the input filters with AND
+ * combines the input filters with OR
* @param string[] $filters the filters to connect
* @return string the combined filter
+ * Combines Filter arguments with OR
*/
public function combineFilterWithOr($filters) {
return $this->combineFilter($filters, '|');
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index 52f6c5ceb10..bafb0e0b895 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -41,11 +41,13 @@ class Connection extends LDAPUtility {
protected $doNotValidate = false;
+ protected $ignoreValidation = false;
+
/**
* Constructor
* @param ILDAPWrapper $ldap
* @param string $configPrefix a string with the prefix for the configkey column (appconfig table)
- * @param string $configID a string with the value for the appid column (appconfig table) or null for on-the-fly connections
+ * @param string|null $configID a string with the value for the appid column (appconfig table) or null for on-the-fly connections
*/
public function __construct(ILDAPWrapper $ldap, $configPrefix = '', $configID = 'user_ldap') {
parent::__construct($ldap);
@@ -117,6 +119,16 @@ class Connection extends LDAPUtility {
}
/**
+ * sets whether the result of the configuration validation shall
+ * be ignored when establishing the connection. Used by the Wizard
+ * in early configuration state.
+ * @param bool $state
+ */
+ public function setIgnoreValidation($state) {
+ $this->ignoreValidation = (bool)$state;
+ }
+
+ /**
* initializes the LDAP backend
* @param bool $force read the config settings no matter what
*/
@@ -466,7 +478,7 @@ class Connection extends LDAPUtility {
if(!$phpLDAPinstalled) {
return false;
}
- if(!$this->configured) {
+ if(!$this->ignoreValidation && !$this->configured) {
\OCP\Util::writeLog('user_ldap',
'Configuration is invalid, cannot connect',
\OCP\Util::WARN);
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index b8a0e5ad799..42d612fa736 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -64,39 +64,53 @@ class Wizard extends LDAPUtility {
}
/**
- * @return WizardResult
- * @throws \Exception
+ * counts entries in the LDAP directory
+ * @param string $filter the LDAP search filter
+ * @param string $type a string being either 'users' or 'groups';
+ * @return int|bool
*/
- public function countGroups() {
- if(!$this->checkRequirements(array('ldapHost',
- 'ldapPort',
- 'ldapBase',
- ))) {
- return false;
+ public function countEntries($filter, $type) {
+ $reqs = array('ldapHost', 'ldapPort', 'ldapBase');
+ if($type === 'users') {
+ $reqs[] = 'ldapUserFilter';
+ }
+ if(!$this->checkRequirements($reqs)) {
+ throw new \Exception('Requirements not met', 400);
}
- $base = $this->configuration->ldapBase[0];
+ $ldapAccess = $this->getAccess();
+ if($type === 'groups') {
+ $result = $ldapAccess->countGroups($filter);
+ } else if($type === 'users') {
+ $result = $ldapAccess->countUsers($filter);
+ } else {
+ throw new \Exception('internal error: invald object type', 500);
+ }
+
+ return $result;
+ }
+
+ public function countGroups() {
$filter = $this->configuration->ldapGroupFilter;
- \OCP\Util::writeLog('user_ldap', 'Wiz: g filter '. print_r($filter, true), \OCP\Util::DEBUG);
- $l = \OC_L10N::get('user_ldap');
+
if(empty($filter)) {
- $output = $l->n('%s group found', '%s groups found', 0, array(0));
+ $output = self::$l->n('%s group found', '%s groups found', 0, array(0));
$this->result->addChange('ldap_group_count', $output);
return $this->result;
}
- $cr = $this->getConnection();
- if(!$cr) {
- throw new \Exception('Could not connect to LDAP');
- }
- $rr = $this->ldap->search($cr, $base, $filter, array('dn'));
- if(!$this->ldap->isResource($rr)) {
+
+ try {
+ $groupsTotal = $this->countEntries($filter, 'groups');
+ } catch (\Exception $e) {
+ //400 can be ignored, 500 is forwarded
+ if($e->getCode() === 500) {
+ throw $e;
+ }
return false;
}
- $entries = $this->ldap->countEntries($cr, $rr);
- $entries = ($entries !== false) ? $entries : 0;
- $output = $l->n('%s group found', '%s groups found', $entries, $entries);
+ $groupsTotal = ($groupsTotal !== false) ? $groupsTotal : 0;
+ $output = self::$l->n('%s group found', '%s groups found', $groupsTotal, $groupsTotal);
$this->result->addChange('ldap_group_count', $output);
-
return $this->result;
}
@@ -105,31 +119,12 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function countUsers() {
- if(!$this->checkRequirements(array('ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapUserFilter',
- ))) {
- return false;
- }
-
- $cr = $this->getConnection();
- if(!$cr) {
- throw new \Exception('Could not connect to LDAP');
- }
-
- $base = $this->configuration->ldapBase[0];
$filter = $this->configuration->ldapUserFilter;
- $rr = $this->ldap->search($cr, $base, $filter, array('dn'));
- if(!$this->ldap->isResource($rr)) {
- return false;
- }
- $entries = $this->ldap->countEntries($cr, $rr);
- $entries = ($entries !== false) ? $entries : 0;
- $l = \OC_L10N::get('user_ldap');
- $output = $l->n('%s user found', '%s users found', $entries, $entries);
- $this->result->addChange('ldap_user_count', $output);
+ $usersTotal = $this->countEntries($filter, 'users');
+ $usersTotal = ($usersTotal !== false) ? $usersTotal : 0;
+ $output = self::$l->n('%s user found', '%s users found', $usersTotal, $usersTotal);
+ $this->result->addChange('ldap_user_count', $output);
return $this->result;
}
@@ -273,8 +268,7 @@ class Wizard extends LDAPUtility {
throw new \Exception('Could not connect to LDAP');
}
- $obClasses = array('posixGroup', 'group', 'zimbraDistributionList', '*');
- $this->determineFeature($obClasses, 'cn', $dbKey, $confKey);
+ $this->fetchGroups($dbKey, $confKey);
if($testMemberOf) {
$this->configuration->hasMemberOfFilterSupport = $this->testMemberOf();
@@ -288,9 +282,48 @@ class Wizard extends LDAPUtility {
}
/**
- * @return bool|WizardResult
- * @throws \Exception
+ * fetches all groups from LDAP
+ * @param string $dbKey
+ * @param string $confKey
*/
+ public function fetchGroups($dbKey, $confKey) {
+ $obclasses = array('posixGroup', 'group', 'zimbraDistributionList', 'groupOfNames');
+ $ldapAccess = $this->getAccess();
+
+ $filterParts = array();
+ foreach($obclasses as $obclass) {
+ $filterParts[] = 'objectclass='.$obclass;
+ }
+ //we filter for everything
+ //- that looks like a group and
+ //- has the group display name set
+ $filter = $ldapAccess->combineFilterWithOr($filterParts);
+ $filter = $ldapAccess->combineFilterWithAnd(array($filter, 'cn=*'));
+
+ $limit = 400;
+ $offset = 0;
+ do {
+ $result = $ldapAccess->searchGroups($filter, array('cn'), $limit, $offset);
+ foreach($result as $item) {
+ $groups[] = $item[0];
+ }
+ $offset += $limit;
+ } while (count($groups) > 0 && count($groups) % $limit === 0);
+
+ if(count($groups) > 0) {
+ natsort($groups);
+ $this->result->addOptions($dbKey, array_values($groups));
+ } else {
+ throw new \Exception(self::$l->t('Could not find the desired feature'));
+ }
+
+ $setFeatures = $this->configuration->$confKey;
+ if(is_array($setFeatures) && !empty($setFeatures)) {
+ //something is already configured? pre-select it.
+ $this->result->addChange($dbKey, $setFeatures);
+ }
+ }
+
public function determineGroupMemberAssoc() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
@@ -909,15 +942,13 @@ class Wizard extends LDAPUtility {
* specified attribute
* @param string[] $filters array, the filters that shall be used in the search
* @param string $attr the attribute of which a list of values shall be returned
- * @param bool $lfw whether the last filter is a wildcard which shall not
- * be processed if there were already findings, defaults to true
* @param int $dnReadLimit the amount of how many DNs should be analyzed.
* The lower, the faster
* @param string $maxF string. if not null, this variable will have the filter that
* yields most result entries
* @return array|false an array with the values on success, false otherwise
*/
- public function cumulativeSearchOnAttribute($filters, $attr, $lfw = true, $dnReadLimit = 3, &$maxF = null) {
+ public function cumulativeSearchOnAttribute($filters, $attr, $dnReadLimit = 3, &$maxF = null) {
$dnRead = array();
$foundItems = array();
$maxEntries = 0;
@@ -935,7 +966,7 @@ class Wizard extends LDAPUtility {
$lastFilter = $filters[count($filters)-1];
}
foreach($filters as $filter) {
- if($lfw && $lastFilter === $filter && count($foundItems) > 0) {
+ if($lastFilter === $filter && count($foundItems) > 0) {
//skip when the filter is a wildcard and results were found
continue;
}
@@ -1005,16 +1036,11 @@ class Wizard extends LDAPUtility {
//how deep to dig?
//When looking for objectclasses, testing few entries is sufficient,
- //when looking for group we need to get all names, though.
- if(strtolower($attr) === 'objectclass') {
- $dig = 3;
- } else {
- $dig = 0;
- }
+ $dig = 3;
$availableFeatures =
$this->cumulativeSearchOnAttribute($objectclasses, $attr,
- true, $dig, $maxEntryObjC);
+ $dig, $maxEntryObjC);
if(is_array($availableFeatures)
&& count($availableFeatures) > 0) {
natcasesort($availableFeatures);
@@ -1073,6 +1099,27 @@ class Wizard extends LDAPUtility {
}
/**
+ * creates and returns an Access instance
+ * @return \OCA\user_ldap\lib\Access
+ */
+ private function getAccess() {
+ $con = new Connection($this->ldap, '', null);
+ $con->setConfiguration($this->configuration->getConfiguration());
+ $con->ldapConfigurationActive = true;
+ $con->setIgnoreValidation(true);
+
+ $userManager = new user\Manager(
+ \OC::$server->getConfig(),
+ new FilesystemHelper(),
+ new LogWrapper(),
+ \OC::$server->getAvatarManager(),
+ new \OCP\Image());
+
+ $ldapAccess = new Access($con, $this->ldap, $userManager);
+ return $ldapAccess;
+ }
+
+ /**
* @return bool|mixed
*/
private function getConnection() {
diff --git a/apps/user_ldap/tests/wizard.php b/apps/user_ldap/tests/wizard.php
index 2b5cabc705d..ff5ee010b71 100644
--- a/apps/user_ldap/tests/wizard.php
+++ b/apps/user_ldap/tests/wizard.php
@@ -127,7 +127,7 @@ class Test_Wizard extends \PHPUnit_Framework_TestCase {
# The following expectations are the real test #
$filters = array('f1', 'f2', '*');
- $wizard->cumulativeSearchOnAttribute($filters, 'cn', true, 5);
+ $wizard->cumulativeSearchOnAttribute($filters, 'cn', 5);
unset($uidnumber);
}
@@ -203,8 +203,8 @@ class Test_Wizard extends \PHPUnit_Framework_TestCase {
# The following expectations are the real test #
$filters = array('f1', 'f2', '*');
- $wizard->cumulativeSearchOnAttribute($filters, 'cn', true, 0);
+ $wizard->cumulativeSearchOnAttribute($filters, 'cn', 0);
unset($uidnumber);
}
-} \ No newline at end of file
+}
diff --git a/core/css/share.css b/core/css/share.css
index 0859c195858..314c6140d78 100644
--- a/core/css/share.css
+++ b/core/css/share.css
@@ -35,6 +35,8 @@
#shareWithList label input[type=checkbox]{
margin-left: 0;
+ top: 3px;
+ position: relative;
}
#shareWithList .username{
padding-right: 8px;
diff --git a/core/js/js.js b/core/js/js.js
index a8dd9ca889d..544b26647a9 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1411,6 +1411,10 @@ OC.Util.History = {
if (pos >= 0) {
return hash.substr(pos + 1);
}
+ if (hash.length) {
+ // remove hash sign
+ return hash.substr(1);
+ }
return '';
},
diff --git a/core/js/share.js b/core/js/share.js
index e164602d0ab..1c59524939c 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -569,6 +569,9 @@ OC.Share={
}
html += '<label><input type="checkbox" name="mailNotification" class="mailNotification" ' + checked + ' />'+t('core', 'notify by email')+'</label> ';
}
+ if (possiblePermissions & OC.PERMISSION_SHARE) {
+ html += '<label><input type="checkbox" name="share" class="permissions" '+shareChecked+' data-permissions="'+OC.PERMISSION_SHARE+'" />'+t('core', 'can share')+'</label>';
+ }
if (possiblePermissions & OC.PERMISSION_CREATE || possiblePermissions & OC.PERMISSION_UPDATE || possiblePermissions & OC.PERMISSION_DELETE) {
html += '<label><input type="checkbox" name="edit" class="permissions" '+editChecked+' />'+t('core', 'can edit')+'</label> ';
}
@@ -583,9 +586,6 @@ OC.Share={
if (possiblePermissions & OC.PERMISSION_DELETE) {
html += '<label><input type="checkbox" name="delete" class="permissions" '+deleteChecked+' data-permissions="'+OC.PERMISSION_DELETE+'" />'+t('core', 'delete')+'</label>';
}
- if (possiblePermissions & OC.PERMISSION_SHARE) {
- html += '<label><input type="checkbox" name="share" class="permissions" '+shareChecked+' data-permissions="'+OC.PERMISSION_SHARE+'" />'+t('core', 'share')+'</label>';
- }
html += '</div>';
html += '</li>';
html = $(html).appendTo('#shareWithList');
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 34f89dae1b6..96e714faf4b 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -47,7 +47,10 @@ $TRANSLATIONS = array(
"_%n month ago_::_%n months ago_" => array("%n måned siden","%n måneder siden"),
"last year" => "sidste år",
"years ago" => "år siden",
+"Couldn't send reset email. Please contact your administrator." => "Der opstod et problem under afsending af reset-emailen. Kontakt venligst systemadministratoren.",
+"I know what I'm doing" => "Jeg ved, hvad jeg har gang i",
"Reset password" => "Nulstil kodeord",
+"Password can not be changed. Please contact your administrator." => "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.",
"Yes" => "Ja",
"No" => "Nej",
"Choose" => "Vælg",
@@ -129,6 +132,7 @@ $TRANSLATIONS = array(
"Yes, I really want to reset my password now" => "Ja, Jeg ønsker virkelig at nulstille mit kodeord",
"Reset" => "Nulstil",
"New password" => "Nyt kodeord",
+"New Password" => "Ny adgangskode",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X understøttes ikke og %s vil ikke virke optimalt på denne platform. Anvend på eget ansvar!",
"For the best results, please consider using a GNU/Linux server instead." => "For de bedste resultater, overvej venligst at bruge en GNU/Linux-server i stedet.",
"Personal" => "Personligt",
@@ -177,6 +181,7 @@ $TRANSLATIONS = array(
"Please change your password to secure your account again." => "Skift adgangskode for at sikre din konto igen.",
"Server side authentication failed!" => "Server side godkendelse mislykkedes!",
"Please contact your administrator." => "Kontakt venligst din administrator",
+"Forgot your password? Reset it!" => "Glemt din adgangskode? Nulstil det!",
"remember" => "husk",
"Log in" => "Log ind",
"Alternative Logins" => "Alternative logins",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index 09f8b2c29e7..08d82867383 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -49,6 +49,7 @@ $TRANSLATIONS = array(
"years ago" => "hace años",
"Couldn't send reset email. Please contact your administrator." => "El mail de reset no pudo ser enviado. Por favor, contacte con su administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." => "Un enlace para reestablecer su contraseña ha sido enviado a su email. Si usted no lo recibe en un tiempo razonable, revise tu carpeta spam/correo no deseado.<br>Si no lo encuentra, pregunte a su administrador local.",
+"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" => "Sus archivos están encriptados. Si no ha habilitado la clave de recuperación, no habrá manera de recuperar los datos despues de un reset de la contraseña. .<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"I know what I'm doing" => "Yo soy consciente de lo que estoy haciendo",
"Reset password" => "Restablecer contraseña",
"Password can not be changed. Please contact your administrator." => "La contraseña no se puede cambiar. Por favor, contacte con su administrador.",
@@ -125,6 +126,9 @@ $TRANSLATIONS = array(
"Please reload the page." => "Recargue/Actualice la página",
"The update was unsuccessful." => "Falló la actualización",
"The update was successful. Redirecting you to ownCloud now." => "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
+"Couldn't reset password because the token is invalid" => "No se puede restablecer la contraseña porque el token no es válido",
+"Couldn't send reset email. Please make sure your username is correct." => "No se pudo resetear su correo electrónico. Por favor, asegúrese de que su nombre de usuario es correcto.",
+"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "No se pudo resetear su correo electrónico, porque no hay una dirección de correo electrónico asociada para este nombre de usuario. Por favor, póngase en contacto con su administrador.",
"%s password reset" => "%s restablecer contraseña",
"Use the following link to reset your password: {link}" => "Utilice el siguiente enlace para restablecer su contraseña: {link}",
"You will receive a link to reset your password via Email." => "Recibirá un enlace por correo electrónico para restablecer su contraseña",
diff --git a/core/l10n/ja.php b/core/l10n/ja.php
index d9ef2593c5c..80e83eb6883 100644
--- a/core/l10n/ja.php
+++ b/core/l10n/ja.php
@@ -87,10 +87,10 @@ $TRANSLATIONS = array(
"Shared with you by {owner}" => "{owner} と共有中",
"Share with user or group …" => "ユーザーもしくはグループと共有 ...",
"Share link" => "URLで共有",
-"The public link will expire no later than {days} days after it is created" => "公開用リンクは、作成してから {days} 日以内に有効期限切れになります",
-"By default the public link will expire after {days} days" => "デフォルトの設定では、公開用リンクは {days} 日後に有効期限切れになります",
-"Password protect" => "パスワード保護",
-"Choose a password for the public link" => "公開用リンクのパスワードを選択",
+"The public link will expire no later than {days} days after it is created" => "URLによる共有は、作成してから {days} 日以内に有効期限切れになります",
+"By default the public link will expire after {days} days" => "デフォルトの設定では、URLによる共有は {days} 日後に有効期限切れになります",
+"Password protect" => "パスワード保護を有効化",
+"Choose a password for the public link" => "URLによる共有のパスワードを入力",
"Allow Public Upload" => "アップロードを許可",
"Email link to person" => "メールリンク",
"Send" => "送信",
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index 7c977ae71d7..599f05f4521 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -47,7 +47,12 @@ $TRANSLATIONS = array(
"_%n month ago_::_%n months ago_" => array("","%n maanden geleden"),
"last year" => "vorig jaar",
"years ago" => "jaar geleden",
+"Couldn't send reset email. Please contact your administrator." => "Kon herstel e-mail niet versturen. Neem contact op met uw beheerder.",
+"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." => "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammapje. <br>Als het daar niet in zit, neem dan contact op met uw beheerder.",
+"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" => "Uw bestanden zijn versleuteld. Als u de herstelsleutel niet hebt geactiveerd, dan is er geen mogelijk om uw gegevens terug te krijgen nadat uw wachtwoord is hersteld. <br>Als u niet weet wat u moet doen, neem dan eerst contact op met uw beheerder. <br>Wilt u echt verder gaan?",
+"I know what I'm doing" => "Ik weet wat ik doe",
"Reset password" => "Reset wachtwoord",
+"Password can not be changed. Please contact your administrator." => "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"Yes" => "Ja",
"No" => "Nee",
"Choose" => "Kies",
@@ -121,6 +126,9 @@ $TRANSLATIONS = array(
"Please reload the page." => "Herlaad deze pagina.",
"The update was unsuccessful." => "De update is niet geslaagd.",
"The update was successful. Redirecting you to ownCloud now." => "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud.",
+"Couldn't reset password because the token is invalid" => "Kon het wachtwoord niet herstellen omdat het token ongeldig is",
+"Couldn't send reset email. Please make sure your username is correct." => "Kon e-mail niet versturen. Verifieer of uw gebruikersnaam correct is.",
+"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "Kon wachtwoordherstel e-mailbericht niet versturen, omdat er geen e-mailadres bekend is voor deze gebruikersnaam. Neem contact op met uw beheerder.",
"%s password reset" => "%s wachtwoord reset",
"Use the following link to reset your password: {link}" => "Gebruik de volgende link om uw wachtwoord te resetten: {link}",
"You will receive a link to reset your password via Email." => "U ontvangt een link om uw wachtwoord opnieuw in te stellen via e-mail.",
@@ -129,6 +137,7 @@ $TRANSLATIONS = array(
"Yes, I really want to reset my password now" => "Ja, ik wil mijn wachtwoord nu echt resetten",
"Reset" => "Reset",
"New password" => "Nieuw wachtwoord",
+"New Password" => "Nieuw wachtwoord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OSX wordt niet ondersteund en %s zal niet goed werken op dit platform. Gebruik het op uw eigen risico!",
"For the best results, please consider using a GNU/Linux server instead." => "Voor het beste resultaat adviseren wij het gebruik van een GNU/Linux server.",
"Personal" => "Persoonlijk",
@@ -177,6 +186,7 @@ $TRANSLATIONS = array(
"Please change your password to secure your account again." => "Wijzig uw wachtwoord zodat uw account weer beveiligd is.",
"Server side authentication failed!" => "Authenticatie bij de server mislukte!",
"Please contact your administrator." => "Neem contact op met uw systeembeheerder.",
+"Forgot your password? Reset it!" => "Wachtwoord vergeten? Herstel het!",
"remember" => "onthoud gegevens",
"Log in" => "Meld u aan",
"Alternative Logins" => "Alternatieve inlogs",
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index f9b7efedfd3..a6b2301f5a0 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -47,7 +47,10 @@ $TRANSLATIONS = array(
"_%n month ago_::_%n months ago_" => array("%n miesiąc temu","%n miesięcy temu","%n miesięcy temu"),
"last year" => "w zeszłym roku",
"years ago" => "lat temu",
+"Couldn't send reset email. Please contact your administrator." => "Nie mogę wysłać maila resetującego. Skontaktuj się z administratorem.",
+"I know what I'm doing" => "Wiem co robię",
"Reset password" => "Zresetuj hasło",
+"Password can not be changed. Please contact your administrator." => "Hasło nie może zostać zmienione. Skontaktuj się z administratorem.",
"Yes" => "Tak",
"No" => "Nie",
"Choose" => "Wybierz",
@@ -121,6 +124,9 @@ $TRANSLATIONS = array(
"Please reload the page." => "Proszę przeładować stronę",
"The update was unsuccessful." => "Aktualizacja nie powiodła się.",
"The update was successful. Redirecting you to ownCloud now." => "Aktualizacji zakończyła się powodzeniem. Przekierowuję do ownCloud.",
+"Couldn't reset password because the token is invalid" => "Nie można zresetować hasła, ponieważ token jest niepoprawny",
+"Couldn't send reset email. Please make sure your username is correct." => "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna.",
+"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika lub adres email jest poprawny. Skontaktuj się z administratorem.",
"%s password reset" => "%s reset hasła",
"Use the following link to reset your password: {link}" => "Użyj tego odnośnika by zresetować hasło: {link}",
"You will receive a link to reset your password via Email." => "Odnośnik służący do resetowania hasła zostanie wysłany na adres e-mail.",
@@ -129,6 +135,7 @@ $TRANSLATIONS = array(
"Yes, I really want to reset my password now" => "Tak, naprawdę chcę zresetować hasło teraz",
"Reset" => "Resetuj",
"New password" => "Nowe hasło",
+"New Password" => "Nowe hasło",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
"For the best results, please consider using a GNU/Linux server instead." => "Aby uzyskać najlepsze rezultaty, rozważ w to miejsce użycie serwera GNU/Linux.",
"Personal" => "Osobiste",
@@ -177,6 +184,7 @@ $TRANSLATIONS = array(
"Please change your password to secure your account again." => "Zmień swoje hasło, aby ponownie zabezpieczyć swoje konto.",
"Server side authentication failed!" => "Uwierzytelnianie po stronie serwera nie powiodło się!",
"Please contact your administrator." => "Skontaktuj się z administratorem",
+"Forgot your password? Reset it!" => "Nie pamiętasz hasła? Zresetuj je!",
"remember" => "pamiętaj",
"Log in" => "Zaloguj",
"Alternative Logins" => "Alternatywne loginy",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index 4fe12d76021..0f9f66e3d1e 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -33,6 +33,7 @@ $TRANSLATIONS = array(
"File" => "Datoteka",
"Folder" => "Mapa",
"Image" => "Slika",
+"Audio" => "Zvok",
"Saving..." => "Poteka shranjevanje ...",
"seconds ago" => "pred nekaj sekundami",
"_%n minute ago_::_%n minutes ago_" => array("pred %n minuto","pred %n minutama","pred %n minutami","pred %n minutami"),
@@ -45,6 +46,7 @@ $TRANSLATIONS = array(
"last year" => "lansko leto",
"years ago" => "let nazaj",
"Reset password" => "Ponastavi geslo",
+"Password can not be changed. Please contact your administrator." => "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.",
"Yes" => "Da",
"No" => "Ne",
"Choose" => "Izbor",
@@ -111,6 +113,7 @@ $TRANSLATIONS = array(
"Error loading dialog template: {error}" => "Napaka nalaganja predloge pogovornega okna: {error}",
"No tags selected for deletion." => "Ni izbranih oznak za izbris.",
"Please reload the page." => "Stran je treba ponovno naložiti",
+"The update was unsuccessful." => "Posodobitev je spodletela",
"The update was successful. Redirecting you to ownCloud now." => "Posodobitev je uspešno končana. Stran bo preusmerjena na oblak ownCloud.",
"%s password reset" => "Ponastavitev gesla %s",
"Use the following link to reset your password: {link}" => "Za ponastavitev gesla uporabite povezavo: {link}",
@@ -120,6 +123,7 @@ $TRANSLATIONS = array(
"Yes, I really want to reset my password now" => "Da, potrjujem ponastavitev gesla",
"Reset" => "Ponastavi",
"New password" => "Novo geslo",
+"New Password" => "Novo geslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
"For the best results, please consider using a GNU/Linux server instead." => "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
"Personal" => "Osebno",
@@ -174,6 +178,8 @@ $TRANSLATIONS = array(
"This means only administrators can use the instance." => "To pomeni, da lahko oblak uporabljajo le osebe s skrbniškimi dovoljenji.",
"Contact your system administrator if this message persists or appeared unexpectedly." => "Stopite v stik s skrbnikom sistema, če se bo sporočilo še naprej nepričakovano prikazovalo.",
"Thank you for your patience." => "Hvala za potrpežljivost!",
+"The theme %s has been disabled." => "Tema %s je onemogočena za uporabo.",
+"Start update" => "Začni posodobitev",
"This ownCloud instance is currently being updated, which may take a while." => "Nastavitev oblaka ownCloud se trenutno posodablja. Opravilo je lahko dolgotrajno ...",
"Please reload this page after a short time to continue using ownCloud." => "Ponovno naložite to stran po krajšem preteku časa in nadaljujte z uporabo oblaka ownCloud."
);
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index a74558d908c..40f6b983f5c 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -29,6 +29,7 @@ $TRANSLATIONS = array(
"November" => "十一月",
"December" => "十二月",
"Settings" => "設定",
+"File" => "檔案",
"Folder" => "資料夾",
"Saving..." => "儲存中...",
"seconds ago" => "幾秒前",
diff --git a/l10n/da/core.po b/l10n/da/core.po
index 892ee2cf00b..dcde8300616 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -5,6 +5,7 @@
# Translators:
# Anders J. Sørensen, 2013-2014
# Claus Christensen <claus_chr@webspeed.dk>, 2013
+# Johannes Hessellund <osos@openeyes.dk>, 2014
# Kasper Affeldt <kasper.affeldt@gmail.com>, 2013
# Leif Lodahl <leiflodahl@gmail.com>, 2013
# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2014
@@ -15,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-15 01:54-0400\n"
-"PO-Revision-Date: 2014-06-15 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 10:51+0000\n"
+"Last-Translator: Johannes Hessellund <osos@openeyes.dk>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -225,7 +226,7 @@ msgstr "år siden"
#: js/lostpassword.js:3 lostpassword/controller/lostcontroller.php:175
msgid "Couldn't send reset email. Please contact your administrator."
-msgstr ""
+msgstr "Der opstod et problem under afsending af reset-emailen. Kontakt venligst systemadministratoren."
#: js/lostpassword.js:5
msgid ""
@@ -244,7 +245,7 @@ msgstr ""
#: js/lostpassword.js:10
msgid "I know what I'm doing"
-msgstr ""
+msgstr "Jeg ved, hvad jeg har gang i"
#: js/lostpassword.js:13 lostpassword/templates/resetpassword.php:9
msgid "Reset password"
@@ -252,77 +253,77 @@ msgstr "Nulstil kodeord"
#: js/lostpassword.js:16
msgid "Password can not be changed. Please contact your administrator."
-msgstr ""
+msgstr "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator."
-#: js/oc-dialogs.js:109 js/oc-dialogs.js:250
+#: js/oc-dialogs.js:109 js/oc-dialogs.js:257
msgid "Yes"
msgstr "Ja"
-#: js/oc-dialogs.js:119 js/oc-dialogs.js:260
+#: js/oc-dialogs.js:119 js/oc-dialogs.js:267
msgid "No"
msgstr "Nej"
-#: js/oc-dialogs.js:198
+#: js/oc-dialogs.js:204
msgid "Choose"
msgstr "Vælg"
-#: js/oc-dialogs.js:224
+#: js/oc-dialogs.js:231
msgid "Error loading file picker template: {error}"
msgstr "Fejl ved indlæsning af filvælger skabelon: {error}"
-#: js/oc-dialogs.js:277
+#: js/oc-dialogs.js:284
msgid "Ok"
msgstr "OK"
-#: js/oc-dialogs.js:297
+#: js/oc-dialogs.js:304
msgid "Error loading message template: {error}"
msgstr "Fejl ved indlæsning af besked skabelon: {error}"
-#: js/oc-dialogs.js:425
+#: js/oc-dialogs.js:432
msgid "{count} file conflict"
msgid_plural "{count} file conflicts"
msgstr[0] "{count} filkonflikt"
msgstr[1] "{count} filkonflikter"
-#: js/oc-dialogs.js:439
+#: js/oc-dialogs.js:446
msgid "One file conflict"
msgstr "En filkonflikt"
-#: js/oc-dialogs.js:445
+#: js/oc-dialogs.js:452
msgid "New Files"
msgstr "Nye filer"
-#: js/oc-dialogs.js:446
+#: js/oc-dialogs.js:453
msgid "Already existing files"
msgstr "Allerede eksisterende filer"
-#: js/oc-dialogs.js:448
+#: js/oc-dialogs.js:455
msgid "Which files do you want to keep?"
msgstr "Hvilke filer ønsker du at beholde?"
-#: js/oc-dialogs.js:449
+#: js/oc-dialogs.js:456
msgid ""
"If you select both versions, the copied file will have a number added to its"
" name."
msgstr "Hvis du vælger begge versioner, vil den kopierede fil få tilføjet et nummer til sit navn."
-#: js/oc-dialogs.js:457
+#: js/oc-dialogs.js:464
msgid "Cancel"
msgstr "Annuller"
-#: js/oc-dialogs.js:467
+#: js/oc-dialogs.js:474
msgid "Continue"
msgstr "Videre"
-#: js/oc-dialogs.js:514 js/oc-dialogs.js:527
+#: js/oc-dialogs.js:521 js/oc-dialogs.js:534
msgid "(all selected)"
msgstr "(alle valgt)"
-#: js/oc-dialogs.js:517 js/oc-dialogs.js:531
+#: js/oc-dialogs.js:524 js/oc-dialogs.js:538
msgid "({count} selected)"
msgstr "({count} valgt)"
-#: js/oc-dialogs.js:539
+#: js/oc-dialogs.js:546
msgid "Error loading file exists template"
msgstr "Fejl ved inlæsning af; fil eksistere skabelon"
@@ -607,7 +608,7 @@ msgstr "Nyt kodeord"
#: lostpassword/templates/resetpassword.php:6
msgid "New Password"
-msgstr ""
+msgstr "Ny adgangskode"
#: setup/controller.php:140
#, php-format
@@ -835,7 +836,7 @@ msgstr "Kontakt venligst din administrator"
#: templates/login.php:50
msgid "Forgot your password? Reset it!"
-msgstr ""
+msgstr "Glemt din adgangskode? Nulstil det!"
#: templates/login.php:55
msgid "remember"
diff --git a/l10n/es/core.po b/l10n/es/core.po
index afca4f3698a..dd2f163a9f8 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -24,9 +24,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-17 01:54-0400\n"
-"PO-Revision-Date: 2014-06-16 17:30+0000\n"
-"Last-Translator: Carlos Andrés Burgos Urey <business@carlos-burgos.com>\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-25 09:40+0000\n"
+"Last-Translator: Raul Fernandez Garcia <raulfg3@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -249,7 +249,7 @@ msgid ""
"will be no way to get your data back after your password is reset.<br />If "
"you are not sure what to do, please contact your administrator before you "
"continue. <br />Do you really want to continue?"
-msgstr ""
+msgstr "Sus archivos están encriptados. Si no ha habilitado la clave de recuperación, no habrá manera de recuperar los datos despues de un reset de la contraseña. .<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?"
#: js/lostpassword.js:10
msgid "I know what I'm doing"
@@ -263,75 +263,75 @@ msgstr "Restablecer contraseña"
msgid "Password can not be changed. Please contact your administrator."
msgstr "La contraseña no se puede cambiar. Por favor, contacte con su administrador."
-#: js/oc-dialogs.js:109 js/oc-dialogs.js:250
+#: js/oc-dialogs.js:109 js/oc-dialogs.js:257
msgid "Yes"
msgstr "Sí"
-#: js/oc-dialogs.js:119 js/oc-dialogs.js:260
+#: js/oc-dialogs.js:119 js/oc-dialogs.js:267
msgid "No"
msgstr "No"
-#: js/oc-dialogs.js:198
+#: js/oc-dialogs.js:204
msgid "Choose"
msgstr "Seleccionar"
-#: js/oc-dialogs.js:224
+#: js/oc-dialogs.js:231
msgid "Error loading file picker template: {error}"
msgstr "Error cargando plantilla del seleccionador de archivos: {error}"
-#: js/oc-dialogs.js:277
+#: js/oc-dialogs.js:284
msgid "Ok"
msgstr "Aceptar"
-#: js/oc-dialogs.js:297
+#: js/oc-dialogs.js:304
msgid "Error loading message template: {error}"
msgstr "Error cargando plantilla del mensaje: {error}"
-#: js/oc-dialogs.js:425
+#: js/oc-dialogs.js:432
msgid "{count} file conflict"
msgid_plural "{count} file conflicts"
msgstr[0] "{count} conflicto de archivo"
msgstr[1] "{count} conflictos de archivo"
-#: js/oc-dialogs.js:439
+#: js/oc-dialogs.js:446
msgid "One file conflict"
msgstr "On conflicto de archivo"
-#: js/oc-dialogs.js:445
+#: js/oc-dialogs.js:452
msgid "New Files"
msgstr "Nuevos Archivos"
-#: js/oc-dialogs.js:446
+#: js/oc-dialogs.js:453
msgid "Already existing files"
msgstr "Archivos ya existentes"
-#: js/oc-dialogs.js:448
+#: js/oc-dialogs.js:455
msgid "Which files do you want to keep?"
msgstr "¿Que archivos deseas mantener?"
-#: js/oc-dialogs.js:449
+#: js/oc-dialogs.js:456
msgid ""
"If you select both versions, the copied file will have a number added to its"
" name."
msgstr "Si seleccionas ambas versiones, el archivo copiado tendrá añadido un número en su nombre."
-#: js/oc-dialogs.js:457
+#: js/oc-dialogs.js:464
msgid "Cancel"
msgstr "Cancelar"
-#: js/oc-dialogs.js:467
+#: js/oc-dialogs.js:474
msgid "Continue"
msgstr "Continuar"
-#: js/oc-dialogs.js:514 js/oc-dialogs.js:527
+#: js/oc-dialogs.js:521 js/oc-dialogs.js:534
msgid "(all selected)"
msgstr "(seleccionados todos)"
-#: js/oc-dialogs.js:517 js/oc-dialogs.js:531
+#: js/oc-dialogs.js:524 js/oc-dialogs.js:538
msgid "({count} selected)"
msgstr "({count} seleccionados)"
-#: js/oc-dialogs.js:539
+#: js/oc-dialogs.js:546
msgid "Error loading file exists template"
msgstr "Error cargando plantilla de archivo existente"
@@ -563,17 +563,17 @@ msgstr "La actualización se ha realizado con éxito. Redireccionando a ownCloud
#: lostpassword/controller/lostcontroller.php:110
msgid "Couldn't reset password because the token is invalid"
-msgstr ""
+msgstr "No se puede restablecer la contraseña porque el token no es válido"
#: lostpassword/controller/lostcontroller.php:136
msgid "Couldn't send reset email. Please make sure your username is correct."
-msgstr ""
+msgstr "No se pudo resetear su correo electrónico. Por favor, asegúrese de que su nombre de usuario es correcto."
#: lostpassword/controller/lostcontroller.php:151
msgid ""
"Couldn't send reset email because there is no email address for this "
"username. Please contact your administrator."
-msgstr ""
+msgstr "No se pudo resetear su correo electrónico, porque no hay una dirección de correo electrónico asociada para este nombre de usuario. Por favor, póngase en contacto con su administrador."
#: lostpassword/controller/lostcontroller.php:168
#, php-format
diff --git a/l10n/es/files_encryption.po b/l10n/es/files_encryption.po
index 854e008c070..3d55a81083d 100644
--- a/l10n/es/files_encryption.po
+++ b/l10n/es/files_encryption.po
@@ -10,7 +10,7 @@
# juanman <juanma@kde.org.ar>, 2013
# Maenso <balero_arana@hotmail.com>, 2013
# mikel anabitarte <inactive+mikelanabitarte@transifex.com>, 2013
-# Raul Fernandez Garcia <raulfg3@gmail.com>, 2013
+# Raul Fernandez Garcia <raulfg3@gmail.com>, 2013-2014
# Rubén del Campo Gómez <yo@rubendelcampo.es>, 2013
# Sam Askari <saskarip@gmail.com>, 2013
# William Díaz <wdiazux@gmail.com>, 2013
@@ -19,9 +19,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-14 01:54-0400\n"
-"PO-Revision-Date: 2014-06-14 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-25 10:31+0000\n"
+"Last-Translator: Raul Fernandez Garcia <raulfg3@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -118,7 +118,7 @@ msgstr "Cifrado inicial en curso... Inténtelo más tarde."
#: templates/invalid_private_key.php:8
#, php-format
msgid "Go directly to your %spersonal settings%s."
-msgstr ""
+msgstr "Ir directamente a %sOpciones%s."
#: templates/settings-admin.php:2 templates/settings-personal.php:2
msgid "Encryption"
diff --git a/l10n/es/files_sharing.po b/l10n/es/files_sharing.po
index 8557d6c29ce..66f09729949 100644
--- a/l10n/es/files_sharing.po
+++ b/l10n/es/files_sharing.po
@@ -9,14 +9,15 @@
# Jose Luis <joseluis.tirado@gmail.com>, 2014
# joses <jose_mari_s@hotmail.com>, 2014
# juanman <juanma@kde.org.ar>, 2013
+# Raul Fernandez Garcia <raulfg3@gmail.com>, 2014
# Rubén del Campo Gómez <yo@rubendelcampo.es>, 2013
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 16:20+0000\n"
-"Last-Translator: Art O. Pal <artopal@fastmail.fm>\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-25 10:21+0000\n"
+"Last-Translator: Raul Fernandez Garcia <raulfg3@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,21 +27,21 @@ msgstr ""
#: ajax/external.php:20
msgid "Server to server sharing is not enabled on this server"
-msgstr ""
+msgstr "Compartir entre servidores no está habilitado en este servidor"
#: ajax/external.php:50
msgid "Couldn't add remote share"
-msgstr ""
+msgstr "No se puede añadir un compartido remoto"
-#: appinfo/app.php:46 js/app.js:34
+#: appinfo/app.php:39 js/app.js:34
msgid "Shared with you"
msgstr "Compartido contigo"
-#: appinfo/app.php:55 js/app.js:53
+#: appinfo/app.php:48 js/app.js:53
msgid "Shared with others"
msgstr "Compartido con otros"
-#: appinfo/app.php:64 js/app.js:72
+#: appinfo/app.php:57 js/app.js:72
msgid "Shared by link"
msgstr "Compartido por medio de enlaces"
@@ -58,7 +59,7 @@ msgstr "Usted todavía no ha compartido ningún archivo por medio de enlaces."
#: js/external.js:43 js/external.js:46
msgid "Add {name} from {owner}@{remote}"
-msgstr ""
+msgstr "Añadir {name} desde {owner}@{remote}"
#: js/public.js:200
msgid "No ownCloud installation found at {remote}"
@@ -151,8 +152,8 @@ msgstr "Compartir archivos"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
-msgstr ""
+msgstr "Permitir a otros montar enlaces publicos compartidos de este servidor"
#: templates/settings-admin.php:11
msgid "Allow users to mount public link shares"
-msgstr ""
+msgstr "Permitir a los usuarios montar enlaces publicos compartidos"
diff --git a/l10n/ja/core.po b/l10n/ja/core.po
index e4d6a21511a..700423eb50b 100644
--- a/l10n/ja/core.po
+++ b/l10n/ja/core.po
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-23 01:54-0400\n"
-"PO-Revision-Date: 2014-06-22 10:21+0000\n"
-"Last-Translator: YANO Tetsu <tetuyano+transi@gmail.com>\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:54+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -392,19 +392,19 @@ msgstr "URLで共有"
#: js/share.js:340
msgid ""
"The public link will expire no later than {days} days after it is created"
-msgstr "公開用リンクは、作成してから {days} 日以内に有効期限切れになります"
+msgstr "URLによる共有は、作成してから {days} 日以内に有効期限切れになります"
#: js/share.js:342
msgid "By default the public link will expire after {days} days"
-msgstr "デフォルトの設定では、公開用リンクは {days} 日後に有効期限切れになります"
+msgstr "デフォルトの設定では、URLによる共有は {days} 日後に有効期限切れになります"
#: js/share.js:347
msgid "Password protect"
-msgstr "パスワード保護"
+msgstr "パスワード保護を有効化"
#: js/share.js:349
msgid "Choose a password for the public link"
-msgstr "公開用リンクのパスワードを選択"
+msgstr "URLによる共有のパスワードを入力"
#: js/share.js:355
msgid "Allow Public Upload"
diff --git a/l10n/ja/files_external.po b/l10n/ja/files_external.po
index 80509fc24f2..727dfac8300 100644
--- a/l10n/ja/files_external.po
+++ b/l10n/ja/files_external.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-08 01:54-0400\n"
-"PO-Revision-Date: 2014-06-07 06:20+0000\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:54+0000\n"
"Last-Translator: YANO Tetsu <tetuyano+transi@gmail.com>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -212,7 +212,7 @@ msgstr "個人"
msgid "System"
msgstr "システム"
-#: js/settings.js:318 js/settings.js:325
+#: js/settings.js:320 js/settings.js:327
msgid "Saved"
msgstr "保存されました"
diff --git a/l10n/ja/files_sharing.po b/l10n/ja/files_sharing.po
index 82ed83a9c68..fda695ec228 100644
--- a/l10n/ja/files_sharing.po
+++ b/l10n/ja/files_sharing.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
-"PO-Revision-Date: 2014-06-23 11:00+0000\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:54+0000\n"
"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -32,27 +32,27 @@ msgstr "リモート共有を追加できませんでした"
#: appinfo/app.php:39 js/app.js:34
msgid "Shared with you"
-msgstr "あなたと共有"
+msgstr "他ユーザーがあなたと共有中"
#: appinfo/app.php:48 js/app.js:53
msgid "Shared with others"
-msgstr "他人と共有"
+msgstr "他ユーザーと共有中"
#: appinfo/app.php:57 js/app.js:72
msgid "Shared by link"
-msgstr "URLリンクで共有済"
+msgstr "URLリンクで共有中"
#: js/app.js:35
msgid "No files have been shared with you yet."
-msgstr "まだ共有を行なっているファイルはありません。"
+msgstr "他のユーザーがあなたと共有しているファイルはありません。"
#: js/app.js:54
msgid "You haven't shared any files yet."
-msgstr "まだ共有を行なっているファイルはありません。"
+msgstr "他のユーザーと共有しているファイルはありません。"
#: js/app.js:73
msgid "You haven't shared any files by link yet."
-msgstr "まだURLリンクで共有を行なっているファイルはありません。"
+msgstr "URLリンクで共有しているファイルはありません。"
#: js/external.js:43 js/external.js:46
msgid "Add {name} from {owner}@{remote}"
@@ -112,7 +112,7 @@ msgstr "リンクの期限が切れています"
#: templates/part.404.php:8
msgid "sharing is disabled"
-msgstr "共有が無効になっています"
+msgstr "共有は無効になっています"
#: templates/part.404.php:10
msgid "For more info, please ask the person who sent this link."
@@ -149,8 +149,8 @@ msgstr "ファイル共有"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
-msgstr "このサーバの公開共有リンクを他のインスタンスからマウントできるようにする"
+msgstr "このサーバにおけるURLでの共有を他のインスタンスからマウントできるようにする"
#: templates/settings-admin.php:11
msgid "Allow users to mount public link shares"
-msgstr "ユーザが公開共有リンクをマウントできるようにする"
+msgstr "ユーザーがURLでの共有をマウントできるようにする"
diff --git a/l10n/ja/settings.po b/l10n/ja/settings.po
index 003faecf271..c21eaeb4117 100644
--- a/l10n/ja/settings.po
+++ b/l10n/ja/settings.po
@@ -13,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-23 01:54-0400\n"
-"PO-Revision-Date: 2014-06-22 10:31+0000\n"
-"Last-Translator: YANO Tetsu <tetuyano+transi@gmail.com>\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:54+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -338,7 +338,7 @@ msgstr "グループ"
msgid "Group Admin"
msgstr "グループ管理者"
-#: js/users/users.js:63 templates/users/part.grouplist.php:44
+#: js/users/users.js:63 templates/users/part.grouplist.php:46
#: templates/users/part.userlist.php:108
msgid "Delete"
msgstr "削除"
@@ -933,9 +933,9 @@ msgstr "グループ"
#: templates/users/part.grouplist.php:18
msgid "Everyone"
-msgstr "全ての人"
+msgstr "すべてのユーザー"
-#: templates/users/part.grouplist.php:29
+#: templates/users/part.grouplist.php:31
msgid "Admins"
msgstr "管理者"
@@ -945,7 +945,7 @@ msgstr "デフォルトのクォータサイズ"
#: templates/users/part.setquota.php:9 templates/users/part.userlist.php:66
msgid "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")"
-msgstr "ストレージの割り当てを入力してください (例: \"512MB\" や \"12 GB\")"
+msgstr "ストレージのクォータを入力してください (例: \"512MB\" や \"12 GB\")"
#: templates/users/part.setquota.php:11 templates/users/part.userlist.php:75
msgid "Unlimited"
@@ -957,7 +957,7 @@ msgstr "その他"
#: templates/users/part.userlist.php:7
msgid "Username"
-msgstr "ユーザー名"
+msgstr "ユーザーID"
#: templates/users/part.userlist.php:14
msgid "Quota"
@@ -965,7 +965,7 @@ msgstr "クオータ"
#: templates/users/part.userlist.php:15
msgid "Storage Location"
-msgstr "ストレージの場所"
+msgstr "データの保存場所"
#: templates/users/part.userlist.php:16
msgid "Last Login"
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index be837b24021..a4eaa002c88 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-15 01:54-0400\n"
-"PO-Revision-Date: 2014-06-15 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:44+0000\n"
+"Last-Translator: André Koot <meneer@tken.net>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -220,14 +220,14 @@ msgstr "jaar geleden"
#: js/lostpassword.js:3 lostpassword/controller/lostcontroller.php:175
msgid "Couldn't send reset email. Please contact your administrator."
-msgstr ""
+msgstr "Kon herstel e-mail niet versturen. Neem contact op met uw beheerder."
#: js/lostpassword.js:5
msgid ""
"The link to reset your password has been sent to your email. If you do not "
"receive it within a reasonable amount of time, check your spam/junk "
"folders.<br>If it is not there ask your local administrator."
-msgstr ""
+msgstr "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammapje. <br>Als het daar niet in zit, neem dan contact op met uw beheerder."
#: js/lostpassword.js:7
msgid ""
@@ -235,11 +235,11 @@ msgid ""
"will be no way to get your data back after your password is reset.<br />If "
"you are not sure what to do, please contact your administrator before you "
"continue. <br />Do you really want to continue?"
-msgstr ""
+msgstr "Uw bestanden zijn versleuteld. Als u de herstelsleutel niet hebt geactiveerd, dan is er geen mogelijk om uw gegevens terug te krijgen nadat uw wachtwoord is hersteld. <br>Als u niet weet wat u moet doen, neem dan eerst contact op met uw beheerder. <br>Wilt u echt verder gaan?"
#: js/lostpassword.js:10
msgid "I know what I'm doing"
-msgstr ""
+msgstr "Ik weet wat ik doe"
#: js/lostpassword.js:13 lostpassword/templates/resetpassword.php:9
msgid "Reset password"
@@ -247,77 +247,77 @@ msgstr "Reset wachtwoord"
#: js/lostpassword.js:16
msgid "Password can not be changed. Please contact your administrator."
-msgstr ""
+msgstr "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder."
-#: js/oc-dialogs.js:109 js/oc-dialogs.js:250
+#: js/oc-dialogs.js:109 js/oc-dialogs.js:257
msgid "Yes"
msgstr "Ja"
-#: js/oc-dialogs.js:119 js/oc-dialogs.js:260
+#: js/oc-dialogs.js:119 js/oc-dialogs.js:267
msgid "No"
msgstr "Nee"
-#: js/oc-dialogs.js:198
+#: js/oc-dialogs.js:204
msgid "Choose"
msgstr "Kies"
-#: js/oc-dialogs.js:224
+#: js/oc-dialogs.js:231
msgid "Error loading file picker template: {error}"
msgstr "Fout bij laden bestandenselecteur sjabloon: {error}"
-#: js/oc-dialogs.js:277
+#: js/oc-dialogs.js:284
msgid "Ok"
msgstr "Ok"
-#: js/oc-dialogs.js:297
+#: js/oc-dialogs.js:304
msgid "Error loading message template: {error}"
msgstr "Fout bij laden berichtensjabloon: {error}"
-#: js/oc-dialogs.js:425
+#: js/oc-dialogs.js:432
msgid "{count} file conflict"
msgid_plural "{count} file conflicts"
msgstr[0] "{count} bestandsconflict"
msgstr[1] "{count} bestandsconflicten"
-#: js/oc-dialogs.js:439
+#: js/oc-dialogs.js:446
msgid "One file conflict"
msgstr "Een bestandsconflict"
-#: js/oc-dialogs.js:445
+#: js/oc-dialogs.js:452
msgid "New Files"
msgstr "Nieuwe bestanden"
-#: js/oc-dialogs.js:446
+#: js/oc-dialogs.js:453
msgid "Already existing files"
msgstr "Al aanwezige bestanden"
-#: js/oc-dialogs.js:448
+#: js/oc-dialogs.js:455
msgid "Which files do you want to keep?"
msgstr "Welke bestanden wilt u bewaren?"
-#: js/oc-dialogs.js:449
+#: js/oc-dialogs.js:456
msgid ""
"If you select both versions, the copied file will have a number added to its"
" name."
msgstr "Als u beide versies selecteerde, zal het gekopieerde bestand een nummer aan de naam toegevoegd krijgen."
-#: js/oc-dialogs.js:457
+#: js/oc-dialogs.js:464
msgid "Cancel"
msgstr "Annuleer"
-#: js/oc-dialogs.js:467
+#: js/oc-dialogs.js:474
msgid "Continue"
msgstr "Verder"
-#: js/oc-dialogs.js:514 js/oc-dialogs.js:527
+#: js/oc-dialogs.js:521 js/oc-dialogs.js:534
msgid "(all selected)"
msgstr "(alles geselecteerd)"
-#: js/oc-dialogs.js:517 js/oc-dialogs.js:531
+#: js/oc-dialogs.js:524 js/oc-dialogs.js:538
msgid "({count} selected)"
msgstr "({count} geselecteerd)"
-#: js/oc-dialogs.js:539
+#: js/oc-dialogs.js:546
msgid "Error loading file exists template"
msgstr "Fout bij laden bestand bestaat al sjabloon"
@@ -549,17 +549,17 @@ msgstr "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud."
#: lostpassword/controller/lostcontroller.php:110
msgid "Couldn't reset password because the token is invalid"
-msgstr ""
+msgstr "Kon het wachtwoord niet herstellen omdat het token ongeldig is"
#: lostpassword/controller/lostcontroller.php:136
msgid "Couldn't send reset email. Please make sure your username is correct."
-msgstr ""
+msgstr "Kon e-mail niet versturen. Verifieer of uw gebruikersnaam correct is."
#: lostpassword/controller/lostcontroller.php:151
msgid ""
"Couldn't send reset email because there is no email address for this "
"username. Please contact your administrator."
-msgstr ""
+msgstr "Kon wachtwoordherstel e-mailbericht niet versturen, omdat er geen e-mailadres bekend is voor deze gebruikersnaam. Neem contact op met uw beheerder."
#: lostpassword/controller/lostcontroller.php:168
#, php-format
@@ -602,7 +602,7 @@ msgstr "Nieuw wachtwoord"
#: lostpassword/templates/resetpassword.php:6
msgid "New Password"
-msgstr ""
+msgstr "Nieuw wachtwoord"
#: setup/controller.php:140
#, php-format
@@ -830,7 +830,7 @@ msgstr "Neem contact op met uw systeembeheerder."
#: templates/login.php:50
msgid "Forgot your password? Reset it!"
-msgstr ""
+msgstr "Wachtwoord vergeten? Herstel het!"
#: templates/login.php:55
msgid "remember"
diff --git a/l10n/nl/files_sharing.po b/l10n/nl/files_sharing.po
index 189af16cc3e..452525402ae 100644
--- a/l10n/nl/files_sharing.po
+++ b/l10n/nl/files_sharing.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
-"PO-Revision-Date: 2014-06-23 15:02+0000\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:44+0000\n"
"Last-Translator: André Koot <meneer@tken.net>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -21,11 +21,11 @@ msgstr ""
#: ajax/external.php:20
msgid "Server to server sharing is not enabled on this server"
-msgstr ""
+msgstr "Server met server delen is niet geactiveerd op deze server"
#: ajax/external.php:50
msgid "Couldn't add remote share"
-msgstr ""
+msgstr "Kon geen externe share toevoegen"
#: appinfo/app.php:39 js/app.js:34
msgid "Shared with you"
@@ -57,7 +57,7 @@ msgstr "Toevoegen {name} van {owner}@{remote}"
#: js/public.js:200
msgid "No ownCloud installation found at {remote}"
-msgstr ""
+msgstr "Geen ownCloud installatie gevonden op {remote}"
#: js/public.js:201
msgid "Invalid ownCloud url"
@@ -146,8 +146,8 @@ msgstr "Bestand delen"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
-msgstr ""
+msgstr "Toestaan dat andere oanClouds openbaar gedeelde links mounten vanaf deze server"
#: templates/settings-admin.php:11
msgid "Allow users to mount public link shares"
-msgstr ""
+msgstr "Toestaan dat gebruikers openbaar gedeelde links mounten"
diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po
index 0d17450806f..2bb585d88f7 100644
--- a/l10n/nl/lib.po
+++ b/l10n/nl/lib.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
-"PO-Revision-Date: 2014-06-24 05:28+0000\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:11+0000\n"
"Last-Translator: André Koot <meneer@tken.net>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index 09c072b5b29..8d2104a06c3 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
-"PO-Revision-Date: 2014-06-24 05:38+0000\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 13:11+0000\n"
"Last-Translator: André Koot <meneer@tken.net>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -336,7 +336,7 @@ msgstr "Groepen"
msgid "Group Admin"
msgstr "Groep beheerder"
-#: js/users/users.js:63 templates/users/part.grouplist.php:44
+#: js/users/users.js:63 templates/users/part.grouplist.php:46
#: templates/users/part.userlist.php:108
msgid "Delete"
msgstr "Verwijder"
@@ -933,7 +933,7 @@ msgstr "Groep"
msgid "Everyone"
msgstr "Iedereen"
-#: templates/users/part.grouplist.php:29
+#: templates/users/part.grouplist.php:31
msgid "Admins"
msgstr "Beheerders"
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index 7b5fb92531a..6ee914aa18e 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -3,7 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2013
+# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2013-2014
# Krzysztof Łojowski <maxxxrally@gmail.com>, 2014
# Maciej Przybecki <maciej.przybecki@gmail.com>, 2013-2014
# Piotr Kwiecinski <pkwiecin@adbrand.pl>, 2013
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-15 01:54-0400\n"
-"PO-Revision-Date: 2014-06-15 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 10:51+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -225,7 +225,7 @@ msgstr "lat temu"
#: js/lostpassword.js:3 lostpassword/controller/lostcontroller.php:175
msgid "Couldn't send reset email. Please contact your administrator."
-msgstr ""
+msgstr "Nie mogę wysłać maila resetującego. Skontaktuj się z administratorem."
#: js/lostpassword.js:5
msgid ""
@@ -244,7 +244,7 @@ msgstr ""
#: js/lostpassword.js:10
msgid "I know what I'm doing"
-msgstr ""
+msgstr "Wiem co robię"
#: js/lostpassword.js:13 lostpassword/templates/resetpassword.php:9
msgid "Reset password"
@@ -252,78 +252,78 @@ msgstr "Zresetuj hasło"
#: js/lostpassword.js:16
msgid "Password can not be changed. Please contact your administrator."
-msgstr ""
+msgstr "Hasło nie może zostać zmienione. Skontaktuj się z administratorem."
-#: js/oc-dialogs.js:109 js/oc-dialogs.js:250
+#: js/oc-dialogs.js:109 js/oc-dialogs.js:257
msgid "Yes"
msgstr "Tak"
-#: js/oc-dialogs.js:119 js/oc-dialogs.js:260
+#: js/oc-dialogs.js:119 js/oc-dialogs.js:267
msgid "No"
msgstr "Nie"
-#: js/oc-dialogs.js:198
+#: js/oc-dialogs.js:204
msgid "Choose"
msgstr "Wybierz"
-#: js/oc-dialogs.js:224
+#: js/oc-dialogs.js:231
msgid "Error loading file picker template: {error}"
msgstr "Błąd podczas ładowania pliku wybranego szablonu: {error}"
-#: js/oc-dialogs.js:277
+#: js/oc-dialogs.js:284
msgid "Ok"
msgstr "OK"
-#: js/oc-dialogs.js:297
+#: js/oc-dialogs.js:304
msgid "Error loading message template: {error}"
msgstr "Błąd podczas ładowania szablonu wiadomości: {error}"
-#: js/oc-dialogs.js:425
+#: js/oc-dialogs.js:432
msgid "{count} file conflict"
msgid_plural "{count} file conflicts"
msgstr[0] "{count} konfliktów plików"
msgstr[1] "{count} konfliktów plików"
msgstr[2] "{count} konfliktów plików"
-#: js/oc-dialogs.js:439
+#: js/oc-dialogs.js:446
msgid "One file conflict"
msgstr "Konflikt pliku"
-#: js/oc-dialogs.js:445
+#: js/oc-dialogs.js:452
msgid "New Files"
msgstr "Nowe pliki"
-#: js/oc-dialogs.js:446
+#: js/oc-dialogs.js:453
msgid "Already existing files"
msgstr "Już istniejące pliki"
-#: js/oc-dialogs.js:448
+#: js/oc-dialogs.js:455
msgid "Which files do you want to keep?"
msgstr "Które pliki chcesz zachować?"
-#: js/oc-dialogs.js:449
+#: js/oc-dialogs.js:456
msgid ""
"If you select both versions, the copied file will have a number added to its"
" name."
msgstr "Jeśli wybierzesz obie wersje, skopiowany plik będzie miał dodany numerek w nazwie"
-#: js/oc-dialogs.js:457
+#: js/oc-dialogs.js:464
msgid "Cancel"
msgstr "Anuluj"
-#: js/oc-dialogs.js:467
+#: js/oc-dialogs.js:474
msgid "Continue"
msgstr "Kontynuuj "
-#: js/oc-dialogs.js:514 js/oc-dialogs.js:527
+#: js/oc-dialogs.js:521 js/oc-dialogs.js:534
msgid "(all selected)"
msgstr "(wszystkie zaznaczone)"
-#: js/oc-dialogs.js:517 js/oc-dialogs.js:531
+#: js/oc-dialogs.js:524 js/oc-dialogs.js:538
msgid "({count} selected)"
msgstr "({count} zaznaczonych)"
-#: js/oc-dialogs.js:539
+#: js/oc-dialogs.js:546
msgid "Error loading file exists template"
msgstr "Błąd podczas ładowania szablonu istniejącego pliku"
@@ -555,17 +555,17 @@ msgstr "Aktualizacji zakończyła się powodzeniem. Przekierowuję do ownCloud."
#: lostpassword/controller/lostcontroller.php:110
msgid "Couldn't reset password because the token is invalid"
-msgstr ""
+msgstr "Nie można zresetować hasła, ponieważ token jest niepoprawny"
#: lostpassword/controller/lostcontroller.php:136
msgid "Couldn't send reset email. Please make sure your username is correct."
-msgstr ""
+msgstr "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna."
#: lostpassword/controller/lostcontroller.php:151
msgid ""
"Couldn't send reset email because there is no email address for this "
"username. Please contact your administrator."
-msgstr ""
+msgstr "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika lub adres email jest poprawny. Skontaktuj się z administratorem."
#: lostpassword/controller/lostcontroller.php:168
#, php-format
@@ -608,7 +608,7 @@ msgstr "Nowe hasło"
#: lostpassword/templates/resetpassword.php:6
msgid "New Password"
-msgstr ""
+msgstr "Nowe hasło"
#: setup/controller.php:140
#, php-format
@@ -836,7 +836,7 @@ msgstr "Skontaktuj się z administratorem"
#: templates/login.php:50
msgid "Forgot your password? Reset it!"
-msgstr ""
+msgstr "Nie pamiętasz hasła? Zresetuj je!"
#: templates/login.php:55
msgid "remember"
diff --git a/l10n/pl/files_encryption.po b/l10n/pl/files_encryption.po
index 9bd504c7f5f..22cbbde7d3f 100644
--- a/l10n/pl/files_encryption.po
+++ b/l10n/pl/files_encryption.po
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2013
+# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2013-2014
# Krzysztof Łojowski <maxxxrally@gmail.com>, 2014
# Maciej Przybecki <maciej.przybecki@gmail.com>, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-14 01:54-0400\n"
-"PO-Revision-Date: 2014-06-14 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 10:51+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -109,7 +109,7 @@ msgstr "Trwa szyfrowanie początkowe...Spróbuj ponownie."
#: templates/invalid_private_key.php:8
#, php-format
msgid "Go directly to your %spersonal settings%s."
-msgstr ""
+msgstr "Przejdź bezpośrednio do %spersonal settings%s."
#: templates/settings-admin.php:2 templates/settings-personal.php:2
msgid "Encryption"
diff --git a/l10n/pl/files_sharing.po b/l10n/pl/files_sharing.po
index f07fe817058..36c641b7ac5 100644
--- a/l10n/pl/files_sharing.po
+++ b/l10n/pl/files_sharing.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2013
+# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2013-2014
# Maciej Przybecki <maciej.przybecki@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 06:12+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 10:51+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,17 +25,17 @@ msgstr ""
#: ajax/external.php:50
msgid "Couldn't add remote share"
-msgstr ""
+msgstr "Nie można dodać zdalnego folderu"
-#: appinfo/app.php:46 js/app.js:34
+#: appinfo/app.php:39 js/app.js:34
msgid "Shared with you"
msgstr "Współdzielony z Tobą"
-#: appinfo/app.php:55 js/app.js:53
+#: appinfo/app.php:48 js/app.js:53
msgid "Shared with others"
msgstr "Współdzielony z innymi"
-#: appinfo/app.php:64 js/app.js:72
+#: appinfo/app.php:57 js/app.js:72
msgid "Shared by link"
msgstr "Współdzielony linkiem"
@@ -51,17 +51,17 @@ msgstr "Nie współdzielisz jeszcze żadnych plików."
msgid "You haven't shared any files by link yet."
msgstr "Nie współdzielisz jeszcze żadnych plików linkiem"
-#: js/external.js:43 js/external.js:46
+#: js/external.js:45 js/external.js:48
msgid "Add {name} from {owner}@{remote}"
-msgstr ""
+msgstr "Dodaj {name} z {owner}@{remote}"
#: js/public.js:200
msgid "No ownCloud installation found at {remote}"
-msgstr ""
+msgstr "Nie znaleziono instalacji ownCloud na {remote}"
#: js/public.js:201
msgid "Invalid ownCloud url"
-msgstr ""
+msgstr "Błędny adres URL"
#: js/share.js:60
msgid "Shared by {owner}"
@@ -117,11 +117,11 @@ msgstr "Aby uzyskać więcej informacji proszę poprosić osobę, która wysła
#: templates/public.php:20
msgid "Save to ownCloud"
-msgstr ""
+msgstr "Zapis do ownCloud"
#: templates/public.php:22
msgid "example.com/owncloud"
-msgstr ""
+msgstr "mojastrona.pl/owncloud"
#: templates/public.php:23
msgid "Save"
@@ -142,7 +142,7 @@ msgstr "Bezpośredni link"
#: templates/settings-admin.php:3
msgid "File Sharing"
-msgstr ""
+msgstr "Udostępnione pliki"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
@@ -150,4 +150,4 @@ msgstr ""
#: templates/settings-admin.php:11
msgid "Allow users to mount public link shares"
-msgstr ""
+msgstr "Zezwalaj użytkownikom na montowanie publicznych linków"
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index 18b29de111a..b5aa745b96d 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-17 01:54-0400\n"
-"PO-Revision-Date: 2014-06-17 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 10:41+0000\n"
+"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -51,15 +51,15 @@ msgstr "E-mail wysłany"
msgid "You need to set your user email before being able to send test emails."
msgstr "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe."
-#: admin/controller.php:116 templates/admin.php:350
+#: admin/controller.php:116 templates/admin.php:337
msgid "Send mode"
msgstr "Tryb wysyłki"
-#: admin/controller.php:118 templates/admin.php:363 templates/personal.php:144
+#: admin/controller.php:118 templates/admin.php:350 templates/personal.php:144
msgid "Encryption"
msgstr "Szyfrowanie"
-#: admin/controller.php:120 templates/admin.php:387
+#: admin/controller.php:120 templates/admin.php:374
msgid "Authentication method"
msgstr "Metoda autentykacji"
@@ -114,7 +114,7 @@ msgstr "Nie można trwale usunąć Twoich kluczy szyfrujących, proszę sprawdź
#: ajax/installapp.php:18 ajax/uninstallapp.php:18
msgid "Couldn't remove app."
-msgstr ""
+msgstr "Nie można usunąć aplikacji."
#: ajax/lostpassword.php:12
msgid "Email saved"
@@ -197,7 +197,7 @@ msgstr "Zaplecze nie obsługuje zmiany hasła, ale klucz szyfrowania użytkownik
msgid "Unable to change password"
msgstr "Nie można zmienić hasła"
-#: js/admin.js:126
+#: js/admin.js:127
msgid "Sending..."
msgstr "Wysyłam..."
@@ -215,7 +215,7 @@ msgstr "Aktualizacja do {appversion}"
#: js/apps.js:90
msgid "Uninstall App"
-msgstr ""
+msgstr "Odinstaluj aplikację"
#: js/apps.js:96 js/apps.js:158 js/apps.js:191
msgid "Disable"
@@ -259,15 +259,15 @@ msgstr "Zaktualizowano"
#: js/apps.js:233
msgid "Uninstalling ...."
-msgstr ""
+msgstr "Odinstalowywanie...."
#: js/apps.js:236
msgid "Error while uninstalling app"
-msgstr ""
+msgstr "Błąd przy odinstalowywaniu aplikacji"
#: js/apps.js:237 templates/apps.php:56
msgid "Uninstall"
-msgstr ""
+msgstr "Odinstaluj"
#: js/personal.js:256
msgid "Select a profile picture"
@@ -321,11 +321,11 @@ msgstr "Należy podać prawidłową nazwę grupy"
msgid "deleted {groupName}"
msgstr "usunięto {groupName}"
-#: js/users/groups.js:206 js/users/users.js:255
+#: js/users/groups.js:206 js/users/users.js:265
msgid "undo"
msgstr "cofnij"
-#: js/users/users.js:37 templates/admin.php:302
+#: js/users/users.js:37 templates/admin.php:292
#: templates/users/part.createuser.php:12 templates/users/part.userlist.php:10
#: templates/users/part.userlist.php:41
msgid "Groups"
@@ -336,36 +336,36 @@ msgstr "Grupy"
msgid "Group Admin"
msgstr "Administrator grupy"
-#: js/users/users.js:63 templates/users/part.grouplist.php:44
+#: js/users/users.js:63 templates/users/part.grouplist.php:46
#: templates/users/part.userlist.php:108
msgid "Delete"
msgstr "Usuń"
-#: js/users/users.js:84 templates/users/part.userlist.php:98
+#: js/users/users.js:85 templates/users/part.userlist.php:98
msgid "never"
msgstr "nigdy"
-#: js/users/users.js:254
+#: js/users/users.js:264
msgid "deleted {userName}"
msgstr "usunięto {userName}"
-#: js/users/users.js:371
+#: js/users/users.js:381
msgid "add group"
msgstr "dodaj grupę"
-#: js/users/users.js:568
+#: js/users/users.js:578
msgid "A valid username must be provided"
msgstr "Należy podać prawidłową nazwę użytkownika"
-#: js/users/users.js:569 js/users/users.js:575 js/users/users.js:590
+#: js/users/users.js:579 js/users/users.js:585 js/users/users.js:600
msgid "Error creating user"
msgstr "Błąd podczas tworzenia użytkownika"
-#: js/users/users.js:574
+#: js/users/users.js:584
msgid "A valid password must be provided"
msgstr "Należy podać prawidłowe hasło"
-#: js/users/users.js:598
+#: js/users/users.js:608
msgid "Warning: Home directory for user \"{user}\" already exists"
msgstr "Ostrzeżenie: Katalog domowy dla użytkownika \"{user}\" już istnieje"
@@ -568,23 +568,23 @@ msgstr "Użyj systemowego cron-a do uruchamiania cron.php raz na 15 minut."
msgid "Sharing"
msgstr "Udostępnianie"
-#: templates/admin.php:240
+#: templates/admin.php:238
msgid "Allow apps to use the Share API"
msgstr "Zezwalaj aplikacjom na korzystanie z API udostępniania"
-#: templates/admin.php:247
+#: templates/admin.php:243
msgid "Allow users to share via link"
msgstr "Pozwól użytkownikom współdzielić przez link"
-#: templates/admin.php:251
+#: templates/admin.php:249
msgid "Enforce password protection"
msgstr "Wymuś zabezpieczenie hasłem"
-#: templates/admin.php:254
+#: templates/admin.php:252
msgid "Allow public uploads"
msgstr "Pozwól na publiczne wczytywanie"
-#: templates/admin.php:258
+#: templates/admin.php:256
msgid "Set default expiration date"
msgstr "Ustaw domyślną datę wygaśnięcia"
@@ -600,116 +600,116 @@ msgstr "dniach"
msgid "Enforce expiration date"
msgstr "Wymuś datę wygaśnięcia"
-#: templates/admin.php:276
+#: templates/admin.php:271
msgid "Allow resharing"
msgstr "Zezwalaj na ponowne udostępnianie"
-#: templates/admin.php:283
+#: templates/admin.php:276
msgid "Restrict users to only share with users in their groups"
msgstr "Ogranicz użytkowników do współdzielenia wyłącznie pomiędzy użytkownikami swoich grup"
-#: templates/admin.php:290
+#: templates/admin.php:281
msgid "Allow users to send mail notification for shared files"
msgstr "Zezwól użytkownikom na wysyłanie powiadomień email dla udostępnionych plików"
-#: templates/admin.php:297
+#: templates/admin.php:286
msgid "Exclude groups from sharing"
msgstr "Wyklucz grupy z udostępniania"
-#: templates/admin.php:308
+#: templates/admin.php:298
msgid ""
"These groups will still be able to receive shares, but not to initiate them."
msgstr "Grupy te nadal będą mogli otrzymywać udostępnione udziały, ale nie do ich inicjowania."
-#: templates/admin.php:316
+#: templates/admin.php:303
msgid "Security"
msgstr "Bezpieczeństwo"
-#: templates/admin.php:327
+#: templates/admin.php:314
msgid "Enforce HTTPS"
msgstr "Wymuś HTTPS"
-#: templates/admin.php:329
+#: templates/admin.php:316
#, php-format
msgid "Forces the clients to connect to %s via an encrypted connection."
msgstr "Wymusza na klientach na łączenie się %s za pośrednictwem połączenia szyfrowanego."
-#: templates/admin.php:335
+#: templates/admin.php:322
#, php-format
msgid ""
"Please connect to your %s via HTTPS to enable or disable the SSL "
"enforcement."
msgstr "Proszę połącz się do twojego %s za pośrednictwem protokołu HTTPS, aby włączyć lub wyłączyć stosowanie protokołu SSL."
-#: templates/admin.php:345
+#: templates/admin.php:332
msgid "Email Server"
msgstr "Serwer pocztowy"
-#: templates/admin.php:347
+#: templates/admin.php:334
msgid "This is used for sending out notifications."
msgstr "To jest używane do wysyłania powiadomień"
-#: templates/admin.php:378
+#: templates/admin.php:365
msgid "From address"
msgstr "Z adresu"
-#: templates/admin.php:379
+#: templates/admin.php:366
msgid "mail"
msgstr "mail"
-#: templates/admin.php:400
+#: templates/admin.php:387
msgid "Authentication required"
msgstr "Wymagana autoryzacja"
-#: templates/admin.php:404
+#: templates/admin.php:391
msgid "Server address"
msgstr "Adres Serwera"
-#: templates/admin.php:408
+#: templates/admin.php:395
msgid "Port"
msgstr "Port"
-#: templates/admin.php:413
+#: templates/admin.php:400
msgid "Credentials"
msgstr "Poświadczenia"
-#: templates/admin.php:414
+#: templates/admin.php:401
msgid "SMTP Username"
msgstr "Użytkownik SMTP"
-#: templates/admin.php:417
+#: templates/admin.php:404
msgid "SMTP Password"
msgstr "Hasło SMTP"
-#: templates/admin.php:421
+#: templates/admin.php:408
msgid "Test email settings"
msgstr "Ustawienia testowej wiadomości"
-#: templates/admin.php:422
+#: templates/admin.php:409
msgid "Send email"
msgstr "Wyślij email"
-#: templates/admin.php:427
+#: templates/admin.php:414
msgid "Log"
msgstr "Logi"
-#: templates/admin.php:428
+#: templates/admin.php:415
msgid "Log level"
msgstr "Poziom logów"
-#: templates/admin.php:460
+#: templates/admin.php:447
msgid "More"
msgstr "Więcej"
-#: templates/admin.php:461
+#: templates/admin.php:448
msgid "Less"
msgstr "Mniej"
-#: templates/admin.php:467 templates/personal.php:196
+#: templates/admin.php:454 templates/personal.php:196
msgid "Version"
msgstr "Wersja"
-#: templates/admin.php:471 templates/personal.php:199
+#: templates/admin.php:458 templates/personal.php:199
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -933,7 +933,7 @@ msgstr "Grupa"
msgid "Everyone"
msgstr "Wszyscy"
-#: templates/users/part.grouplist.php:29
+#: templates/users/part.grouplist.php:31
msgid "Admins"
msgstr "Administratorzy"
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index db5a03cad61..03164e44d25 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-21 01:54-0400\n"
-"PO-Revision-Date: 2014-06-20 23:50+0000\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 15:01+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index 4583d8697ad..6c1890c0248 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 10:21+0000\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 15:21+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -46,7 +46,7 @@ msgid ""
"allowed."
msgstr "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos."
-#: ajax/newfile.php:76 ajax/newfolder.php:35 ajax/upload.php:157
+#: ajax/newfile.php:76 ajax/newfolder.php:35 ajax/upload.php:159
#: lib/app.php:77
msgid "The target folder has been moved or deleted."
msgstr "A pasta de destino foi movida ou excluída."
@@ -92,54 +92,54 @@ msgstr "Impossível configurar o diretório de upload"
msgid "Invalid Token"
msgstr "Token inválido"
-#: ajax/upload.php:75
+#: ajax/upload.php:77
msgid "No file was uploaded. Unknown error"
msgstr "Nenhum arquivo foi enviado. Erro desconhecido"
-#: ajax/upload.php:82
+#: ajax/upload.php:84
msgid "There is no error, the file uploaded with success"
msgstr "Sem erros, o arquivo foi enviado com sucesso"
-#: ajax/upload.php:83
+#: ajax/upload.php:85
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "O arquivo enviado excede a diretiva upload_max_filesize no php.ini: "
-#: ajax/upload.php:85
+#: ajax/upload.php:87
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "O arquivo carregado excede o argumento MAX_FILE_SIZE especificado no formulário HTML"
-#: ajax/upload.php:86
+#: ajax/upload.php:88
msgid "The uploaded file was only partially uploaded"
msgstr "O arquivo foi parcialmente enviado"
-#: ajax/upload.php:87
+#: ajax/upload.php:89
msgid "No file was uploaded"
msgstr "Nenhum arquivo enviado"
-#: ajax/upload.php:88
+#: ajax/upload.php:90
msgid "Missing a temporary folder"
msgstr "Pasta temporária não encontrada"
-#: ajax/upload.php:89
+#: ajax/upload.php:91
msgid "Failed to write to disk"
msgstr "Falha ao escrever no disco"
-#: ajax/upload.php:109
+#: ajax/upload.php:111
msgid "Not enough storage available"
msgstr "Espaço de armazenamento insuficiente"
-#: ajax/upload.php:171
+#: ajax/upload.php:173
msgid "Upload failed. Could not find uploaded file"
msgstr "Falha no envio. Não foi possível encontrar o arquivo enviado"
-#: ajax/upload.php:181
+#: ajax/upload.php:183
msgid "Upload failed. Could not get file info."
msgstr "Falha no envio. Não foi possível obter informações do arquivo."
-#: ajax/upload.php:196
+#: ajax/upload.php:198
msgid "Invalid directory."
msgstr "Diretório inválido."
@@ -181,7 +181,7 @@ msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do
msgid "URL cannot be empty"
msgstr "URL não pode estar vazia"
-#: js/file-upload.js:559 js/filelist.js:1190
+#: js/file-upload.js:559 js/filelist.js:1192
msgid "{new_name} already exists"
msgstr "{new_name} já existe"
@@ -197,19 +197,19 @@ msgstr "Não foi possível criar a pasta"
msgid "Error fetching URL"
msgstr "Erro ao buscar URL"
-#: js/fileactions.js:211
+#: js/fileactions.js:213
msgid "Share"
msgstr "Compartilhar"
-#: js/fileactions.js:224
+#: js/fileactions.js:226
msgid "Delete permanently"
msgstr "Excluir permanentemente"
-#: js/fileactions.js:226 templates/list.php:78 templates/list.php:79
+#: js/fileactions.js:228 templates/list.php:78 templates/list.php:79
msgid "Delete"
msgstr "Excluir"
-#: js/fileactions.js:262
+#: js/fileactions.js:264
msgid "Rename"
msgstr "Renomear"
@@ -219,55 +219,55 @@ msgid ""
"big."
msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes."
-#: js/filelist.js:621 js/filelist.js:1693
+#: js/filelist.js:623 js/filelist.js:1713
msgid "Pending"
msgstr "Pendente"
-#: js/filelist.js:1141
+#: js/filelist.js:1143
msgid "Error moving file."
msgstr "Erro movendo o arquivo."
-#: js/filelist.js:1149
+#: js/filelist.js:1151
msgid "Error moving file"
msgstr "Erro movendo o arquivo"
-#: js/filelist.js:1149
+#: js/filelist.js:1151
msgid "Error"
msgstr "Erro"
-#: js/filelist.js:1227
+#: js/filelist.js:1240
msgid "Could not rename file"
msgstr "Não foi possível renomear o arquivo"
-#: js/filelist.js:1348
+#: js/filelist.js:1358
msgid "Error deleting file."
msgstr "Erro eliminando o arquivo."
-#: js/filelist.js:1451 templates/list.php:62
+#: js/filelist.js:1461 templates/list.php:62
msgid "Name"
msgstr "Nome"
-#: js/filelist.js:1452 templates/list.php:73
+#: js/filelist.js:1462 templates/list.php:73
msgid "Size"
msgstr "Tamanho"
-#: js/filelist.js:1453 templates/list.php:76
+#: js/filelist.js:1463 templates/list.php:76
msgid "Modified"
msgstr "Modificado"
-#: js/filelist.js:1463 js/filesummary.js:141 js/filesummary.js:168
+#: js/filelist.js:1473 js/filesummary.js:141 js/filesummary.js:168
msgid "%n folder"
msgid_plural "%n folders"
msgstr[0] "%n pasta"
msgstr[1] "%n pastas"
-#: js/filelist.js:1469 js/filesummary.js:142 js/filesummary.js:169
+#: js/filelist.js:1479 js/filesummary.js:142 js/filesummary.js:169
msgid "%n file"
msgid_plural "%n files"
msgstr[0] "%n arquivo"
msgstr[1] "%n arquivos"
-#: js/filelist.js:1601 js/filelist.js:1640
+#: js/filelist.js:1606 js/filelist.js:1645
msgid "Uploading %n file"
msgid_plural "Uploading %n files"
msgstr[0] "Enviando %n arquivo"
diff --git a/l10n/pt_BR/files_external.po b/l10n/pt_BR/files_external.po
index 290d177366e..617cffeae37 100644
--- a/l10n/pt_BR/files_external.po
+++ b/l10n/pt_BR/files_external.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-08 01:54-0400\n"
-"PO-Revision-Date: 2014-06-07 15:50+0000\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 15:01+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -210,7 +210,7 @@ msgstr "Pessoal"
msgid "System"
msgstr "Sistema"
-#: js/settings.js:318 js/settings.js:325
+#: js/settings.js:320 js/settings.js:327
msgid "Saved"
msgstr "Salvo"
diff --git a/l10n/pt_BR/files_sharing.po b/l10n/pt_BR/files_sharing.po
index 4cc539e8d4d..b825624bf88 100644
--- a/l10n/pt_BR/files_sharing.po
+++ b/l10n/pt_BR/files_sharing.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 10:21+0000\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 15:21+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -26,15 +26,15 @@ msgstr "Compartilhamento de servidor para servidor não está habilitado no serv
msgid "Couldn't add remote share"
msgstr "Não foi possível adicionar compartilhamento remoto"
-#: appinfo/app.php:46 js/app.js:34
+#: appinfo/app.php:39 js/app.js:34
msgid "Shared with you"
msgstr "Compartilhado com você"
-#: appinfo/app.php:55 js/app.js:53
+#: appinfo/app.php:48 js/app.js:53
msgid "Shared with others"
msgstr "Compartilhados com outros"
-#: appinfo/app.php:64 js/app.js:72
+#: appinfo/app.php:57 js/app.js:72
msgid "Shared by link"
msgstr "Compartilhado por link"
@@ -50,7 +50,7 @@ msgstr "Você ainda não compartilhou nenhum arquivo."
msgid "You haven't shared any files by link yet."
msgstr "Você ainda não compartilhou nenhum arquivo por link."
-#: js/external.js:43 js/external.js:46
+#: js/external.js:45 js/external.js:48
msgid "Add {name} from {owner}@{remote}"
msgstr "Adicionar {name} de {owner}@{remote}"
diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po
index e76556e6585..969dd3068af 100644
--- a/l10n/pt_BR/lib.po
+++ b/l10n/pt_BR/lib.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-21 01:54-0400\n"
-"PO-Revision-Date: 2014-06-20 23:56+0000\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 15:01+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -19,50 +19,50 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: base.php:678
+#: base.php:673
msgid "You are accessing the server from an untrusted domain."
msgstr "Você está acessando o servidor a partir de um domínio não confiável."
-#: base.php:679
+#: base.php:674
msgid ""
"Please contact your administrator. If you are an administrator of this "
"instance, configure the \"trusted_domain\" setting in config/config.php. An "
"example configuration is provided in config/config.sample.php."
msgstr "Por favor, contate o administrador. Se você é um administrador desta instância, configurre o \"trusted_domain\" em config/config.php. Um exemplo de configuração é fornecido em config/config.sample.php."
-#: private/app.php:361
+#: private/app.php:366
msgid "Help"
msgstr "Ajuda"
-#: private/app.php:374
+#: private/app.php:379
msgid "Personal"
msgstr "Pessoal"
-#: private/app.php:385
+#: private/app.php:390
msgid "Settings"
msgstr "Configurações"
-#: private/app.php:397
+#: private/app.php:402
msgid "Users"
msgstr "Usuários"
-#: private/app.php:410
+#: private/app.php:415
msgid "Admin"
msgstr "Admin"
-#: private/app.php:978
+#: private/app.php:983
#, php-format
msgid "Failed to upgrade \"%s\"."
msgstr "Falha na atualização de \"%s\"."
-#: private/app.php:1135
+#: private/app.php:1140
#, php-format
msgid ""
"App \\\"%s\\\" can't be installed because it is not compatible with this "
"version of ownCloud."
msgstr "Aplicação \\\"%s\\\" não pode ser instalada porque não é compatível com esta versão do ownCloud."
-#: private/app.php:1147
+#: private/app.php:1152
msgid "No app name specified"
msgstr "O nome do aplicativo não foi especificado."
@@ -87,48 +87,48 @@ msgstr "Diretório App já existe"
msgid "Can't create app folder. Please fix permissions. %s"
msgstr "Não é possível criar pasta app. Corrija as permissões. %s"
-#: private/installer.php:231
+#: private/installer.php:235
msgid "No source specified when installing app"
msgstr "Nenhuma fonte foi especificada enquanto instalava o aplicativo"
-#: private/installer.php:238
+#: private/installer.php:242
msgid "No href specified when installing app from http"
msgstr "Nenhuma href foi especificada enquanto instalava o aplicativo de http"
-#: private/installer.php:243
+#: private/installer.php:247
msgid "No path specified when installing app from local file"
msgstr "Nenhum caminho foi especificado enquanto instalava o aplicativo do arquivo local"
-#: private/installer.php:257
+#: private/installer.php:261
#, php-format
msgid "Archives of type %s are not supported"
msgstr "Arquivos do tipo %s não são suportados"
-#: private/installer.php:271
+#: private/installer.php:275
msgid "Failed to open archive when installing app"
msgstr "Falha para abrir o arquivo enquanto instalava o aplicativo"
-#: private/installer.php:309
+#: private/installer.php:313
msgid "App does not provide an info.xml file"
msgstr "O aplicativo não fornece um arquivo info.xml"
-#: private/installer.php:315
+#: private/installer.php:319
msgid "App can't be installed because of not allowed code in the App"
msgstr "O aplicativo não pode ser instalado por causa do código não permitido no Aplivativo"
-#: private/installer.php:321
+#: private/installer.php:325
msgid ""
"App can't be installed because it is not compatible with this version of "
"ownCloud"
msgstr "O aplicativo não pode ser instalado porque não é compatível com esta versão do ownCloud"
-#: private/installer.php:327
+#: private/installer.php:331
msgid ""
"App can't be installed because it contains the <shipped>true</shipped> tag "
"which is not allowed for non shipped apps"
msgstr "O aplicativo não pode ser instalado porque ele contém a marca <shipped>verdadeiro</shipped> que não é permitido para aplicações não embarcadas"
-#: private/installer.php:340
+#: private/installer.php:344
msgid ""
"App can't be installed because the version in info.xml/version is not the "
"same as the version reported from the app store"
@@ -246,13 +246,13 @@ msgstr "Defina um nome do usuário administrador."
msgid "Set an admin password."
msgstr "Defina uma senha de administrador."
-#: private/setup.php:164
+#: private/setup.php:170
msgid ""
"Your web server is not yet properly setup to allow files synchronization "
"because the WebDAV interface seems to be broken."
msgstr "Seu servidor web não está configurado corretamente para permitir sincronização de arquivos porque a interface WebDAV parece não estar funcionando."
-#: private/setup.php:165
+#: private/setup.php:171
#, php-format
msgid "Please double check the <a href='%s'>installation guides</a>."
msgstr "Por favor, confira os <a href='%s'>guias de instalação</a>."
diff --git a/l10n/pt_BR/user_ldap.po b/l10n/pt_BR/user_ldap.po
index c94a1ae94c1..4d6af9e24e5 100644
--- a/l10n/pt_BR/user_ldap.po
+++ b/l10n/pt_BR/user_ldap.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 10:21+0000\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 15:21+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -70,7 +70,7 @@ msgstr "Tomar parámetros de recente configuração de servidor?"
#: js/settings.js:84
msgid "Keep settings?"
-msgstr "Manter ajustes?"
+msgstr "Manter configurações?"
#: js/settings.js:93
msgid "{nthServer}. Server"
@@ -144,28 +144,28 @@ msgstr "Você quer realmente deletar as atuais Configurações de Servidor?"
msgid "Confirm Deletion"
msgstr "Confirmar Exclusão"
-#: lib/wizard.php:83 lib/wizard.php:97
+#: lib/wizard.php:97 lib/wizard.php:112
#, php-format
msgid "%s group found"
msgid_plural "%s groups found"
msgstr[0] "grupo% s encontrado"
msgstr[1] "grupos% s encontrado"
-#: lib/wizard.php:130
+#: lib/wizard.php:126
#, php-format
msgid "%s user found"
msgid_plural "%s users found"
msgstr[0] "usuário %s encontrado"
msgstr[1] "usuários %s encontrados"
-#: lib/wizard.php:825 lib/wizard.php:837
-msgid "Invalid Host"
-msgstr "Host inválido"
-
-#: lib/wizard.php:1025
+#: lib/wizard.php:317 lib/wizard.php:1051
msgid "Could not find the desired feature"
msgstr "Não foi possível encontrar a função desejada"
+#: lib/wizard.php:858 lib/wizard.php:870
+msgid "Invalid Host"
+msgstr "Host Inválido"
+
#: settings.php:52
msgid "Server"
msgstr "Servidor"
@@ -184,7 +184,7 @@ msgstr "Filtro de Grupo"
#: templates/part.settingcontrols.php:2
msgid "Save"
-msgstr "Guardar"
+msgstr "Salvar"
#: templates/part.settingcontrols.php:4
msgid "Test Configuration"
@@ -207,7 +207,7 @@ msgstr "apenas essas classes de objetos:"
#: templates/part.wizard-groupfilter.php:17
#: templates/part.wizard-userfilter.php:17
msgid "only from those groups:"
-msgstr "apenas a partir dos grupos:"
+msgstr "apenas desses grupos:"
#: templates/part.wizard-groupfilter.php:25
#: templates/part.wizard-loginfilter.php:32
@@ -245,14 +245,14 @@ msgstr "LDAP Endereço de E-mail:"
#: templates/part.wizard-loginfilter.php:24
msgid "Other Attributes:"
-msgstr "Outros atributos:"
+msgstr "Outros Atributos:"
#: templates/part.wizard-loginfilter.php:38
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action. Example: \"uid=%%uid\""
-msgstr "Define o filtro a ser aplicado, o login é feito. %%uid substitui o nome do usuário na ação de login. Exemplo: \"uid=%%uid\""
+msgstr "Define o filtro a ser aplicado, quando o login for feito. %%uid substitui o nome do usuário na ação de login. Exemplo: \"uid=%%uid\""
#: templates/part.wizard-server.php:6
msgid "1. Server"
@@ -273,7 +273,7 @@ msgstr "Excluir Configuração"
#: templates/part.wizard-server.php:30
msgid "Host"
-msgstr "Servidor"
+msgstr "Host"
#: templates/part.wizard-server.php:31
msgid ""
@@ -361,7 +361,7 @@ msgstr "Configurações de Conexão"
#: templates/settings.php:22
msgid "Configuration Active"
-msgstr "Configuração ativa"
+msgstr "Configuração Ativa"
#: templates/settings.php:22
msgid "When unchecked, this configuration will be skipped."
@@ -369,7 +369,7 @@ msgstr "Quando não marcada, esta configuração será ignorada."
#: templates/settings.php:23
msgid "Backup (Replica) Host"
-msgstr "Servidor de Backup (Réplica)"
+msgstr "Host de Backup (Réplica)"
#: templates/settings.php:23
msgid ""
diff --git a/l10n/pt_BR/user_webdavauth.po b/l10n/pt_BR/user_webdavauth.po
index fee0bcf8295..f0bbdf1f424 100644
--- a/l10n/pt_BR/user_webdavauth.po
+++ b/l10n/pt_BR/user_webdavauth.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 10:20+0000\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
+"PO-Revision-Date: 2014-06-25 15:21+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
index 7aebbccef32..58342da183a 100644
--- a/l10n/sl/core.po
+++ b/l10n/sl/core.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-15 01:54-0400\n"
-"PO-Revision-Date: 2014-06-15 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 14:02+0000\n"
+"Last-Translator: Matej Urbančič <>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -163,7 +163,7 @@ msgstr "Slika"
#: js/js.js:593
msgid "Audio"
-msgstr ""
+msgstr "Zvok"
#: js/js.js:607
msgid "Saving..."
@@ -254,33 +254,33 @@ msgstr "Ponastavi geslo"
#: js/lostpassword.js:16
msgid "Password can not be changed. Please contact your administrator."
-msgstr ""
+msgstr "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom."
-#: js/oc-dialogs.js:109 js/oc-dialogs.js:250
+#: js/oc-dialogs.js:109 js/oc-dialogs.js:257
msgid "Yes"
msgstr "Da"
-#: js/oc-dialogs.js:119 js/oc-dialogs.js:260
+#: js/oc-dialogs.js:119 js/oc-dialogs.js:267
msgid "No"
msgstr "Ne"
-#: js/oc-dialogs.js:198
+#: js/oc-dialogs.js:204
msgid "Choose"
msgstr "Izbor"
-#: js/oc-dialogs.js:224
+#: js/oc-dialogs.js:231
msgid "Error loading file picker template: {error}"
msgstr "Napaka nalaganja predloge izbirnika datotek: {error}"
-#: js/oc-dialogs.js:277
+#: js/oc-dialogs.js:284
msgid "Ok"
msgstr "V redu"
-#: js/oc-dialogs.js:297
+#: js/oc-dialogs.js:304
msgid "Error loading message template: {error}"
msgstr "Napaka nalaganja predloge sporočil: {error}"
-#: js/oc-dialogs.js:425
+#: js/oc-dialogs.js:432
msgid "{count} file conflict"
msgid_plural "{count} file conflicts"
msgstr[0] "{count} spor datotek"
@@ -288,45 +288,45 @@ msgstr[1] "{count} spora datotek"
msgstr[2] "{count} spori datotek"
msgstr[3] "{count} sporov datotek"
-#: js/oc-dialogs.js:439
+#: js/oc-dialogs.js:446
msgid "One file conflict"
msgstr "En spor datotek"
-#: js/oc-dialogs.js:445
+#: js/oc-dialogs.js:452
msgid "New Files"
msgstr "Nove datoteke"
-#: js/oc-dialogs.js:446
+#: js/oc-dialogs.js:453
msgid "Already existing files"
msgstr "Obstoječe datoteke"
-#: js/oc-dialogs.js:448
+#: js/oc-dialogs.js:455
msgid "Which files do you want to keep?"
msgstr "Katare datoteke želite ohraniti?"
-#: js/oc-dialogs.js:449
+#: js/oc-dialogs.js:456
msgid ""
"If you select both versions, the copied file will have a number added to its"
" name."
msgstr "Če izberete obe različici, bo kopirani datoteki k imenu dodana številka."
-#: js/oc-dialogs.js:457
+#: js/oc-dialogs.js:464
msgid "Cancel"
msgstr "Prekliči"
-#: js/oc-dialogs.js:467
+#: js/oc-dialogs.js:474
msgid "Continue"
msgstr "Nadaljuj"
-#: js/oc-dialogs.js:514 js/oc-dialogs.js:527
+#: js/oc-dialogs.js:521 js/oc-dialogs.js:534
msgid "(all selected)"
msgstr "(vse izbrano)"
-#: js/oc-dialogs.js:517 js/oc-dialogs.js:531
+#: js/oc-dialogs.js:524 js/oc-dialogs.js:538
msgid "({count} selected)"
msgstr "({count} izbranih)"
-#: js/oc-dialogs.js:539
+#: js/oc-dialogs.js:546
msgid "Error loading file exists template"
msgstr "Napaka nalaganja predloge obstoječih datotek"
@@ -550,7 +550,7 @@ msgstr "Stran je treba ponovno naložiti"
#: js/update.js:52
msgid "The update was unsuccessful."
-msgstr ""
+msgstr "Posodobitev je spodletela"
#: js/update.js:61
msgid "The update was successful. Redirecting you to ownCloud now."
@@ -611,7 +611,7 @@ msgstr "Novo geslo"
#: lostpassword/templates/resetpassword.php:6
msgid "New Password"
-msgstr ""
+msgstr "Novo geslo"
#: setup/controller.php:140
#, php-format
@@ -890,7 +890,7 @@ msgstr ""
#: templates/update.admin.php:17
#, php-format
msgid "The theme %s has been disabled."
-msgstr ""
+msgstr "Tema %s je onemogočena za uporabo."
#: templates/update.admin.php:21
msgid ""
@@ -900,7 +900,7 @@ msgstr ""
#: templates/update.admin.php:23
msgid "Start update"
-msgstr ""
+msgstr "Začni posodobitev"
#: templates/update.user.php:3
msgid ""
diff --git a/l10n/sl/files.po b/l10n/sl/files.po
index e4ac751bda7..f868c1361eb 100644
--- a/l10n/sl/files.po
+++ b/l10n/sl/files.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 06:12+0000\n"
-"Last-Translator: Marko <marko.ambrozic@gmail.com>\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 14:02+0000\n"
+"Last-Translator: Matej Urbančič <>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -45,7 +45,7 @@ msgid ""
"allowed."
msgstr "Neveljavno ime; znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni."
-#: ajax/newfile.php:76 ajax/newfolder.php:35 ajax/upload.php:157
+#: ajax/newfile.php:76 ajax/newfolder.php:35 ajax/upload.php:159
#: lib/app.php:77
msgid "The target folder has been moved or deleted."
msgstr "Ciljna mapa je premaknjena ali izbrisana."
@@ -91,54 +91,54 @@ msgstr "Mapo, v katero boste prenašali dokumente, ni mogoče določiti"
msgid "Invalid Token"
msgstr "Neveljaven žeton"
-#: ajax/upload.php:75
+#: ajax/upload.php:77
msgid "No file was uploaded. Unknown error"
msgstr "Ni poslane datoteke. Neznana napaka."
-#: ajax/upload.php:82
+#: ajax/upload.php:84
msgid "There is no error, the file uploaded with success"
msgstr "Datoteka je uspešno naložena."
-#: ajax/upload.php:83
+#: ajax/upload.php:85
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Poslana datoteka presega dovoljeno velikost, ki je določena z možnostjo upload_max_filesize v datoteki php.ini:"
-#: ajax/upload.php:85
+#: ajax/upload.php:87
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Poslana datoteka presega velikost, ki jo določa parameter največje dovoljene velikosti v obrazcu HTML."
-#: ajax/upload.php:86
+#: ajax/upload.php:88
msgid "The uploaded file was only partially uploaded"
msgstr "Poslan je le del datoteke."
-#: ajax/upload.php:87
+#: ajax/upload.php:89
msgid "No file was uploaded"
msgstr "Ni poslane datoteke"
-#: ajax/upload.php:88
+#: ajax/upload.php:90
msgid "Missing a temporary folder"
msgstr "Manjka začasna mapa"
-#: ajax/upload.php:89
+#: ajax/upload.php:91
msgid "Failed to write to disk"
msgstr "Pisanje na disk je spodletelo"
-#: ajax/upload.php:109
+#: ajax/upload.php:111
msgid "Not enough storage available"
msgstr "Na voljo ni dovolj prostora"
-#: ajax/upload.php:171
+#: ajax/upload.php:173
msgid "Upload failed. Could not find uploaded file"
msgstr "Pošiljanje je spodletelo. Ni mogoče najti poslane datoteke."
-#: ajax/upload.php:181
+#: ajax/upload.php:183
msgid "Upload failed. Could not get file info."
msgstr "Pošiljanje je spodletelo. Ni mogoče pridobiti podrobnosti datoteke."
-#: ajax/upload.php:196
+#: ajax/upload.php:198
msgid "Invalid directory."
msgstr "Neveljavna mapa."
@@ -180,7 +180,7 @@ msgstr "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošilja
msgid "URL cannot be empty"
msgstr "Polje naslova URL ne sme biti prazno"
-#: js/file-upload.js:559 js/filelist.js:1190
+#: js/file-upload.js:559 js/filelist.js:1192
msgid "{new_name} already exists"
msgstr "{new_name} že obstaja"
@@ -196,19 +196,19 @@ msgstr "Ni mogoče ustvariti mape"
msgid "Error fetching URL"
msgstr "Napaka pridobivanja naslova URL"
-#: js/fileactions.js:211
+#: js/fileactions.js:213
msgid "Share"
msgstr "Souporaba"
-#: js/fileactions.js:224
+#: js/fileactions.js:226
msgid "Delete permanently"
msgstr "Izbriši dokončno"
-#: js/fileactions.js:226 templates/list.php:78 templates/list.php:79
+#: js/fileactions.js:228 templates/list.php:78 templates/list.php:79
msgid "Delete"
msgstr "Izbriši"
-#: js/fileactions.js:262
+#: js/fileactions.js:264
msgid "Rename"
msgstr "Preimenuj"
@@ -218,43 +218,43 @@ msgid ""
"big."
msgstr "Postopek priprave datoteke za prejem je lahko dolgotrajen, kadar je datoteka zelo velika."
-#: js/filelist.js:621 js/filelist.js:1693
+#: js/filelist.js:623 js/filelist.js:1713
msgid "Pending"
msgstr "V čakanju ..."
-#: js/filelist.js:1141
+#: js/filelist.js:1143
msgid "Error moving file."
msgstr "Napaka premikanja datoteke."
-#: js/filelist.js:1149
+#: js/filelist.js:1151
msgid "Error moving file"
msgstr "Napaka premikanja datoteke"
-#: js/filelist.js:1149
+#: js/filelist.js:1151
msgid "Error"
msgstr "Napaka"
-#: js/filelist.js:1227
+#: js/filelist.js:1240
msgid "Could not rename file"
msgstr "Ni mogoče preimenovati datoteke"
-#: js/filelist.js:1348
+#: js/filelist.js:1358
msgid "Error deleting file."
msgstr "Napaka brisanja datoteke."
-#: js/filelist.js:1451 templates/list.php:62
+#: js/filelist.js:1461 templates/list.php:62
msgid "Name"
msgstr "Ime"
-#: js/filelist.js:1452 templates/list.php:73
+#: js/filelist.js:1462 templates/list.php:73
msgid "Size"
msgstr "Velikost"
-#: js/filelist.js:1453 templates/list.php:76
+#: js/filelist.js:1463 templates/list.php:76
msgid "Modified"
msgstr "Spremenjeno"
-#: js/filelist.js:1463 js/filesummary.js:141 js/filesummary.js:168
+#: js/filelist.js:1473 js/filesummary.js:141 js/filesummary.js:168
msgid "%n folder"
msgid_plural "%n folders"
msgstr[0] "%n mapa"
@@ -262,7 +262,7 @@ msgstr[1] "%n mapi"
msgstr[2] "%n mape"
msgstr[3] "%n map"
-#: js/filelist.js:1469 js/filesummary.js:142 js/filesummary.js:169
+#: js/filelist.js:1479 js/filesummary.js:142 js/filesummary.js:169
msgid "%n file"
msgid_plural "%n files"
msgstr[0] "%n datoteka"
@@ -270,7 +270,7 @@ msgstr[1] "%n datoteki"
msgstr[2] "%n datoteke"
msgstr[3] "%n datotek"
-#: js/filelist.js:1601 js/filelist.js:1640
+#: js/filelist.js:1606 js/filelist.js:1645
msgid "Uploading %n file"
msgid_plural "Uploading %n files"
msgstr[0] "Posodabljanje %n datoteke"
@@ -348,7 +348,7 @@ msgstr "WebDAV"
msgid ""
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via "
"WebDAV</a>"
-msgstr "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek rpeko sistema WebDAV</a>."
+msgstr "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek peko sistema WebDAV</a>."
#: templates/list.php:5
msgid "New"
@@ -406,4 +406,4 @@ msgstr "Poteka preučevanje datotek, počakajte ..."
#: templates/list.php:102
msgid "Currently scanning"
-msgstr "Trenutno preverjam"
+msgstr "Poteka preverjanje"
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
index 95b11fc95c1..fdc995d6cad 100644
--- a/l10n/sl/settings.po
+++ b/l10n/sl/settings.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-17 01:54-0400\n"
-"PO-Revision-Date: 2014-06-17 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 14:02+0000\n"
+"Last-Translator: Matej Urbančič <>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -49,15 +49,15 @@ msgstr "Elektronska pošta je poslana"
msgid "You need to set your user email before being able to send test emails."
msgstr ""
-#: admin/controller.php:116 templates/admin.php:350
+#: admin/controller.php:116 templates/admin.php:337
msgid "Send mode"
msgstr "Način pošiljanja"
-#: admin/controller.php:118 templates/admin.php:363 templates/personal.php:144
+#: admin/controller.php:118 templates/admin.php:350 templates/personal.php:144
msgid "Encryption"
msgstr "Šifriranje"
-#: admin/controller.php:120 templates/admin.php:387
+#: admin/controller.php:120 templates/admin.php:374
msgid "Authentication method"
msgstr "Način overitve"
@@ -195,7 +195,7 @@ msgstr "Hrbtišče programa ne podpira spreminjanja gesla, je pa uspešno posodo
msgid "Unable to change password"
msgstr "Ni mogoče spremeniti gesla"
-#: js/admin.js:126
+#: js/admin.js:127
msgid "Sending..."
msgstr "Poteka pošiljanje ..."
@@ -265,7 +265,7 @@ msgstr ""
#: js/apps.js:237 templates/apps.php:56
msgid "Uninstall"
-msgstr ""
+msgstr "Odstrani namestitev"
#: js/personal.js:256
msgid "Select a profile picture"
@@ -319,11 +319,11 @@ msgstr ""
msgid "deleted {groupName}"
msgstr ""
-#: js/users/groups.js:206 js/users/users.js:255
+#: js/users/groups.js:206 js/users/users.js:265
msgid "undo"
msgstr "razveljavi"
-#: js/users/users.js:37 templates/admin.php:302
+#: js/users/users.js:37 templates/admin.php:292
#: templates/users/part.createuser.php:12 templates/users/part.userlist.php:10
#: templates/users/part.userlist.php:41
msgid "Groups"
@@ -334,36 +334,36 @@ msgstr "Skupine"
msgid "Group Admin"
msgstr "Skrbnik skupine"
-#: js/users/users.js:63 templates/users/part.grouplist.php:44
+#: js/users/users.js:63 templates/users/part.grouplist.php:46
#: templates/users/part.userlist.php:108
msgid "Delete"
msgstr "Izbriši"
-#: js/users/users.js:84 templates/users/part.userlist.php:98
+#: js/users/users.js:85 templates/users/part.userlist.php:98
msgid "never"
msgstr "nikoli"
-#: js/users/users.js:254
+#: js/users/users.js:264
msgid "deleted {userName}"
msgstr ""
-#: js/users/users.js:371
+#: js/users/users.js:381
msgid "add group"
msgstr "dodaj skupino"
-#: js/users/users.js:568
+#: js/users/users.js:578
msgid "A valid username must be provided"
msgstr "Navedeno mora biti veljavno uporabniško ime"
-#: js/users/users.js:569 js/users/users.js:575 js/users/users.js:590
+#: js/users/users.js:579 js/users/users.js:585 js/users/users.js:600
msgid "Error creating user"
msgstr "Napaka ustvarjanja uporabnika"
-#: js/users/users.js:574
+#: js/users/users.js:584
msgid "A valid password must be provided"
msgstr "Navedeno mora biti veljavno geslo"
-#: js/users/users.js:598
+#: js/users/users.js:608
msgid "Warning: Home directory for user \"{user}\" already exists"
msgstr "Opozorilo: osebna mapa uporabnika \"{user}\" že obstaja"
@@ -566,23 +566,23 @@ msgstr "Uporabi storitev periodičnih opravil za klic datoteke cron.php vsakih 1
msgid "Sharing"
msgstr "Souporaba"
-#: templates/admin.php:240
+#: templates/admin.php:238
msgid "Allow apps to use the Share API"
msgstr "Dovoli programom uporabo vmesnika API souporabe"
-#: templates/admin.php:247
+#: templates/admin.php:243
msgid "Allow users to share via link"
msgstr ""
-#: templates/admin.php:251
+#: templates/admin.php:249
msgid "Enforce password protection"
msgstr ""
-#: templates/admin.php:254
+#: templates/admin.php:252
msgid "Allow public uploads"
msgstr "Dovoli javno pošiljanje datotek v oblak"
-#: templates/admin.php:258
+#: templates/admin.php:256
msgid "Set default expiration date"
msgstr ""
@@ -598,116 +598,116 @@ msgstr ""
msgid "Enforce expiration date"
msgstr ""
-#: templates/admin.php:276
+#: templates/admin.php:271
msgid "Allow resharing"
msgstr "Dovoli nadaljnjo souporabo"
-#: templates/admin.php:283
+#: templates/admin.php:276
msgid "Restrict users to only share with users in their groups"
msgstr ""
-#: templates/admin.php:290
+#: templates/admin.php:281
msgid "Allow users to send mail notification for shared files"
msgstr "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti."
-#: templates/admin.php:297
+#: templates/admin.php:286
msgid "Exclude groups from sharing"
msgstr ""
-#: templates/admin.php:308
+#: templates/admin.php:298
msgid ""
"These groups will still be able to receive shares, but not to initiate them."
msgstr ""
-#: templates/admin.php:316
+#: templates/admin.php:303
msgid "Security"
msgstr "Varnost"
-#: templates/admin.php:327
+#: templates/admin.php:314
msgid "Enforce HTTPS"
msgstr "Zahtevaj uporabo HTTPS"
-#: templates/admin.php:329
+#: templates/admin.php:316
#, php-format
msgid "Forces the clients to connect to %s via an encrypted connection."
msgstr "Vsili povezavo odjemalca z %s preko šifrirane povezave."
-#: templates/admin.php:335
+#: templates/admin.php:322
#, php-format
msgid ""
"Please connect to your %s via HTTPS to enable or disable the SSL "
"enforcement."
msgstr "Za nastavljanje šifriranja SSL je treba vzpostaviti povezavo z mestom %s preko protokola HTTPS."
-#: templates/admin.php:345
+#: templates/admin.php:332
msgid "Email Server"
msgstr "Poštni strežnik"
-#: templates/admin.php:347
+#: templates/admin.php:334
msgid "This is used for sending out notifications."
msgstr ""
-#: templates/admin.php:378
+#: templates/admin.php:365
msgid "From address"
msgstr ""
-#: templates/admin.php:379
+#: templates/admin.php:366
msgid "mail"
msgstr ""
-#: templates/admin.php:400
+#: templates/admin.php:387
msgid "Authentication required"
msgstr "Zahtevana je overitev"
-#: templates/admin.php:404
+#: templates/admin.php:391
msgid "Server address"
msgstr "Naslov strežnika"
-#: templates/admin.php:408
+#: templates/admin.php:395
msgid "Port"
msgstr "Vrata"
-#: templates/admin.php:413
+#: templates/admin.php:400
msgid "Credentials"
msgstr "Poverila"
-#: templates/admin.php:414
+#: templates/admin.php:401
msgid "SMTP Username"
msgstr "Uporabniško ime SMTP"
-#: templates/admin.php:417
+#: templates/admin.php:404
msgid "SMTP Password"
msgstr "Geslo SMTP"
-#: templates/admin.php:421
+#: templates/admin.php:408
msgid "Test email settings"
msgstr "Preizkus nastavitev elektronske pošte"
-#: templates/admin.php:422
+#: templates/admin.php:409
msgid "Send email"
msgstr "Pošlji elektronsko sporočilo"
-#: templates/admin.php:427
+#: templates/admin.php:414
msgid "Log"
msgstr "Dnevnik"
-#: templates/admin.php:428
+#: templates/admin.php:415
msgid "Log level"
msgstr "Raven beleženja"
-#: templates/admin.php:460
+#: templates/admin.php:447
msgid "More"
msgstr "Več"
-#: templates/admin.php:461
+#: templates/admin.php:448
msgid "Less"
msgstr "Manj"
-#: templates/admin.php:467 templates/personal.php:196
+#: templates/admin.php:454 templates/personal.php:196
msgid "Version"
msgstr "Različica"
-#: templates/admin.php:471 templates/personal.php:199
+#: templates/admin.php:458 templates/personal.php:199
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -921,7 +921,7 @@ msgstr ""
#: templates/users/part.grouplist.php:5
msgid "Add Group"
-msgstr ""
+msgstr "Dodaj skupino"
#: templates/users/part.grouplist.php:10
msgid "Group"
@@ -929,11 +929,11 @@ msgstr "Skupina"
#: templates/users/part.grouplist.php:18
msgid "Everyone"
-msgstr ""
+msgstr "Vsi"
-#: templates/users/part.grouplist.php:29
+#: templates/users/part.grouplist.php:31
msgid "Admins"
-msgstr ""
+msgstr "Skrbniki"
#: templates/users/part.setquota.php:7
msgid "Default Quota"
diff --git a/l10n/sl/user_ldap.po b/l10n/sl/user_ldap.po
index f4c2e5c59f3..61de6ea40da 100644
--- a/l10n/sl/user_ldap.po
+++ b/l10n/sl/user_ldap.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-19 01:54-0400\n"
-"PO-Revision-Date: 2014-06-18 06:12+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-24 14:02+0000\n"
+"Last-Translator: Matej Urbančič <>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -144,7 +144,7 @@ msgstr "Ali res želite izbrisati trenutne nastavitve strežnika?"
msgid "Confirm Deletion"
msgstr "Potrdi brisanje"
-#: lib/wizard.php:83 lib/wizard.php:97
+#: lib/wizard.php:97 lib/wizard.php:112
#, php-format
msgid "%s group found"
msgid_plural "%s groups found"
@@ -153,7 +153,7 @@ msgstr[1] "%s najdeni skupini"
msgstr[2] "%s najdene skupine"
msgstr[3] "%s najdenih skupin"
-#: lib/wizard.php:130
+#: lib/wizard.php:126
#, php-format
msgid "%s user found"
msgid_plural "%s users found"
@@ -162,25 +162,25 @@ msgstr[1] "%s najdena uporabnika"
msgstr[2] "%s najdeni uporabniki"
msgstr[3] "%s najdenih uporabnikov"
-#: lib/wizard.php:825 lib/wizard.php:837
-msgid "Invalid Host"
-msgstr "Neveljaven gostitelj"
-
-#: lib/wizard.php:1025
+#: lib/wizard.php:317 lib/wizard.php:1051
msgid "Could not find the desired feature"
msgstr "Želene zmožnosti ni mogoče najti"
+#: lib/wizard.php:858 lib/wizard.php:870
+msgid "Invalid Host"
+msgstr "Neveljaven gostitelj"
+
#: settings.php:52
msgid "Server"
-msgstr ""
+msgstr "Strežnik"
#: settings.php:53
msgid "User Filter"
-msgstr ""
+msgstr "Uporabniški filter"
#: settings.php:54
msgid "Login Filter"
-msgstr ""
+msgstr "Filter prijave"
#: settings.php:55
msgid "Group Filter"
@@ -273,7 +273,7 @@ msgstr "Dodaj nastavitve strežnika"
#: templates/part.wizard-server.php:21
msgid "Delete Configuration"
-msgstr ""
+msgstr "Izbriši nastavitve"
#: templates/part.wizard-server.php:30
msgid "Host"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index c1fa8fe7e66..ebd6694083b 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 2a7162f185c..abe445a19a4 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 39b08bbc1f9..6b6a95cb5d2 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index 001b2ee18c5..7fccd54c5bd 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index 73e58990b36..537d7eb2a93 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -49,7 +49,7 @@ msgstr ""
msgid "You haven't shared any files by link yet."
msgstr ""
-#: js/external.js:43 js/external.js:46
+#: js/external.js:45 js/external.js:48
msgid "Add {name} from {owner}@{remote}"
msgstr ""
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 07a5c3b8281..c8783308826 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 92c9b2fce33..4441bb32143 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index ae90ba902d3..9b7ac246146 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot
index 2a8ffe0b547..7dfbc809da2 100644
--- a/l10n/templates/private.pot
+++ b/l10n/templates/private.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 3ca9395f8f3..284f855fb89 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -331,7 +331,7 @@ msgstr ""
msgid "Group Admin"
msgstr ""
-#: js/users/users.js:63 templates/users/part.grouplist.php:44
+#: js/users/users.js:63 templates/users/part.grouplist.php:46
#: templates/users/part.userlist.php:108
msgid "Delete"
msgstr ""
@@ -927,7 +927,7 @@ msgstr ""
msgid "Everyone"
msgstr ""
-#: templates/users/part.grouplist.php:29
+#: templates/users/part.grouplist.php:31
msgid "Admins"
msgstr ""
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 6de0a346057..dd6fb0685ea 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -143,26 +143,26 @@ msgstr ""
msgid "Confirm Deletion"
msgstr ""
-#: lib/wizard.php:83 lib/wizard.php:97
+#: lib/wizard.php:97 lib/wizard.php:112
#, php-format
msgid "%s group found"
msgid_plural "%s groups found"
msgstr[0] ""
msgstr[1] ""
-#: lib/wizard.php:130
+#: lib/wizard.php:126
#, php-format
msgid "%s user found"
msgid_plural "%s users found"
msgstr[0] ""
msgstr[1] ""
-#: lib/wizard.php:825 lib/wizard.php:837
-msgid "Invalid Host"
+#: lib/wizard.php:317 lib/wizard.php:1051
+msgid "Could not find the desired feature"
msgstr ""
-#: lib/wizard.php:1025
-msgid "Could not find the desired feature"
+#: lib/wizard.php:858 lib/wizard.php:870
+msgid "Invalid Host"
msgstr ""
#: settings.php:52
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index cbfce751206..67ec07b85ba 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-24 01:54-0400\n"
+"POT-Creation-Date: 2014-06-26 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index d3d1dc1331a..1df932cf3bd 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-15 01:54-0400\n"
-"PO-Revision-Date: 2014-06-15 05:54+0000\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-25 03:41+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -151,7 +151,7 @@ msgstr "設定"
#: js/js.js:590
msgid "File"
-msgstr ""
+msgstr "檔案"
#: js/js.js:591
msgid "Folder"
@@ -244,74 +244,74 @@ msgstr "重設密碼"
msgid "Password can not be changed. Please contact your administrator."
msgstr ""
-#: js/oc-dialogs.js:109 js/oc-dialogs.js:250
+#: js/oc-dialogs.js:109 js/oc-dialogs.js:257
msgid "Yes"
msgstr "是"
-#: js/oc-dialogs.js:119 js/oc-dialogs.js:260
+#: js/oc-dialogs.js:119 js/oc-dialogs.js:267
msgid "No"
msgstr "否"
-#: js/oc-dialogs.js:198
+#: js/oc-dialogs.js:204
msgid "Choose"
msgstr "選擇"
-#: js/oc-dialogs.js:224
+#: js/oc-dialogs.js:231
msgid "Error loading file picker template: {error}"
msgstr "載入檔案選擇器樣板出錯: {error}"
-#: js/oc-dialogs.js:277
+#: js/oc-dialogs.js:284
msgid "Ok"
msgstr "好"
-#: js/oc-dialogs.js:297
+#: js/oc-dialogs.js:304
msgid "Error loading message template: {error}"
msgstr "載入訊息樣板出錯: {error}"
-#: js/oc-dialogs.js:425
+#: js/oc-dialogs.js:432
msgid "{count} file conflict"
msgid_plural "{count} file conflicts"
msgstr[0] "{count} 個檔案衝突"
-#: js/oc-dialogs.js:439
+#: js/oc-dialogs.js:446
msgid "One file conflict"
msgstr "一個檔案衝突"
-#: js/oc-dialogs.js:445
+#: js/oc-dialogs.js:452
msgid "New Files"
msgstr "新檔案"
-#: js/oc-dialogs.js:446
+#: js/oc-dialogs.js:453
msgid "Already existing files"
msgstr ""
-#: js/oc-dialogs.js:448
+#: js/oc-dialogs.js:455
msgid "Which files do you want to keep?"
msgstr "您要保留哪一個檔案?"
-#: js/oc-dialogs.js:449
+#: js/oc-dialogs.js:456
msgid ""
"If you select both versions, the copied file will have a number added to its"
" name."
msgstr "如果您同時選擇兩個版本,被複製的那個檔案名稱後面會加上編號"
-#: js/oc-dialogs.js:457
+#: js/oc-dialogs.js:464
msgid "Cancel"
msgstr "取消"
-#: js/oc-dialogs.js:467
+#: js/oc-dialogs.js:474
msgid "Continue"
msgstr "繼續"
-#: js/oc-dialogs.js:514 js/oc-dialogs.js:527
+#: js/oc-dialogs.js:521 js/oc-dialogs.js:534
msgid "(all selected)"
msgstr "(已全選)"
-#: js/oc-dialogs.js:517 js/oc-dialogs.js:531
+#: js/oc-dialogs.js:524 js/oc-dialogs.js:538
msgid "({count} selected)"
msgstr "(已選 {count} 項)"
-#: js/oc-dialogs.js:539
+#: js/oc-dialogs.js:546
msgid "Error loading file exists template"
msgstr "載入檔案存在樣板出錯"
diff --git a/l10n/zh_TW/files_external.po b/l10n/zh_TW/files_external.po
index d09fc3bbabc..43c95b009bb 100644
--- a/l10n/zh_TW/files_external.po
+++ b/l10n/zh_TW/files_external.po
@@ -4,13 +4,14 @@
#
# Translators:
# Pellaeon Lin <nfsmwlin@gmail.com>, 2013
+# Flymok <transifex@flymok.net>, 2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-08 01:54-0400\n"
-"PO-Revision-Date: 2014-06-07 06:12+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-25 06:33-0400\n"
+"PO-Revision-Date: 2014-06-25 03:20+0000\n"
+"Last-Translator: Flymok <transifex@flymok.net>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -32,15 +33,15 @@ msgstr "地點"
#: appinfo/app.php:51
msgid "Amazon S3"
-msgstr ""
+msgstr "Amazon S3"
#: appinfo/app.php:54
msgid "Key"
-msgstr ""
+msgstr "鑰"
#: appinfo/app.php:55
msgid "Secret"
-msgstr ""
+msgstr "密"
#: appinfo/app.php:56 appinfo/app.php:65
msgid "Bucket"
@@ -56,23 +57,23 @@ msgstr ""
#: appinfo/app.php:64
msgid "Secret Key"
-msgstr ""
+msgstr "密鑰"
#: appinfo/app.php:66
msgid "Hostname (optional)"
-msgstr ""
+msgstr "主機名稱 (選填)"
#: appinfo/app.php:67
msgid "Port (optional)"
-msgstr ""
+msgstr "埠號 (選填)"
#: appinfo/app.php:68
msgid "Region (optional)"
-msgstr ""
+msgstr "區域 (選填)"
#: appinfo/app.php:69
msgid "Enable SSL"
-msgstr ""
+msgstr "啟用 SSL"
#: appinfo/app.php:70
msgid "Enable Path Style"
@@ -124,7 +125,7 @@ msgstr ""
#: appinfo/app.php:112
msgid "Username (required)"
-msgstr ""
+msgstr "使用者名稱 (必填)"
#: appinfo/app.php:113
msgid "Bucket (required)"
@@ -208,44 +209,44 @@ msgstr "個人"
#: js/mountsfilelist.js:36
msgid "System"
-msgstr ""
+msgstr "系統"
-#: js/settings.js:318 js/settings.js:325
+#: js/settings.js:320 js/settings.js:327
msgid "Saved"
msgstr "已儲存"
#: lib/config.php:703
msgid "<b>Note:</b> "
-msgstr ""
+msgstr "<b>警告:</b> "
#: lib/config.php:713
msgid " and "
-msgstr ""
+msgstr "與"
#: lib/config.php:735
#, php-format
msgid ""
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting "
"of %s is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。"
#: lib/config.php:737
#, php-format
msgid ""
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of"
" %s is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。"
#: lib/config.php:739
#, php-format
msgid ""
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please"
" ask your system administrator to install it."
-msgstr ""
+msgstr "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。"
#: templates/list.php:7
msgid "You don't have any external storages"
-msgstr ""
+msgstr "您沒有任何外部儲存"
#: templates/list.php:16
msgid "Name"
@@ -277,7 +278,7 @@ msgstr "選項"
#: templates/settings.php:12
msgid "Available for"
-msgstr ""
+msgstr "可用的"
#: templates/settings.php:32
msgid "Add storage"
@@ -285,7 +286,7 @@ msgstr "增加儲存區"
#: templates/settings.php:92
msgid "No user or group"
-msgstr ""
+msgstr "沒有使用者或群組"
#: templates/settings.php:95
msgid "All Users"
@@ -310,7 +311,7 @@ msgstr "啓用使用者外部儲存"
#: templates/settings.php:135
msgid "Allow users to mount the following external storage"
-msgstr ""
+msgstr "允許使用者自行掛載以下的外部儲存"
#: templates/settings.php:150
msgid "SSL root certificates"
diff --git a/lib/base.php b/lib/base.php
index ca2e49bed64..eef094737b6 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -693,6 +693,7 @@ class OC {
if (!OC_Config::getValue('maintenance', false) && !\OCP\Util::needUpgrade()) {
OC_App::loadApps(array('authentication'));
OC_App::loadApps(array('filesystem', 'logging'));
+ OC_App::loadApps();
}
self::checkSingleUserMode();
OC::$server->getRouter()->match(OC_Request::getRawPathInfo());
diff --git a/lib/private/app.php b/lib/private/app.php
index 01597b37e77..9fb0ec2e34f 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -509,6 +509,10 @@ class OC_App {
* @return string|false
*/
public static function getAppPath($appid) {
+ if ($appid === null || trim($appid) === '') {
+ return false;
+ }
+
if (($dir = self::findAppInDirectories($appid)) != false) {
return $dir['path'] . '/' . $appid;
}
diff --git a/lib/private/connector/sabre/objecttree.php b/lib/private/connector/sabre/objecttree.php
index f2578e3c097..54596db3c47 100644
--- a/lib/private/connector/sabre/objecttree.php
+++ b/lib/private/connector/sabre/objecttree.php
@@ -135,10 +135,7 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
throw new \Sabre\DAV\Exception\Forbidden();
}
if ($sourceDir !== $destinationDir) {
- if (!$this->fileView->isUpdatable($sourceDir)) {
- throw new \Sabre\DAV\Exception\Forbidden();
- }
- if (!$this->fileView->isUpdatable($destinationDir)) {
+ if (!$this->fileView->isCreatable($destinationDir)) {
throw new \Sabre\DAV\Exception\Forbidden();
}
if (!$this->fileView->isDeletable($sourcePath) && !$isMovableMount) {
diff --git a/lib/private/files/utils/scanner.php b/lib/private/files/utils/scanner.php
index 1bb3e694c96..c2fabf51946 100644
--- a/lib/private/files/utils/scanner.php
+++ b/lib/private/files/utils/scanner.php
@@ -11,6 +11,7 @@ namespace OC\Files\Utils;
use OC\Files\View;
use OC\Files\Cache\ChangePropagator;
use OC\Files\Filesystem;
+use OC\ForbiddenException;
use OC\Hooks\PublicEmitter;
/**
@@ -104,6 +105,7 @@ class Scanner extends PublicEmitter {
/**
* @param string $dir
+ * @throws \OC\ForbiddenException
*/
public function scan($dir) {
$mounts = $this->getMounts($dir);
@@ -111,7 +113,14 @@ class Scanner extends PublicEmitter {
if (is_null($mount->getStorage())) {
continue;
}
- $scanner = $mount->getStorage()->getScanner();
+ $storage = $mount->getStorage();
+ // if the home storage isn't writable then the scanner is run as the wrong user
+ if ($storage->instanceOfStorage('\OC\Files\Storage\Home') and
+ (!$storage->isCreatable('') or !$storage->isCreatable('files'))
+ ) {
+ throw new ForbiddenException();
+ }
+ $scanner = $storage->getScanner();
$this->attachListener($mount);
$scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE);
}
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index 91d7ea260d3..ff3cb9ee68b 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -896,7 +896,7 @@ class View {
return false;
}
- if ($mount instanceof MoveableMount) {
+ if ($mount instanceof MoveableMount && $internalPath === '') {
$data['permissions'] |= \OCP\PERMISSION_DELETE | \OCP\PERMISSION_UPDATE;
}
diff --git a/lib/private/share/helper.php b/lib/private/share/helper.php
index 71c6d8517a9..46e3c280488 100644
--- a/lib/private/share/helper.php
+++ b/lib/private/share/helper.php
@@ -149,17 +149,18 @@ class Helper extends \OC\Share\Constants {
*/
public static function delete($parent, $excludeParent = false, $uidOwner = null) {
$ids = array($parent);
+ $deletedItems = array();
$parents = array($parent);
while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'";
// Check the owner on the first search of reshares, useful for
// finding and deleting the reshares by a single user of a group share
if (count($ids) == 1 && isset($uidOwner)) {
- $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent`'
+ $query = \OC_DB::prepare('SELECT `id`, `share_with`, `item_type`, `share_type`, `item_target`, `file_target`, `parent`'
.' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?');
$result = $query->execute(array($uidOwner));
} else {
- $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner`'
+ $query = \OC_DB::prepare('SELECT `id`, `share_with`, `item_type`, `share_type`, `item_target`, `file_target`, `parent`, `uid_owner`'
.' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
$result = $query->execute();
}
@@ -168,16 +169,29 @@ class Helper extends \OC\Share\Constants {
while ($item = $result->fetchRow()) {
$ids[] = $item['id'];
$parents[] = $item['id'];
+ $tmpItem = array(
+ 'id' => $item['id'],
+ 'shareWith' => $item['share_with'],
+ 'itemTarget' => $item['item_target'],
+ 'itemType' => $item['item_type'],
+ 'shareType' => (int)$item['share_type'],
+ );
+ if (isset($item['file_target'])) {
+ $tmpItem['fileTarget'] = $item['file_target'];
+ }
+ $deletedItems[] = $tmpItem;
}
}
if ($excludeParent) {
unset($ids[0]);
}
if (!empty($ids)) {
- $ids = "'".implode("','", $ids)."'";
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` IN ('.$ids.')');
+ $idList = "'".implode("','", $ids)."'";
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` IN ('.$idList.')');
$query->execute();
}
+
+ return $deletedItems;
}
/**
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 26108a937ce..c06ea72c348 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -738,11 +738,24 @@ class Share extends \OC\Share\Constants {
$shares = $result->fetchAll();
+ $listOfUnsharedItems = array();
+
$itemUnshared = false;
foreach ($shares as $share) {
if ((int)$share['share_type'] === \OCP\Share::SHARE_TYPE_USER &&
$share['share_with'] === $uid) {
- Helper::delete($share['id']);
+ $deletedShares = Helper::delete($share['id']);
+ $shareTmp = array(
+ 'id' => $share['id'],
+ 'shareWith' => $share['share_with'],
+ 'itemTarget' => $share['item_target'],
+ 'itemType' => $share['item_type'],
+ 'shareType' => (int)$share['share_type'],
+ );
+ if (isset($share['file_target'])) {
+ $shareTmp['fileTarget'] = $share['file_target'];
+ }
+ $listOfUnsharedItems = array_merge($listOfUnsharedItems, $deletedShares, array($shareTmp));
$itemUnshared = true;
break;
} elseif ((int)$share['share_type'] === \OCP\Share::SHARE_TYPE_GROUP) {
@@ -764,13 +777,40 @@ class Share extends \OC\Share\Constants {
$groupShare['id'], self::$shareTypeGroupUserUnique,
\OC_User::getUser(), $groupShare['uid_owner'], 0, $groupShare['stime'], $groupShare['file_source'],
$groupShare['file_target']));
+ $shareTmp = array(
+ 'id' => $groupShare['id'],
+ 'shareWith' => $groupShare['share_with'],
+ 'itemTarget' => $groupShare['item_target'],
+ 'itemType' => $groupShare['item_type'],
+ 'shareType' => (int)$groupShare['share_type'],
+ );
+ if (isset($groupShare['file_target'])) {
+ $shareTmp['fileTarget'] = $groupShare['file_target'];
+ }
+ $listOfUnsharedItems = array_merge($listOfUnsharedItems, array($groupShare));
$itemUnshared = true;
} elseif (!$itemUnshared && isset($uniqueGroupShare)) {
$query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = ? WHERE `id` = ?');
$query->execute(array(0, $uniqueGroupShare['id']));
+ $shareTmp = array(
+ 'id' => $uniqueGroupShare['id'],
+ 'shareWith' => $uniqueGroupShare['share_with'],
+ 'itemTarget' => $uniqueGroupShare['item_target'],
+ 'itemType' => $uniqueGroupShare['item_type'],
+ 'shareType' => (int)$uniqueGroupShare['share_type'],
+ );
+ if (isset($uniqueGroupShare['file_target'])) {
+ $shareTmp['fileTarget'] = $uniqueGroupShare['file_target'];
+ }
+ $listOfUnsharedItems = array_merge($listOfUnsharedItems, array($uniqueGroupShare));
$itemUnshared = true;
}
+ if ($itemUnshared) {
+ \OC_Hook::emit('OCP\Share', 'post_unshareFromSelf',
+ array('unsharedItems' => $listOfUnsharedItems, 'itemType' => $itemType));
+ }
+
return $itemUnshared;
}
@@ -967,19 +1007,23 @@ class Share extends \OC\Share\Constants {
protected static function unshareItem(array $item) {
// Pass all the vars we have for now, they may be useful
$hookParams = array(
+ 'id' => $item['id'],
'itemType' => $item['item_type'],
'itemSource' => $item['item_source'],
- 'fileSource' => $item['file_source'],
- 'shareType' => $item['share_type'],
+ 'shareType' => (int)$item['share_type'],
'shareWith' => $item['share_with'],
'itemParent' => $item['parent'],
'uidOwner' => $item['uid_owner'],
);
+ if($item['item_type'] === 'file' || $item['item_type'] === 'folder') {
+ $hookParams['fileSource'] = $item['file_source'];
+ $hookParams['fileTarget'] = $item['file_target'];
+ }
- \OC_Hook::emit('OCP\Share', 'pre_unshare', $hookParams + array(
- 'fileSource' => $item['file_source'],
- ));
- Helper::delete($item['id']);
+ \OC_Hook::emit('OCP\Share', 'pre_unshare', $hookParams);
+ $deletedShares = Helper::delete($item['id']);
+ $deletedShares[] = $hookParams;
+ $hookParams['deletedShares'] = $deletedShares;
\OC_Hook::emit('OCP\Share', 'post_unshare', $hookParams);
}
@@ -1788,7 +1832,7 @@ class Share extends \OC\Share\Constants {
if (isset($uidOwner)) {
if ($fileDependent) {
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `*PREFIX*share`.`parent`,'
- . ' `share_type`, `share_with`, `file_source`, `path`, `*PREFIX*share`.`permissions`, `stime`,'
+ . ' `share_type`, `share_with`, `file_source`, `file_target`, `path`, `*PREFIX*share`.`permissions`, `stime`,'
. ' `expiration`, `token`, `storage`, `mail_send`, `uid_owner`';
} else {
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `*PREFIX*share`.`permissions`,'
diff --git a/settings/l10n/ja.php b/settings/l10n/ja.php
index 7c55e4da429..6fa25a32cad 100644
--- a/settings/l10n/ja.php
+++ b/settings/l10n/ja.php
@@ -207,15 +207,15 @@ $TRANSLATIONS = array(
"Search Users and Groups" => "ユーザーとグループを検索",
"Add Group" => "グループを追加",
"Group" => "グループ",
-"Everyone" => "全ての人",
+"Everyone" => "すべてのユーザー",
"Admins" => "管理者",
"Default Quota" => "デフォルトのクォータサイズ",
-"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" => "ストレージの割り当てを入力してください (例: \"512MB\" や \"12 GB\")",
+"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" => "ストレージのクォータを入力してください (例: \"512MB\" や \"12 GB\")",
"Unlimited" => "無制限",
"Other" => "その他",
-"Username" => "ユーザー名",
+"Username" => "ユーザーID",
"Quota" => "クオータ",
-"Storage Location" => "ストレージの場所",
+"Storage Location" => "データの保存場所",
"Last Login" => "最終ログイン",
"change full name" => "名前を変更",
"set new password" => "新しいパスワードを設定",
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index 3d0dc63f854..31b0fa3bc9e 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -21,6 +21,7 @@ $TRANSLATIONS = array(
"Couldn't decrypt your files, check your password and try again" => "Nie można zdeszyfrować Twoich plików, sprawdź swoje hasło i spróbuj ponownie",
"Encryption keys deleted permanently" => "Klucze szyfrujące zostały trwale usunięte",
"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" => "Nie można trwale usunąć Twoich kluczy szyfrujących, proszę sprawdź owncloud.log lub zapytaj administratora",
+"Couldn't remove app." => "Nie można usunąć aplikacji.",
"Email saved" => "E-mail zapisany",
"Invalid email" => "Nieprawidłowy e-mail",
"Unable to delete group" => "Nie można usunąć grupy",
@@ -43,6 +44,7 @@ $TRANSLATIONS = array(
"User Documentation" => "Dokumentacja użytkownika",
"Admin Documentation" => "Dokumentacja Administratora",
"Update to {appversion}" => "Aktualizacja do {appversion}",
+"Uninstall App" => "Odinstaluj aplikację",
"Disable" => "Wyłącz",
"Enable" => "Włącz",
"Please wait...." => "Proszę czekać...",
@@ -53,6 +55,9 @@ $TRANSLATIONS = array(
"Error" => "Błąd",
"Update" => "Aktualizuj",
"Updated" => "Zaktualizowano",
+"Uninstalling ...." => "Odinstalowywanie....",
+"Error while uninstalling app" => "Błąd przy odinstalowywaniu aplikacji",
+"Uninstall" => "Odinstaluj",
"Select a profile picture" => "Wybierz zdjęcie profilu",
"Very weak password" => "Bardzo słabe hasło",
"Weak password" => "Słabe hasło",
diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php
index f0ac6eea30b..9383e565fd6 100644
--- a/settings/l10n/sl.php
+++ b/settings/l10n/sl.php
@@ -48,6 +48,7 @@ $TRANSLATIONS = array(
"Error" => "Napaka",
"Update" => "Posodobi",
"Updated" => "Posodobljeno",
+"Uninstall" => "Odstrani namestitev",
"Select a profile picture" => "Izbor slike profila",
"Very weak password" => "Zelo šibko geslo",
"Weak password" => "Šibko geslo",
@@ -166,7 +167,10 @@ $TRANSLATIONS = array(
"Create" => "Ustvari",
"Admin Recovery Password" => "Obnovitev skrbniškega gesla",
"Enter the recovery password in order to recover the users files during password change" => "Vnesite geslo, ki omogoča obnovitev uporabniških datotek med spreminjanjem gesla",
+"Add Group" => "Dodaj skupino",
"Group" => "Skupina",
+"Everyone" => "Vsi",
+"Admins" => "Skrbniki",
"Default Quota" => "Privzeta količinska omejitev",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" => "Vnesite količinsko omejitev prostora (na primer: \"512 MB\" ali \"12 GB\")",
"Unlimited" => "Neomejeno",
diff --git a/tests/lib/connector/sabre/objecttree.php b/tests/lib/connector/sabre/objecttree.php
index a88e23bbe2f..fc9f802066f 100644
--- a/tests/lib/connector/sabre/objecttree.php
+++ b/tests/lib/connector/sabre/objecttree.php
@@ -25,6 +25,10 @@ class TestDoubleFileView extends \OC\Files\View{
return $this->updatables[$path];
}
+ public function isCreatable($path) {
+ return $this->updatables[$path];
+ }
+
public function isDeletable($path) {
return $this->deletables[$path];
}
diff --git a/version.php b/version.php
index ae3115ec74a..9df9a76f2eb 100644
--- a/version.php
+++ b/version.php
@@ -3,10 +3,10 @@
// We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades
// between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
// when updating major/minor version number.
-$OC_Version=array(7, 0, 0, 1);
+$OC_Version=array(7, 0, 0, 2);
// The human readable string
-$OC_VersionString='7.0 alpha 2';
+$OC_VersionString='7.0 beta 1';
// The ownCloud edition
$OC_Edition='';