summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorTom Needham <needham.thomas@gmail.com>2012-10-28 11:16:04 +0000
committerTom Needham <needham.thomas@gmail.com>2012-10-28 11:16:04 +0000
commitbcdf3a23db6867332232f8c1b69ba3fa394e191a (patch)
tree20be51b4a2e5f1c7f8bc3a50ca3fb9571e972af3 /apps
parentb07944798848bc5196dc75e8d8caea5ca71b0f15 (diff)
parent22dcd3b6a691c7a245e4d1de30f09bb17efdfceb (diff)
downloadnextcloud-server-bcdf3a23db6867332232f8c1b69ba3fa394e191a.tar.gz
nextcloud-server-bcdf3a23db6867332232f8c1b69ba3fa394e191a.zip
Merge master into ocs_api
Diffstat (limited to 'apps')
-rw-r--r--apps/.gitkeep1
-rw-r--r--apps/files/admin.php7
-rw-r--r--apps/files/ajax/delete.php6
-rw-r--r--apps/files/ajax/move.php2
-rw-r--r--apps/files/ajax/newfile.php21
-rw-r--r--apps/files/ajax/newfolder.php8
-rw-r--r--apps/files/ajax/scan.php2
-rw-r--r--apps/files/ajax/upload.php5
-rw-r--r--apps/files/appinfo/app.php2
-rw-r--r--apps/files/appinfo/info.xml2
-rw-r--r--apps/files/appinfo/update.php12
-rw-r--r--apps/files/appinfo/version2
-rw-r--r--apps/files/css/files.css23
-rw-r--r--apps/files/index.php6
-rw-r--r--apps/files/js/fileactions.js3
-rw-r--r--apps/files/js/filelist.js103
-rw-r--r--apps/files/js/files.js66
-rw-r--r--apps/files/l10n/ar.php2
-rw-r--r--apps/files/l10n/bg_BG.php5
-rw-r--r--apps/files/l10n/ca.php35
-rw-r--r--apps/files/l10n/cs_CZ.php35
-rw-r--r--apps/files/l10n/da.php35
-rw-r--r--apps/files/l10n/de.php49
-rw-r--r--apps/files/l10n/de_DE.php71
-rw-r--r--apps/files/l10n/el.php72
-rw-r--r--apps/files/l10n/eo.php21
-rw-r--r--apps/files/l10n/es.php39
-rw-r--r--apps/files/l10n/es_AR.php71
-rw-r--r--apps/files/l10n/et_EE.php35
-rw-r--r--apps/files/l10n/eu.php21
-rw-r--r--apps/files/l10n/fa.php10
-rw-r--r--apps/files/l10n/fi_FI.php26
-rw-r--r--apps/files/l10n/fr.php35
-rw-r--r--apps/files/l10n/gl.php15
-rw-r--r--apps/files/l10n/he.php7
-rw-r--r--apps/files/l10n/hr.php24
-rw-r--r--apps/files/l10n/hu_HU.php10
-rw-r--r--apps/files/l10n/ia.php2
-rw-r--r--apps/files/l10n/id.php10
-rw-r--r--apps/files/l10n/it.php35
-rw-r--r--apps/files/l10n/ja_JP.php35
-rw-r--r--apps/files/l10n/ka_GE.php71
-rw-r--r--apps/files/l10n/ko.php10
-rw-r--r--apps/files/l10n/lb.php10
-rw-r--r--apps/files/l10n/lt_LT.php38
-rw-r--r--apps/files/l10n/lv.php10
-rw-r--r--apps/files/l10n/mk.php6
-rw-r--r--apps/files/l10n/ms_MY.php10
-rw-r--r--apps/files/l10n/nb_NO.php23
-rw-r--r--apps/files/l10n/nl.php35
-rw-r--r--apps/files/l10n/nn_NO.php2
-rw-r--r--apps/files/l10n/oc.php57
-rw-r--r--apps/files/l10n/pl.php35
-rw-r--r--apps/files/l10n/pt_BR.php24
-rw-r--r--apps/files/l10n/pt_PT.php58
-rw-r--r--apps/files/l10n/ro.php25
-rw-r--r--apps/files/l10n/ru.php35
-rw-r--r--apps/files/l10n/ru_RU.php35
-rw-r--r--apps/files/l10n/si_LK.php32
-rw-r--r--apps/files/l10n/sk_SK.php53
-rw-r--r--apps/files/l10n/sl.php69
-rw-r--r--apps/files/l10n/sr.php2
-rw-r--r--apps/files/l10n/sr@latin.php2
-rw-r--r--apps/files/l10n/sv.php35
-rw-r--r--apps/files/l10n/ta_LK.php71
-rw-r--r--apps/files/l10n/th_TH.php21
-rw-r--r--apps/files/l10n/tr.php10
-rw-r--r--apps/files/l10n/uk.php7
-rw-r--r--apps/files/l10n/vi.php35
-rw-r--r--apps/files/l10n/zh_CN.GB2312.php24
-rw-r--r--apps/files/l10n/zh_CN.php39
-rw-r--r--apps/files/l10n/zh_TW.php3
-rw-r--r--apps/files/templates/index.php6
-rw-r--r--apps/files/templates/part.breadcrumb.php4
-rw-r--r--apps/files/templates/part.list.php13
-rw-r--r--apps/files_encryption/appinfo/info.xml2
-rw-r--r--apps/files_encryption/l10n/de_DE.php6
-rw-r--r--apps/files_encryption/l10n/es_AR.php6
-rw-r--r--apps/files_encryption/l10n/gl.php6
-rw-r--r--apps/files_encryption/l10n/id.php6
-rw-r--r--apps/files_encryption/l10n/ku_IQ.php6
-rw-r--r--apps/files_encryption/l10n/pt_BR.php6
-rw-r--r--apps/files_encryption/l10n/pt_PT.php6
-rw-r--r--apps/files_encryption/l10n/ro.php6
-rw-r--r--apps/files_encryption/l10n/ru_RU.php6
-rw-r--r--apps/files_encryption/l10n/si_LK.php6
-rw-r--r--apps/files_encryption/l10n/sl.php2
-rw-r--r--apps/files_encryption/l10n/uk.php6
-rw-r--r--apps/files_encryption/l10n/zh_CN.GB2312.php6
-rw-r--r--apps/files_encryption/lib/crypt.php4
-rw-r--r--apps/files_encryption/lib/cryptstream.php2
-rw-r--r--apps/files_encryption/lib/proxy.php8
-rw-r--r--apps/files_encryption/settings.php2
-rw-r--r--apps/files_encryption/tests/encryption.php4
-rw-r--r--apps/files_encryption/tests/proxy.php8
-rw-r--r--apps/files_encryption/tests/stream.php20
-rw-r--r--apps/files_external/ajax/addRootCertificate.php43
-rw-r--r--apps/files_external/ajax/removeRootCertificate.php10
-rw-r--r--apps/files_external/appinfo/info.xml2
-rw-r--r--apps/files_external/js/dropbox.js26
-rw-r--r--apps/files_external/js/google.js22
-rw-r--r--apps/files_external/l10n/ca.php12
-rw-r--r--apps/files_external/l10n/cs_CZ.php12
-rw-r--r--apps/files_external/l10n/da.php24
-rw-r--r--apps/files_external/l10n/de.php12
-rw-r--r--apps/files_external/l10n/de_DE.php24
-rw-r--r--apps/files_external/l10n/el.php20
-rw-r--r--apps/files_external/l10n/eo.php12
-rw-r--r--apps/files_external/l10n/es.php12
-rw-r--r--apps/files_external/l10n/es_AR.php24
-rw-r--r--apps/files_external/l10n/et_EE.php12
-rw-r--r--apps/files_external/l10n/eu.php12
-rw-r--r--apps/files_external/l10n/fi_FI.php11
-rw-r--r--apps/files_external/l10n/fr.php12
-rw-r--r--apps/files_external/l10n/gl.php18
-rw-r--r--apps/files_external/l10n/he.php6
-rw-r--r--apps/files_external/l10n/id.php14
-rw-r--r--apps/files_external/l10n/it.php12
-rw-r--r--apps/files_external/l10n/ja_JP.php12
-rw-r--r--apps/files_external/l10n/lt_LT.php17
-rw-r--r--apps/files_external/l10n/nl.php12
-rw-r--r--apps/files_external/l10n/pl.php12
-rw-r--r--apps/files_external/l10n/pt_BR.php24
-rw-r--r--apps/files_external/l10n/pt_PT.php24
-rw-r--r--apps/files_external/l10n/ro.php18
-rw-r--r--apps/files_external/l10n/ru.php12
-rw-r--r--apps/files_external/l10n/ru_RU.php24
-rw-r--r--apps/files_external/l10n/si_LK.php24
-rw-r--r--apps/files_external/l10n/sk_SK.php12
-rw-r--r--apps/files_external/l10n/sl.php12
-rw-r--r--apps/files_external/l10n/sv.php12
-rw-r--r--apps/files_external/l10n/th_TH.php12
-rw-r--r--apps/files_external/l10n/vi.php11
-rw-r--r--apps/files_external/l10n/zh_CN.GB2312.php24
-rw-r--r--apps/files_external/l10n/zh_CN.php24
-rwxr-xr-xapps/files_external/lib/config.php46
-rwxr-xr-xapps/files_external/lib/dropbox.php11
-rw-r--r--apps/files_external/lib/ftp.php6
-rw-r--r--apps/files_external/lib/google.php2
-rw-r--r--apps/files_external/lib/smb.php2
-rw-r--r--apps/files_external/lib/swift.php50
-rw-r--r--apps/files_external/lib/webdav.php17
-rw-r--r--apps/files_external/templates/settings.php26
-rw-r--r--apps/files_external/tests/amazons3.php63
-rw-r--r--apps/files_external/tests/config.php11
-rw-r--r--apps/files_external/tests/dropbox.php27
-rw-r--r--apps/files_external/tests/ftp.php25
-rw-r--r--apps/files_external/tests/google.php61
-rw-r--r--apps/files_external/tests/smb.php26
-rw-r--r--apps/files_external/tests/swift.php28
-rw-r--r--apps/files_external/tests/webdav.php25
-rw-r--r--apps/files_sharing/appinfo/info.xml2
-rw-r--r--apps/files_sharing/appinfo/update.php32
-rw-r--r--apps/files_sharing/appinfo/version2
-rw-r--r--apps/files_sharing/css/public.css78
-rw-r--r--apps/files_sharing/js/public.js29
-rw-r--r--apps/files_sharing/js/share.js10
-rw-r--r--apps/files_sharing/l10n/ca.php2
-rw-r--r--apps/files_sharing/l10n/cs_CZ.php2
-rw-r--r--apps/files_sharing/l10n/da.php2
-rw-r--r--apps/files_sharing/l10n/de.php4
-rw-r--r--apps/files_sharing/l10n/de_DE.php9
-rw-r--r--apps/files_sharing/l10n/el.php7
-rw-r--r--apps/files_sharing/l10n/eo.php2
-rw-r--r--apps/files_sharing/l10n/es.php2
-rw-r--r--apps/files_sharing/l10n/es_AR.php9
-rw-r--r--apps/files_sharing/l10n/eu.php2
-rw-r--r--apps/files_sharing/l10n/fi_FI.php2
-rw-r--r--apps/files_sharing/l10n/fr.php2
-rw-r--r--apps/files_sharing/l10n/gl.php7
-rw-r--r--apps/files_sharing/l10n/he.php2
-rw-r--r--apps/files_sharing/l10n/id.php9
-rw-r--r--apps/files_sharing/l10n/it.php2
-rw-r--r--apps/files_sharing/l10n/ja_JP.php2
-rw-r--r--apps/files_sharing/l10n/ka_GE.php6
-rw-r--r--apps/files_sharing/l10n/ku_IQ.php9
-rw-r--r--apps/files_sharing/l10n/nl.php2
-rw-r--r--apps/files_sharing/l10n/pl.php2
-rw-r--r--apps/files_sharing/l10n/pt_BR.php9
-rw-r--r--apps/files_sharing/l10n/pt_PT.php9
-rw-r--r--apps/files_sharing/l10n/ro.php9
-rw-r--r--apps/files_sharing/l10n/ru.php2
-rw-r--r--apps/files_sharing/l10n/ru_RU.php9
-rw-r--r--apps/files_sharing/l10n/si_LK.php9
-rw-r--r--apps/files_sharing/l10n/sk_SK.php2
-rw-r--r--apps/files_sharing/l10n/sl.php4
-rw-r--r--apps/files_sharing/l10n/sv.php2
-rw-r--r--apps/files_sharing/l10n/th_TH.php2
-rw-r--r--apps/files_sharing/l10n/vi.php2
-rw-r--r--apps/files_sharing/l10n/zh_CN.GB2312.php9
-rw-r--r--apps/files_sharing/l10n/zh_CN.php9
-rw-r--r--apps/files_sharing/lib/share/file.php14
-rw-r--r--apps/files_sharing/lib/share/folder.php2
-rw-r--r--apps/files_sharing/lib/sharedstorage.php8
-rw-r--r--apps/files_sharing/public.php297
-rw-r--r--[-rwxr-xr-x]apps/files_sharing/templates/public.php36
-rw-r--r--apps/files_versions/appinfo/info.xml2
-rw-r--r--apps/files_versions/js/versions.js19
-rw-r--r--apps/files_versions/l10n/ca.php5
-rw-r--r--apps/files_versions/l10n/cs_CZ.php5
-rw-r--r--apps/files_versions/l10n/da.php5
-rw-r--r--apps/files_versions/l10n/de.php5
-rw-r--r--apps/files_versions/l10n/de_DE.php8
-rw-r--r--apps/files_versions/l10n/el.php7
-rw-r--r--apps/files_versions/l10n/eo.php5
-rw-r--r--apps/files_versions/l10n/es.php5
-rw-r--r--apps/files_versions/l10n/es_AR.php8
-rw-r--r--apps/files_versions/l10n/et_EE.php5
-rw-r--r--apps/files_versions/l10n/eu.php5
-rw-r--r--apps/files_versions/l10n/fi_FI.php5
-rw-r--r--apps/files_versions/l10n/fr.php5
-rw-r--r--apps/files_versions/l10n/gl.php7
-rw-r--r--apps/files_versions/l10n/id.php8
-rw-r--r--apps/files_versions/l10n/it.php5
-rw-r--r--apps/files_versions/l10n/ja_JP.php5
-rw-r--r--apps/files_versions/l10n/ku_IQ.php8
-rw-r--r--apps/files_versions/l10n/lt_LT.php7
-rw-r--r--apps/files_versions/l10n/nl.php5
-rw-r--r--apps/files_versions/l10n/pl.php5
-rw-r--r--apps/files_versions/l10n/pt_BR.php7
-rw-r--r--apps/files_versions/l10n/pt_PT.php8
-rw-r--r--apps/files_versions/l10n/ro.php8
-rw-r--r--apps/files_versions/l10n/ru.php5
-rw-r--r--apps/files_versions/l10n/ru_RU.php8
-rw-r--r--apps/files_versions/l10n/si_LK.php8
-rw-r--r--apps/files_versions/l10n/sk_SK.php8
-rw-r--r--apps/files_versions/l10n/sl.php5
-rw-r--r--apps/files_versions/l10n/sv.php5
-rw-r--r--apps/files_versions/l10n/th_TH.php5
-rw-r--r--apps/files_versions/l10n/uk.php8
-rw-r--r--apps/files_versions/l10n/vi.php5
-rw-r--r--apps/files_versions/l10n/zh_CN.GB2312.php8
-rw-r--r--apps/files_versions/l10n/zh_CN.php5
-rw-r--r--apps/files_versions/lib/hooks.php2
-rw-r--r--apps/files_versions/lib/versions.php113
-rw-r--r--apps/files_versions/templates/history.php2
-rw-r--r--apps/user_ldap/appinfo/database.xml2
-rw-r--r--apps/user_ldap/appinfo/info.xml2
-rw-r--r--apps/user_ldap/appinfo/update.php2
-rw-r--r--apps/user_ldap/appinfo/version2
-rw-r--r--apps/user_ldap/group_ldap.php20
-rw-r--r--apps/user_ldap/l10n/da.php2
-rw-r--r--apps/user_ldap/l10n/de.php14
-rw-r--r--apps/user_ldap/l10n/de_DE.php37
-rw-r--r--apps/user_ldap/l10n/el.php3
-rw-r--r--apps/user_ldap/l10n/eo.php1
-rw-r--r--apps/user_ldap/l10n/es_AR.php37
-rw-r--r--apps/user_ldap/l10n/id.php14
-rw-r--r--apps/user_ldap/l10n/ja_JP.php2
-rw-r--r--apps/user_ldap/l10n/pt_BR.php37
-rw-r--r--apps/user_ldap/l10n/pt_PT.php20
-rw-r--r--apps/user_ldap/l10n/ru_RU.php37
-rw-r--r--apps/user_ldap/l10n/si_LK.php13
-rw-r--r--apps/user_ldap/l10n/sk_SK.php37
-rw-r--r--apps/user_ldap/l10n/sl.php30
-rw-r--r--apps/user_ldap/l10n/zh_CN.GB2312.php37
-rw-r--r--apps/user_ldap/l10n/zh_CN.php36
-rw-r--r--apps/user_ldap/lib/access.php207
-rw-r--r--apps/user_ldap/lib/connection.php11
-rw-r--r--apps/user_ldap/lib/jobs.php2
-rw-r--r--apps/user_ldap/tests/group_ldap.php16
-rw-r--r--apps/user_ldap/user_ldap.php59
-rwxr-xr-xapps/user_webdavauth/appinfo/info.xml2
-rwxr-xr-xapps/user_webdavauth/user_webdavauth.php2
264 files changed, 3585 insertions, 1195 deletions
diff --git a/apps/.gitkeep b/apps/.gitkeep
deleted file mode 100644
index 8d1c8b69c3f..00000000000
--- a/apps/.gitkeep
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/files/admin.php b/apps/files/admin.php
index a8f2deffc92..e8b3cb0aca0 100644
--- a/apps/files/admin.php
+++ b/apps/files/admin.php
@@ -30,8 +30,11 @@ OCP\User::checkAdminUser();
$htaccessWorking=(getenv('htaccessWorking')=='true');
$upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize'));
+$upload_max_filesize_possible = OCP\Util::computerFileSize(get_cfg_var('upload_max_filesize'));
$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
+$post_max_size_possible = OCP\Util::computerFileSize(get_cfg_var('post_max_size'));
$maxUploadFilesize = OCP\Util::humanFileSize(min($upload_max_filesize, $post_max_size));
+$maxUploadFilesizePossible = OCP\Util::humanFileSize(min($upload_max_filesize_possible, $post_max_size_possible));
if($_POST) {
if(isset($_POST['maxUploadSize'])) {
if(($setMaxSize = OC_Files::setUploadLimit(OCP\Util::computerFileSize($_POST['maxUploadSize']))) !== false) {
@@ -56,7 +59,7 @@ $htaccessWritable=is_writable(OC::$SERVERROOT.'/.htaccess');
$tmpl = new OCP\Template( 'files', 'admin' );
$tmpl->assign( 'uploadChangable', $htaccessWorking and $htaccessWritable );
$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
-$tmpl->assign( 'maxPossibleUploadSize', OCP\Util::humanFileSize(PHP_INT_MAX));
+$tmpl->assign( 'maxPossibleUploadSize', $maxUploadFilesizePossible);
$tmpl->assign( 'allowZipDownload', $allowZipDownload);
$tmpl->assign( 'maxZipInputSize', $maxZipInputSize);
-return $tmpl->fetchPage(); \ No newline at end of file
+return $tmpl->fetchPage();
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index e9bcea18932..57c8c15c197 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -7,15 +7,15 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
// Get data
-$dir = stripslashes($_GET["dir"]);
-$files = isset($_GET["file"]) ? stripslashes($_GET["file"]) : stripslashes($_GET["files"]);
+$dir = stripslashes($_POST["dir"]);
+$files = isset($_POST["file"]) ? stripslashes($_POST["file"]) : stripslashes($_POST["files"]);
$files = explode(';', $files);
$filesWithError = '';
$success = true;
//Now delete
foreach($files as $file) {
- if( !OC_Files::delete( $dir, $file )) {
+ if( !OC_Files::delete( $dir, $file )) {
$filesWithError .= $file . "\n";
$success = false;
}
diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php
index 8b3149ef14e..ddcda553e3d 100644
--- a/apps/files/ajax/move.php
+++ b/apps/files/ajax/move.php
@@ -9,7 +9,7 @@ OCP\JSON::callCheck();
// Get data
$dir = stripslashes($_GET["dir"]);
$file = stripslashes($_GET["file"]);
-$target = stripslashes($_GET["target"]);
+$target = stripslashes(urldecode($_GET["target"]));
if(OC_Files::move($dir, $file, $target, $file)) {
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index 495c8212163..b87079f2712 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -8,12 +8,11 @@ if(!OC_User::isLoggedIn()) {
}
session_write_close();
-
// Get the params
-$dir = isset( $_REQUEST['dir'] ) ? stripslashes($_REQUEST['dir']) : '';
-$filename = isset( $_REQUEST['filename'] ) ? stripslashes($_REQUEST['filename']) : '';
+$dir = isset( $_REQUEST['dir'] ) ? '/'.trim($_REQUEST['dir'], '/\\') : '';
+$filename = isset( $_REQUEST['filename'] ) ? trim($_REQUEST['filename'], '/\\') : '';
$content = isset( $_REQUEST['content'] ) ? $_REQUEST['content'] : '';
-$source = isset( $_REQUEST['source'] ) ? stripslashes($_REQUEST['source']) : '';
+$source = isset( $_REQUEST['source'] ) ? trim($_REQUEST['source'], '/\\') : '';
if($source) {
$eventSource=new OC_EventSource();
@@ -66,8 +65,10 @@ if($source) {
$target=$dir.'/'.$filename;
$result=OC_Filesystem::file_put_contents($target, $sourceStream);
if($result) {
- $mime=OC_Filesystem::getMimetype($target);
- $eventSource->send('success', array('mime'=>$mime, 'size'=>OC_Filesystem::filesize($target)));
+ $meta = OC_FileCache::get($target);
+ $mime=$meta['mimetype'];
+ $id = OC_FileCache::getId($target);
+ $eventSource->send('success', array('mime'=>$mime, 'size'=>OC_Filesystem::filesize($target), 'id' => $id));
} else {
$eventSource->send('error', "Error while downloading ".$source. ' to '.$target);
}
@@ -76,11 +77,15 @@ if($source) {
} else {
if($content) {
if(OC_Filesystem::file_put_contents($dir.'/'.$filename, $content)) {
- OCP\JSON::success(array("data" => array('content'=>$content)));
+ $meta = OC_FileCache::get($dir.'/'.$filename);
+ $id = OC_FileCache::getId($dir.'/'.$filename);
+ OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id)));
exit();
}
}elseif(OC_Files::newFile($dir, $filename, 'file')) {
- OCP\JSON::success(array("data" => array('content'=>$content)));
+ $meta = OC_FileCache::get($dir.'/'.$filename);
+ $id = OC_FileCache::getId($dir.'/'.$filename);
+ OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id)));
exit();
}
}
diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php
index 34c2d0ca145..0f1f2f14eb0 100644
--- a/apps/files/ajax/newfolder.php
+++ b/apps/files/ajax/newfolder.php
@@ -20,7 +20,13 @@ if(strpos($foldername, '/')!==false) {
}
if(OC_Files::newFile($dir, stripslashes($foldername), 'dir')) {
- OCP\JSON::success(array("data" => array()));
+ if ( $dir != '/') {
+ $path = $dir.'/'.$foldername;
+ } else {
+ $path = '/'.$foldername;
+ }
+ $id = OC_FileCache::getId($path);
+ OCP\JSON::success(array("data" => array('id'=>$id)));
exit();
}
diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php
index d2ec1ab5161..5cd9572d7f9 100644
--- a/apps/files/ajax/scan.php
+++ b/apps/files/ajax/scan.php
@@ -21,7 +21,7 @@ if($force or !OC_FileCache::inCache('')) {
OC_Cache::clear('fileid/'); //make sure the old fileid's don't mess things up
}
- OC_FileCache::scan($dir,$eventSource);
+ OC_FileCache::scan($dir, $eventSource);
OC_FileCache::clean();
OCP\DB::commit();
$eventSource->send('success', true);
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index fb3e277a215..dc830570403 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -38,7 +38,7 @@ $totalSize=0;
foreach($files['size'] as $size) {
$totalSize+=$size;
}
-if($totalSize>OC_Filesystem::free_space('/')) {
+if($totalSize>OC_Filesystem::free_space($dir)){
OCP\JSON::error(array("data" => array( "message" => "Not enough space available" )));
exit();
}
@@ -50,7 +50,8 @@ if(strpos($dir, '..') === false) {
$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
$meta = OC_FileCache::get($target);
- $result[]=array( "status" => "success", 'mime'=>$meta['mimetype'],'size'=>$meta['size'],'name'=>basename($target));
+ $id = OC_FileCache::getId($target);
+ $result[]=array( "status" => "success", 'mime'=>$meta['mimetype'],'size'=>$meta['size'], 'id'=>$id, 'name'=>basename($target));
}
}
OCP\JSON::encodedPrint($result);
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index db3b213ab8d..b431ddfec02 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -1,7 +1,7 @@
<?php
$l=OC_L10N::get('files');
-OCP\App::registerAdmin('files','admin');
+OCP\App::registerAdmin('files', 'admin');
OCP\App::addNavigationEntry( array( "id" => "files_index", "order" => 0, "href" => OCP\Util::linkTo( "files", "index.php" ), "icon" => OCP\Util::imagePath( "core", "places/home.svg" ), "name" => $l->t("Files") ));
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index e58f83c5a01..0a1b196b06f 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>File Management</description>
<licence>AGPL</licence>
<author>Robin Appelman</author>
- <require>4</require>
+ <require>4.9</require>
<shipped>true</shipped>
<standalone/>
<default_enable/>
diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php
index 35008e345b9..bcbbc6035fa 100644
--- a/apps/files/appinfo/update.php
+++ b/apps/files/appinfo/update.php
@@ -1,13 +1,15 @@
<?php
-// fix webdav properties, remove namespace information between curly bracket (update from OC4 to OC5)
+// fix webdav properties,add namespace in front of the property, update for OC4.5
$installedVersion=OCP\Config::getAppValue('files', 'installed_version');
-if (version_compare($installedVersion, '1.1.4', '<')) {
+if (version_compare($installedVersion, '1.1.6', '<')) {
$query = OC_DB::prepare( "SELECT `propertyname`, `propertypath`, `userid` FROM `*PREFIX*properties`" );
$result = $query->execute();
- while( $row = $result->fetchRow()) {
- $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyname` = ? WHERE `userid` = ? AND `propertypath` = ?' );
- $query->execute( array( preg_replace("/^{.*}/", "", $row["propertyname"]),$row["userid"], $row["propertypath"] ));
+ while( $row = $result->fetchRow()){
+ if ( $row["propertyname"][0] != '{' ) {
+ $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyname` = ? WHERE `userid` = ? AND `propertypath` = ?' );
+ $query->execute( array( '{DAV:}' + $row["propertyname"], $row["userid"], $row["propertypath"] ));
+ }
}
}
diff --git a/apps/files/appinfo/version b/apps/files/appinfo/version
index e25d8d9f357..0664a8fd291 100644
--- a/apps/files/appinfo/version
+++ b/apps/files/appinfo/version
@@ -1 +1 @@
-1.1.5
+1.1.6
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index f35478ecc21..0b886fc3fa9 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -3,24 +3,25 @@
See the COPYING-README file. */
/* FILE MENU */
-.actions { padding:.3em; float:left; height:2em; width:10em; }
+.actions { padding:.3em; float:left; height:2em; }
.actions input, .actions button, .actions .button { margin:0; }
#file_menu { right:0; position:absolute; top:0; }
#file_menu a { display:block; float:left; background-image:none; text-decoration:none; }
.file_upload_form, #file_newfolder_form { display:inline; float: left; margin-left:0; }
#fileSelector, #file_upload_submit, #file_newfolder_submit { display:none; }
.file_upload_wrapper, #file_newfolder_name { background-repeat:no-repeat; background-position:.5em .5em; padding-left:2em; }
-.file_upload_wrapper { font-weight:bold; display:-moz-inline-box; /* fallback for older firefox versions*/ display:inline-block; padding-left:0; overflow:hidden; position:relative; margin:0;}
+.file_upload_wrapper { font-weight:bold; display:-moz-inline-box; /* fallback for older firefox versions*/ display:block; float:left; padding-left:0; overflow:hidden; position:relative; margin:0; margin-left:2px; }
.file_upload_wrapper .file_upload_button_wrapper { position:absolute; top:0; left:0; width:100%; height:100%; cursor:pointer; z-index:1000; }
-#new { float:left; border-top-right-radius:0; border-bottom-right-radius:0; margin:0 0 0 1em; border-right:none; z-index:1010; height:1.3em; }
-#new.active { border-bottom-left-radius:0; border-bottom:none; }
+#new { background-color:#5bb75b; float:left; margin:0 0 0 1em; border-right:none; z-index:1010; height:1.3em; }
+#new:hover, a.file_upload_button_wrapper:hover + button.file_upload_filename { background-color:#4b964b; }
+#new.active { border-bottom-left-radius:0; border-bottom-right-radius:0; border-bottom:none; }
#new>a { padding:.5em 1.2em .3em; color:#fff; text-shadow:0 1px 0 #51a351; }
#new>ul { display:none; position:fixed; text-align:left; padding:.5em; background:#f8f8f8; margin-top:0.075em; border:1px solid #ddd; min-width:7em; margin-left:-.5em; z-index:-1; }
#new>ul>li { margin:.3em; padding-left:2em; background-repeat:no-repeat; cursor:pointer; padding-bottom:0.1em }
#new>ul>li>p { cursor:pointer; }
#new>ul>li>input { padding:0.3em; margin:-0.3em; }
-#new, .file_upload_filename { background:#5bb75b; border:1px solid; border-color:#51a351 #419341 #387038; -moz-box-shadow:0 1px 1px #f8f8f8, 1px 1px 1px #ada inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 1px 1px 1px #ada inset; box-shadow:0 1px 1px #f8f8f8, 1px 1px 1px #ada inset; }
-#new .popup { border-top-left-radius:0; }
+#new, .file_upload_filename { border:1px solid; border-color:#51a351 #419341 #387038; -moz-box-shadow:0 1px 1px #f8f8f8, 1px 1px 1px #ada inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 1px 1px 1px #ada inset; box-shadow:0 1px 1px #f8f8f8, 1px 1px 1px #ada inset; }
+#new .popup { border-top-left-radius:0; z-index:10; }
#file_newfolder_name { background-image:url('%webroot%/core/img/places/folder.svg'); font-weight:normal; width:7em; }
.file_upload_start, .file_upload_filename { font-size:1em; }
@@ -28,9 +29,7 @@
.file_upload_target { display:none; }
.file_upload_start { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; z-index:1; position:absolute; left:0; top:0; width:100%; cursor:pointer;}
-.file_upload_filename.active { border-bottom-right-radius:0 }
-.file_upload_filename { z-index:100; padding-left: 0.8em; padding-right: 0.8em; cursor:pointer; border-top-left-radius:0; border-bottom-left-radius:0; }
-.file_upload_filename img { position: absolute; top: 0.4em; left: 0.4em; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
+.file_upload_filename { background-color:#5bb75b; z-index:100; cursor:pointer; background-image: url('%webroot%/core/img/actions/upload-white.svg'); background-repeat: no-repeat; background-position: center; height: 2.29em; width: 2.5em; }
#upload { position:absolute; right:13.5em; top:0em; }
#upload #uploadprogressbar { position:relative; display:inline-block; width:10em; height:1.5em; top:.4em; }
@@ -58,13 +57,13 @@ table th#headerDate, table td.date { width:11em; padding:0 .1em 0 1em; text-alig
table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; }
-table td.filename a.name input, table td.filename a.name form { width:100%; cursor:text; }
+table td.filename input.filename { width:100%; cursor:text; }
table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em 0; }
table td.filename .nametext, .uploadtext, .modified { float:left; padding:.3em 0; }
// TODO fix usability bug (accidental file/folder selection)
table td.filename .nametext { width:40em; overflow:hidden; text-overflow:ellipsis; }
table td.filename .uploadtext { font-weight:normal; margin-left:.5em; }
-table td.filename form { float:left; font-size:.85em; }
+table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
table thead.fixed tr{ position:fixed; top:6.5em; z-index:49; -moz-box-shadow:0 -3px 7px #ddd; -webkit-box-shadow:0 -3px 7px #ddd; box-shadow:0 -3px 7px #ddd; }
table thead.fixed { height:2em; }
#fileList tr td.filename>input[type=checkbox]:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 200ms; -moz-transition:opacity 200ms; -o-transition:opacity 200ms; transition:opacity 200ms; }
@@ -87,3 +86,5 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
#navigation>ul>li:first-child+li { padding-top:2.9em; }
#scanning-message{ top:40%; left:40%; position:absolute; display:none; }
+
+div.crumb a{ padding: 0.9em 0 0.7em 0; }
diff --git a/apps/files/index.php b/apps/files/index.php
index 493087d26f1..92fda5b21e5 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -36,7 +36,7 @@ if(!isset($_SESSION['timezone'])) {
}
OCP\App::setActiveNavigationEntry( 'files_index' );
// Load the files
-$dir = isset( $_GET['dir'] ) ? stripslashes($_GET['dir']) : '';
+$dir = isset( $_GET['dir'] ) ? urldecode(stripslashes($_GET['dir'])) : '';
// Redirect if directory does not exist
if(!OC_Filesystem::is_dir($dir.'/')) {
header('Location: '.$_SERVER['SCRIPT_NAME'].'');
@@ -85,9 +85,9 @@ $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize')
$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
-$freeSpace=OC_Filesystem::free_space('/');
+$freeSpace=OC_Filesystem::free_space($dir);
$freeSpace=max($freeSpace,0);
-$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
+$maxUploadFilesize = min($maxUploadFilesize, $freeSpace);
$permissions = OCP\Share::PERMISSION_READ;
if (OC_Filesystem::isUpdatable($dir.'/')) {
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 1403d345e8a..e184cbfa915 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -157,7 +157,7 @@ $(document).ready(function(){
var downloadScope = 'file';
}
FileActions.register(downloadScope,'Download', OC.PERMISSION_READ, function(){return OC.imagePath('core','actions/download');},function(filename){
- window.location=OC.filePath('files', 'ajax', 'download.php') + encodeURIComponent('?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val()));
+ window.location=OC.filePath('files', 'ajax', 'download.php') + '&files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val());
});
});
@@ -179,6 +179,7 @@ FileActions.register('all','Delete', OC.PERMISSION_DELETE, function(){return OC.
$('.tipsy').remove();
});
+// t('files', 'Rename')
FileActions.register('all','Rename', OC.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename');},function(filename){
FileList.rename(filename);
});
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 7ebfd4b68bb..6b49f622668 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -4,19 +4,20 @@ var FileList={
$('#fileList').empty().html(fileListHtml);
},
addFile:function(name,size,lastModified,loading,hidden){
- var img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png');
- var html='<tr data-type="file" data-size="'+size+'" data-permissions="'+$('#permissions').val()+'">';
+ var basename, extension, simpleSize, sizeColor, lastModifiedTime, modifiedColor,
+ img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png'),
+ html='<tr data-type="file" data-size="'+size+'" data-permissions="'+$('#permissions').val()+'">';
if(name.indexOf('.')!=-1){
- var basename=name.substr(0,name.lastIndexOf('.'));
- var extension=name.substr(name.lastIndexOf('.'));
+ basename=name.substr(0,name.lastIndexOf('.'));
+ extension=name.substr(name.lastIndexOf('.'));
}else{
- var basename=name;
- var extension=false;
+ basename=name;
+ extension=false;
}
html+='<td class="filename" style="background-image:url('+img+')"><input type="checkbox" />';
- html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '&lt;').replace(/>/, '&gt;')+'/'+name+'"><span class="nametext">'+basename;
+ html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '&lt;').replace(/>/, '&gt;')+'/'+escapeHTML(name)+'"><span class="nametext">'+escapeHTML(basename);
if(extension){
- html+='<span class="extension">'+extension+'</span>';
+ html+='<span class="extension">'+escapeHTML(extension)+'</span>';
}
html+='</span></a></td>';
if(size!='Pending'){
@@ -41,10 +42,11 @@ var FileList={
}
},
addDir:function(name,size,lastModified,hidden){
+ var html, td, link_elem, sizeColor, lastModifiedTime, modifiedColor;
html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name, "data-permissions": $('#permissions').val()});
td = $('<td></td>').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' });
td.append('<input type="checkbox" />');
- var link_elem = $('<a></a>').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"&dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') });
+ link_elem = $('<a></a>').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"&dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') });
link_elem.append($('<span></span>').addClass('nametext').text(name));
link_elem.append($('<span></span>').attr({'class': 'uploadtext', 'currentUploads': 0}));
td.append(link_elem);
@@ -71,7 +73,7 @@ var FileList={
}
},
refresh:function(data) {
- result = jQuery.parseJSON(data.responseText);
+ var result = jQuery.parseJSON(data.responseText);
if(typeof(result.data.breadcrumb) != 'undefined'){
updateBreadcrumb(result.data.breadcrumb);
}
@@ -88,14 +90,13 @@ var FileList={
},
insertElement:function(name,type,element){
//find the correct spot to insert the file or folder
- var fileElements=$('tr[data-file][data-type="'+type+'"]:visible');
- var pos;
+ var pos, fileElements=$('tr[data-file][data-type="'+type+'"]:visible');
if(name.localeCompare($(fileElements[0]).attr('data-file'))<0){
pos=-1;
}else if(name.localeCompare($(fileElements[fileElements.length-1]).attr('data-file'))>0){
pos=fileElements.length-1;
}else{
- for(var pos=0;pos<fileElements.length-1;pos++){
+ for(pos=0;pos<fileElements.length-1;pos++){
if(name.localeCompare($(fileElements[pos]).attr('data-file'))>0 && name.localeCompare($(fileElements[pos+1]).attr('data-file'))<0){
break;
}
@@ -115,11 +116,14 @@ var FileList={
$('#emptyfolder').hide();
$('.file_upload_filename').removeClass('highlight');
},
- loadingDone:function(name){
- var tr=$('tr').filterAttr('data-file',name);
+ loadingDone:function(name, id){
+ var mime, tr=$('tr').filterAttr('data-file',name);
tr.data('loading',false);
- var mime=tr.data('mime');
+ mime=tr.data('mime');
tr.attr('data-mime',mime);
+ if (id != null) {
+ tr.attr('data-id', id);
+ }
getMimeIcon(mime,function(path){
tr.find('td.filename').attr('style','background-image:url('+path+')');
});
@@ -129,14 +133,15 @@ var FileList={
return $('tr').filterAttr('data-file',name).data('loading');
},
rename:function(name){
- var tr=$('tr').filterAttr('data-file',name);
+ var tr, td, input, form;
+ tr=$('tr').filterAttr('data-file',name);
tr.data('renaming',true);
- var td=tr.children('td.filename');
- var input=$('<input class="filename"></input>').val(name);
- var form=$('<form></form>')
+ td=tr.children('td.filename');
+ input=$('<input class="filename"></input>').val(name);
+ form=$('<form></form>');
form.append(input);
- td.children('a.name').text('');
- td.children('a.name').append(form)
+ td.children('a.name').hide();
+ td.append(form);
input.focus();
form.submit(function(event){
event.stopPropagation();
@@ -151,25 +156,28 @@ var FileList={
OC.dialogs.alert(result.data.message, 'Error moving file');
newname = name;
}
+ tr.data('renaming',false);
});
+
}
}
tr.attr('data-file', newname);
var path = td.children('a.name').attr('href');
td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname)));
- if (newname.indexOf('.') > 0) {
+ if (newname.indexOf('.') > 0 && tr.data('type') != 'dir') {
var basename=newname.substr(0,newname.lastIndexOf('.'));
} else {
var basename=newname;
}
- td.children('a.name').empty();
- var span=$('<span class="nametext"></span>');
- span.text(basename);
- td.children('a.name').append(span);
- if (newname.indexOf('.') > 0) {
- span.append($('<span class="extension">'+newname.substr(newname.lastIndexOf('.'))+'</span>'));
+ td.find('a.name span.nametext').text(basename);
+ if (newname.indexOf('.') > 0 && tr.data('type') != 'dir') {
+ if (td.find('a.name span.extension').length == 0 ) {
+ td.find('a.name span.nametext').append('<span class="extension"></span>');
+ }
+ td.find('a.name span.extension').text(newname.substr(newname.lastIndexOf('.')));
}
- tr.data('renaming',false);
+ form.remove();
+ td.children('a.name').show();
return false;
});
input.click(function(event){
@@ -183,9 +191,9 @@ var FileList={
checkName:function(oldName, newName, isNewFile) {
if (isNewFile || $('tr').filterAttr('data-file', newName).length > 0) {
if (isNewFile) {
- $('#notification').html(newName+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
+ $('#notification').html(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
} else {
- $('#notification').html(newName+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
+ $('#notification').html(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
}
$('#notification').data('oldName', oldName);
$('#notification').data('newName', newName);
@@ -232,9 +240,9 @@ var FileList={
FileList.finishReplace();
};
if (isNewFile) {
- $('#notification').html(t('files', 'replaced')+' '+newName+'<span class="undo">'+t('files', 'undo')+'</span>');
+ $('#notification').html(t('files', 'replaced {new_name}', {new_name: newName})+'<span class="undo">'+t('files', 'undo')+'</span>');
} else {
- $('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+'<span class="undo">'+t('files', 'undo')+'</span>');
+ $('#notification').html(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
}
$('#notification').fadeIn();
},
@@ -255,21 +263,23 @@ var FileList={
},
do_delete:function(files){
// Finish any existing actions
- if (FileList.lastAction || !FileList.useUndo) {
- if(!FileList.deleteFiles) {
- FileList.prepareDeletion(files);
- }
+ if (FileList.lastAction) {
FileList.lastAction();
- return;
}
+
FileList.prepareDeletion(files);
- // NOTE: Temporary fix to change the text to unshared for files in root of Shared folder
- if ($('#dir').val() == '/Shared') {
- $('#notification').html(t('files', 'unshared')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>');
+
+ if (!FileList.useUndo) {
+ FileList.lastAction();
} else {
- $('#notification').html(t('files', 'deleted')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>');
+ // NOTE: Temporary fix to change the text to unshared for files in root of Shared folder
+ if ($('#dir').val() == '/Shared') {
+ $('#notification').html(t('files', 'unshared {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
+ } else {
+ $('#notification').html(t('files', 'deleted {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
+ }
+ $('#notification').fadeIn();
}
- $('#notification').fadeIn();
},
finishDelete:function(ready,sync){
if(!FileList.deleteCanceled && FileList.deleteFiles){
@@ -277,6 +287,7 @@ var FileList={
$.ajax({
url: OC.filePath('files', 'ajax', 'delete.php'),
async:!sync,
+ type:'post',
data: {dir:$('#dir').val(),files:fileNames},
complete: function(data){
boolOperationFinished(data, function(){
@@ -312,7 +323,7 @@ var FileList={
FileList.finishDelete(null, true);
};
}
-}
+};
$(document).ready(function(){
$('#notification').hide();
@@ -358,7 +369,7 @@ $(document).ready(function(){
FileList.finishDelete(null, true);
}
});
- FileList.useUndo=('onbeforeunload' in window)
+ FileList.useUndo=(window.onbeforeunload)?true:false;
$(window).bind('beforeunload', function (){
if (FileList.lastAction) {
FileList.lastAction();
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index aefd6f20bec..549204e8572 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -178,7 +178,12 @@ $(document).ready(function() {
var dir=$('#dir').val()||'/';
$('#notification').text(t('files','generating ZIP-file, it may take some time.'));
$('#notification').fadeIn();
- window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: files });
+ // use special download URL if provided, e.g. for public shared files
+ if ( (downloadURL = document.getElementById("downloadURL")) ) {
+ window.location=downloadURL.value+"&download&files="+files;
+ } else {
+ window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: files });
+ }
return false;
});
@@ -195,6 +200,7 @@ $(document).ready(function() {
e.preventDefault(); // prevent browser from doing anything, if file isn't dropped in dropZone
});
+ if ( document.getElementById("data-upload-form") ) {
$(function() {
$('.file_upload_start').fileupload({
dropZone: $('#content'), // restrict dropZone to content div
@@ -203,7 +209,7 @@ $(document).ready(function() {
var totalSize=0;
if(files){
for(var i=0;i<files.length;i++){
- if(files[i].size ==0 && files[i].type== '')
+ if(files[i].size ==0 || files[i].type== '')
{
OC.dialogs.alert(t('files', 'Unable to upload your file as it is a directory or has 0 bytes'), t('files', 'Upload Error'));
return;
@@ -256,7 +262,7 @@ $(document).ready(function() {
uploadtext.text(t('files', '1 file uploading'));
uploadtext.show();
} else {
- uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+ uploadtext.text(t('files', '{count} files uploading', {count: currentUploads}));
}
}
}
@@ -276,7 +282,7 @@ $(document).ready(function() {
var fileName = files[i].name
var dropTarget = $(e.originalEvent.target).closest('tr');
if(dropTarget && dropTarget.attr('data-type') === 'dir') { // drag&drop upload to folder
- var dirName = dropTarget.attr('data-file')
+ var dirName = dropTarget.attr('data-file');
var jqXHR = $('.file_upload_start').fileupload('send', {files: files[i],
formData: function(form) {
var formArray = form.serializeArray();
@@ -301,7 +307,7 @@ $(document).ready(function() {
uploadtext.text('');
uploadtext.hide();
} else {
- uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+ uploadtext.text(t('files', '{count} files uploading', {count: currentUploads}));
}
})
.error(function(jqXHR, textStatus, errorThrown) {
@@ -316,7 +322,7 @@ $(document).ready(function() {
uploadtext.text('');
uploadtext.hide();
} else {
- uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+ uploadtext.text(t('files', '{count} files uploading', {count: currentUploads}));
}
$('#notification').hide();
$('#notification').text(t('files', 'Upload cancelled.'));
@@ -336,12 +342,12 @@ $(document).ready(function() {
if(response[0] != undefined && response[0].status == 'success') {
var file=response[0];
delete uploadingFiles[file.name];
- $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
+ $('tr').filterAttr('data-file',file.name).data('mime',file.mime).data('id',file.id);
var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
if(size==t('files','Pending')){
$('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
}
- FileList.loadingDone(file.name);
+ FileList.loadingDone(file.name, file.id);
} else {
$('#notification').text(t('files', response.data.message));
$('#notification').fadeIn();
@@ -356,21 +362,22 @@ $(document).ready(function() {
$('#notification').fadeIn();
}
});
- uploadingFiles[files[i].name] = jqXHR;
+ uploadingFiles[uniqueName] = jqXHR;
}
}
}else{
data.submit().success(function(data, status) {
- response = jQuery.parseJSON(data[0].body.innerText);
+ // in safari data is a string
+ response = jQuery.parseJSON(typeof data === 'string' ? data : data[0].body.innerText);
if(response[0] != undefined && response[0].status == 'success') {
var file=response[0];
delete uploadingFiles[file.name];
- $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
+ $('tr').filterAttr('data-file',file.name).data('mime',file.mime).data('id',file.id);
var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
if(size==t('files','Pending')){
$('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
}
- FileList.loadingDone(file.name);
+ FileList.loadingDone(file.name, file.id);
} else {
$('#notification').text(t('files', response.data.message));
$('#notification').fadeIn();
@@ -407,7 +414,7 @@ $(document).ready(function() {
}
})
});
-
+ }
$.assocArraySize = function(obj) {
// http://stackoverflow.com/a/6700/11236
var size = 0, key;
@@ -511,7 +518,8 @@ $(document).ready(function() {
var date=new Date();
FileList.addFile(name,0,date,false,hidden);
var tr=$('tr').filterAttr('data-file',name);
- tr.data('mime','text/plain');
+ tr.data('mime','text/plain').data('id',result.data.id);
+ tr.attr('data-id', result.data.id);
getMimeIcon('text/plain',function(path){
tr.find('td.filename').attr('style','background-image:url('+path+')');
});
@@ -529,6 +537,8 @@ $(document).ready(function() {
if (result.status == 'success') {
var date=new Date();
FileList.addDir(name,0,date,hidden);
+ var tr=$('tr').filterAttr('data-file',name);
+ tr.attr('data-id', result.data.id);
} else {
OC.dialogs.alert(result.data.message, 'Error');
}
@@ -559,11 +569,13 @@ $(document).ready(function() {
eventSource.listen('success',function(data){
var mime=data.mime;
var size=data.size;
+ var id=data.id;
$('#uploadprogressbar').fadeOut();
var date=new Date();
FileList.addFile(localName,size,date,false,hidden);
var tr=$('tr').filterAttr('data-file',localName);
- tr.data('mime',mime);
+ tr.data('mime',mime).data('id',id);
+ tr.attr('data-id', id);
getMimeIcon(mime,function(path){
tr.find('td.filename').attr('style','background-image:url('+path+')');
});
@@ -590,7 +602,10 @@ $(document).ready(function() {
var lastWidth = 0;
var breadcrumbs = [];
- var breadcrumbsWidth = $('#navigation').get(0).offsetWidth;
+ var breadcrumbsWidth = 0;
+ if ( document.getElementById("navigation") ) {
+ breadcrumbsWidth = $('#navigation').get(0).offsetWidth;
+ }
var hiddenBreadcrumbs = 0;
$.each($('.crumb'), function(index, breadcrumb) {
@@ -663,7 +678,7 @@ function scanFiles(force,dir){
var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir});
scanFiles.cancel=scannerEventSource.close.bind(scannerEventSource);
scannerEventSource.listen('scanning',function(data){
- $('#scan-count').text(data.count + ' ' + t('files', 'files scanned'));
+ $('#scan-count').text(t('files', '{count} files scanned', {count: data.count}));
$('#scan-current').text(data.file+'/');
});
scannerEventSource.listen('success',function(success){
@@ -773,9 +788,9 @@ function procesSelection(){
var selection='';
if(selectedFolders.length>0){
if(selectedFolders.length==1){
- selection+='1 '+t('files','folder');
+ selection+=t('files','1 folder');
}else{
- selection+=selectedFolders.length+' '+t('files','folders');
+ selection+=t('files','{count} folders',{count: selectedFolders.length});
}
if(selectedFiles.length>0){
selection+=' & ';
@@ -783,9 +798,9 @@ function procesSelection(){
}
if(selectedFiles.length>0){
if(selectedFiles.length==1){
- selection+='1 '+t('files','file');
+ selection+=t('files','1 file');
}else{
- selection+=selectedFiles.length+' '+t('files','files');
+ selection+=t('files','{count} files',{count: selectedFiles.length});
}
}
$('#headerName>span.name').text(selection);
@@ -828,20 +843,19 @@ function relative_modified_date(timestamp) {
var diffhours = Math.round(diffminutes/60);
var diffdays = Math.round(diffhours/24);
var diffmonths = Math.round(diffdays/31);
- var diffyears = Math.round(diffdays/365);
if(timediff < 60) { return t('files','seconds ago'); }
- else if(timediff < 120) { return '1 '+t('files','minute ago'); }
- else if(timediff < 3600) { return diffminutes+' '+t('files','minutes ago'); }
+ else if(timediff < 120) { return t('files','1 minute ago'); }
+ else if(timediff < 3600) { return t('files','{minutes} minutes ago',{minutes: diffminutes}); }
//else if($timediff < 7200) { return '1 hour ago'; }
//else if($timediff < 86400) { return $diffhours.' hours ago'; }
else if(timediff < 86400) { return t('files','today'); }
else if(timediff < 172800) { return t('files','yesterday'); }
- else if(timediff < 2678400) { return diffdays+' '+t('files','days ago'); }
+ else if(timediff < 2678400) { return t('files','{days} days ago',{days: diffdays}); }
else if(timediff < 5184000) { return t('files','last month'); }
//else if($timediff < 31556926) { return $diffmonths.' months ago'; }
else if(timediff < 31556926) { return t('files','months ago'); }
else if(timediff < 63113852) { return t('files','last year'); }
- else { return diffyears+' '+t('files','years ago'); }
+ else { return t('files','years ago'); }
}
function getMimeIcon(mime, ready){
diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
index 52480ce7ff8..a5530851d2e 100644
--- a/apps/files/l10n/ar.php
+++ b/apps/files/l10n/ar.php
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "المجلد المؤقت غير موجود",
"Files" => "الملفات",
"Delete" => "محذوف",
+"Name" => "الاسم",
"Size" => "حجم",
"Modified" => "معدل",
"Maximum upload size" => "الحد الأقصى لحجم الملفات التي يمكن رفعها",
@@ -15,7 +16,6 @@
"Folder" => "مجلد",
"Upload" => "إرفع",
"Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!",
-"Name" => "الاسم",
"Download" => "تحميل",
"Upload too large" => "حجم الترفيع أعلى من المسموح",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php
index 624e08959fe..8c8054303bb 100644
--- a/apps/files/l10n/bg_BG.php
+++ b/apps/files/l10n/bg_BG.php
@@ -11,11 +11,9 @@
"Upload Error" => "Грешка при качване",
"Upload cancelled." => "Качването е отменено.",
"Invalid name, '/' is not allowed." => "Неправилно име – \"/\" не е позволено.",
+"Name" => "Име",
"Size" => "Размер",
"Modified" => "Променено",
-"folder" => "папка",
-"folders" => "папки",
-"file" => "файл",
"Maximum upload size" => "Макс. размер за качване",
"0 is unlimited" => "0 означава без ограничение",
"New" => "Нов",
@@ -25,7 +23,6 @@
"Upload" => "Качване",
"Cancel upload" => "Отказване на качването",
"Nothing in here. Upload something!" => "Няма нищо, качете нещо!",
-"Name" => "Име",
"Share" => "Споделяне",
"Download" => "Изтегляне",
"Upload too large" => "Файлът е прекалено голям",
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index 26c6ad4de6f..a4d66b297b2 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -9,28 +9,44 @@
"Files" => "Fitxers",
"Unshare" => "Deixa de compartir",
"Delete" => "Suprimeix",
-"already exists" => "ja existeix",
+"Rename" => "Reanomena",
+"{new_name} already exists" => "{new_name} ja existeix",
"replace" => "substitueix",
"suggest name" => "sugereix un nom",
"cancel" => "cancel·la",
-"replaced" => "substituït",
+"replaced {new_name}" => "s'ha substituït {new_name}",
"undo" => "desfés",
-"with" => "per",
-"unshared" => "No compartits",
-"deleted" => "esborrat",
+"replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}",
+"unshared {files}" => "no compartits {files}",
+"deleted {files}" => "eliminats {files}",
"generating ZIP-file, it may take some time." => "s'estan generant fitxers ZIP, pot trigar una estona.",
"Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes",
"Upload Error" => "Error en la pujada",
"Pending" => "Pendents",
+"1 file uploading" => "1 fitxer pujant",
+"{count} files uploading" => "{count} fitxers en pujada",
"Upload cancelled." => "La pujada s'ha cancel·lat.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
"Invalid name, '/' is not allowed." => "El nom no és vàlid, no es permet '/'.",
+"{count} files scanned" => "{count} fitxers escannejats",
+"error while scanning" => "error durant l'escaneig",
+"Name" => "Nom",
"Size" => "Mida",
"Modified" => "Modificat",
-"folder" => "carpeta",
-"folders" => "carpetes",
-"file" => "fitxer",
-"files" => "fitxers",
+"1 folder" => "1 carpeta",
+"{count} folders" => "{count} carpetes",
+"1 file" => "1 fitxer",
+"{count} files" => "{count} fitxers",
+"seconds ago" => "segons enrere",
+"1 minute ago" => "fa 1 minut",
+"{minutes} minutes ago" => "fa {minutes} minuts",
+"today" => "avui",
+"yesterday" => "ahir",
+"{days} days ago" => "fa {days} dies",
+"last month" => "el mes passat",
+"months ago" => "mesos enrere",
+"last year" => "l'any passat",
+"years ago" => "anys enrere",
"File handling" => "Gestió de fitxers",
"Maximum upload size" => "Mida màxima de pujada",
"max. possible: " => "màxim possible:",
@@ -46,7 +62,6 @@
"Upload" => "Puja",
"Cancel upload" => "Cancel·la la pujada",
"Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!",
-"Name" => "Nom",
"Share" => "Comparteix",
"Download" => "Baixa",
"Upload too large" => "La pujada és massa gran",
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index 41ef4e78499..9f9542ea809 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -9,28 +9,44 @@
"Files" => "Soubory",
"Unshare" => "Zrušit sdílení",
"Delete" => "Smazat",
-"already exists" => "již existuje",
+"Rename" => "Přejmenovat",
+"{new_name} already exists" => "{new_name} již existuje",
"replace" => "nahradit",
"suggest name" => "navrhnout název",
"cancel" => "zrušit",
-"replaced" => "nahrazeno",
+"replaced {new_name}" => "nahrazeno {new_name}",
"undo" => "zpět",
-"with" => "s",
-"unshared" => "sdílení zrušeno",
-"deleted" => "smazáno",
+"replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}",
+"unshared {files}" => "sdílení zrušeno pro {files}",
+"deleted {files}" => "smazáno {files}",
"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to nějakou dobu trvat.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů",
"Upload Error" => "Chyba odesílání",
"Pending" => "Čekající",
+"1 file uploading" => "odesílá se 1 soubor",
+"{count} files uploading" => "odesílám {count} souborů",
"Upload cancelled." => "Odesílání zrušeno.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání.",
"Invalid name, '/' is not allowed." => "Neplatný název, znak '/' není povolen",
+"{count} files scanned" => "prozkoumáno {count} souborů",
+"error while scanning" => "chyba při prohledávání",
+"Name" => "Název",
"Size" => "Velikost",
"Modified" => "Změněno",
-"folder" => "složka",
-"folders" => "složky",
-"file" => "soubor",
-"files" => "soubory",
+"1 folder" => "1 složka",
+"{count} folders" => "{count} složky",
+"1 file" => "1 soubor",
+"{count} files" => "{count} soubory",
+"seconds ago" => "před pár sekundami",
+"1 minute ago" => "před 1 minutou",
+"{minutes} minutes ago" => "před {minutes} minutami",
+"today" => "dnes",
+"yesterday" => "včera",
+"{days} days ago" => "před {days} dny",
+"last month" => "minulý měsíc",
+"months ago" => "před pár měsíci",
+"last year" => "minulý rok",
+"years ago" => "před pár lety",
"File handling" => "Zacházení se soubory",
"Maximum upload size" => "Maximální velikost pro odesílání",
"max. possible: " => "největší možná: ",
@@ -46,7 +62,6 @@
"Upload" => "Odeslat",
"Cancel upload" => "Zrušit odesílání",
"Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.",
-"Name" => "Název",
"Share" => "Sdílet",
"Download" => "Stáhnout",
"Upload too large" => "Odeslaný soubor je příliš velký",
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index de0df6a26f0..5d45991f2a2 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -9,28 +9,44 @@
"Files" => "Filer",
"Unshare" => "Fjern deling",
"Delete" => "Slet",
-"already exists" => "findes allerede",
+"Rename" => "Omdøb",
+"{new_name} already exists" => "{new_name} eksisterer allerede",
"replace" => "erstat",
"suggest name" => "foreslå navn",
"cancel" => "fortryd",
-"replaced" => "erstattet",
+"replaced {new_name}" => "erstattede {new_name}",
"undo" => "fortryd",
-"with" => "med",
-"unshared" => "udelt",
-"deleted" => "Slettet",
+"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
+"unshared {files}" => "ikke delte {files}",
+"deleted {files}" => "slettede {files}",
"generating ZIP-file, it may take some time." => "genererer ZIP-fil, det kan tage lidt tid.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom",
"Upload Error" => "Fejl ved upload",
"Pending" => "Afventer",
+"1 file uploading" => "1 fil uploades",
+"{count} files uploading" => "{count} filer uploades",
"Upload cancelled." => "Upload afbrudt.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.",
"Invalid name, '/' is not allowed." => "Ugyldigt navn, '/' er ikke tilladt.",
+"{count} files scanned" => "{count} filer skannet",
+"error while scanning" => "fejl under scanning",
+"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Ændret",
-"folder" => "mappe",
-"folders" => "mapper",
-"file" => "fil",
-"files" => "filer",
+"1 folder" => "1 mappe",
+"{count} folders" => "{count} mapper",
+"1 file" => "1 fil",
+"{count} files" => "{count} filer",
+"seconds ago" => "sekunder siden",
+"1 minute ago" => "1 minut siden",
+"{minutes} minutes ago" => "{minutes} minutter siden",
+"today" => "i dag",
+"yesterday" => "i går",
+"{days} days ago" => "{days} dage siden",
+"last month" => "sidste måned",
+"months ago" => "måneder siden",
+"last year" => "sidste år",
+"years ago" => "år siden",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimal upload-størrelse",
"max. possible: " => "max. mulige: ",
@@ -46,7 +62,6 @@
"Upload" => "Upload",
"Cancel upload" => "Fortryd upload",
"Nothing in here. Upload something!" => "Her er tomt. Upload noget!",
-"Name" => "Navn",
"Share" => "Del",
"Download" => "Download",
"Upload too large" => "Upload for stor",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 701c3e877ad..545f840d8ce 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -7,30 +7,46 @@
"Missing a temporary folder" => "Temporärer Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
"Files" => "Dateien",
-"Unshare" => "Nicht mehr teilen",
+"Unshare" => "Nicht mehr freigeben",
"Delete" => "Löschen",
-"already exists" => "ist bereits vorhanden",
+"Rename" => "Umbenennen",
+"{new_name} already exists" => "{new_name} existiert bereits",
"replace" => "ersetzen",
"suggest name" => "Name vorschlagen",
"cancel" => "abbrechen",
-"replaced" => "ersetzt",
+"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
-"with" => "mit",
-"unshared" => "Nicht mehr teilen",
-"deleted" => "gelöscht",
+"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
+"unshared {files}" => "Freigabe von {files} aufgehoben",
+"deleted {files}" => "{files} gelöscht",
"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie ein Verzeichnis ist oder 0 Bytes hat.",
-"Upload Error" => "Fehler beim Hochladen",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
+"Upload Error" => "Fehler beim Upload",
"Pending" => "Ausstehend",
-"Upload cancelled." => "Hochladen abgebrochen.",
-"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
+"1 file uploading" => "Eine Datei wird hoch geladen",
+"{count} files uploading" => "{count} Dateien werden hochgeladen",
+"Upload cancelled." => "Upload abgebrochen.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.",
"Invalid name, '/' is not allowed." => "Ungültiger Name: \"/\" ist nicht erlaubt.",
+"{count} files scanned" => "{count} Dateien wurden gescannt",
+"error while scanning" => "Fehler beim Scannen",
+"Name" => "Name",
"Size" => "Größe",
"Modified" => "Bearbeitet",
-"folder" => "Ordner",
-"folders" => "Ordner",
-"file" => "Datei",
-"files" => "Dateien",
+"1 folder" => "1 Ordner",
+"{count} folders" => "{count} Ordner",
+"1 file" => "1 Datei",
+"{count} files" => "{count} Dateien",
+"seconds ago" => "Vor wenigen Sekunden",
+"1 minute ago" => "vor einer Minute",
+"{minutes} minutes ago" => "Vor {minutes} Minuten",
+"today" => "Heute",
+"yesterday" => "Gestern",
+"{days} days ago" => "Vor {days} Tag(en)",
+"last month" => "Letzten Monat",
+"months ago" => "Monate her",
+"last year" => "Letztes Jahr",
+"years ago" => "Jahre her",
"File handling" => "Dateibehandlung",
"Maximum upload size" => "Maximale Upload-Größe",
"max. possible: " => "maximal möglich:",
@@ -42,12 +58,11 @@
"New" => "Neu",
"Text file" => "Textdatei",
"Folder" => "Ordner",
-"From url" => "Von der URL",
+"From url" => "Von einer URL",
"Upload" => "Hochladen",
"Cancel upload" => "Upload abbrechen",
"Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!",
-"Name" => "Name",
-"Share" => "Teilen",
+"Share" => "Freigabe",
"Download" => "Herunterladen",
"Upload too large" => "Upload zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
new file mode 100644
index 00000000000..37e77472ab6
--- /dev/null
+++ b/apps/files/l10n/de_DE.php
@@ -0,0 +1,71 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Die Größe der hochzuladenden Datei überschreitet die upload_max_filesize-Richtlinie in php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die Größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde",
+"The uploaded file was only partially uploaded" => "Die Datei wurde nur teilweise hochgeladen.",
+"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
+"Missing a temporary folder" => "Temporärer Ordner fehlt.",
+"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
+"Files" => "Dateien",
+"Unshare" => "Nicht mehr freigeben",
+"Delete" => "Löschen",
+"Rename" => "Umbenennen",
+"{new_name} already exists" => "{new_name} existiert bereits",
+"replace" => "ersetzen",
+"suggest name" => "Name vorschlagen",
+"cancel" => "abbrechen",
+"replaced {new_name}" => "{new_name} ersetzt",
+"undo" => "rückgängig machen",
+"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
+"unshared {files}" => "Freigabe für {files} beendet",
+"deleted {files}" => "{files} gelöscht",
+"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
+"Upload Error" => "Fehler beim Upload",
+"Pending" => "Ausstehend",
+"1 file uploading" => "Eine Datei wird hoch geladen",
+"{count} files uploading" => "{count} Dateien wurden hochgeladen",
+"Upload cancelled." => "Upload abgebrochen.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
+"Invalid name, '/' is not allowed." => "Ungültiger Name: \"/\" ist nicht erlaubt.",
+"{count} files scanned" => "{count} Dateien wurden gescannt",
+"error while scanning" => "Fehler beim Scannen",
+"Name" => "Name",
+"Size" => "Größe",
+"Modified" => "Bearbeitet",
+"1 folder" => "1 Ordner",
+"{count} folders" => "{count} Ordner",
+"1 file" => "1 Datei",
+"{count} files" => "{count} Dateien",
+"seconds ago" => "Vor wenigen Sekunden",
+"1 minute ago" => "vor einer Minute",
+"{minutes} minutes ago" => "vor {minutes} Minuten",
+"today" => "Heute",
+"yesterday" => "Gestern",
+"{days} days ago" => "vor {days} Tage(en)",
+"last month" => "Letzten Monat",
+"months ago" => "Monate her",
+"last year" => "Letztes Jahr",
+"years ago" => "Jahre her",
+"File handling" => "Dateibehandlung",
+"Maximum upload size" => "Maximale Upload-Größe",
+"max. possible: " => "maximal möglich:",
+"Needed for multi-file and folder downloads." => "Für Mehrfachdatei- und Ordnerdownloads benötigt:",
+"Enable ZIP-download" => "ZIP-Download aktivieren",
+"0 is unlimited" => "0 bedeutet unbegrenzt",
+"Maximum input size for ZIP files" => "Maximale Größe für ZIP-Dateien",
+"Save" => "Speichern",
+"New" => "Neu",
+"Text file" => "Textdatei",
+"Folder" => "Ordner",
+"From url" => "Von einer URL",
+"Upload" => "Hochladen",
+"Cancel upload" => "Upload abbrechen",
+"Nothing in here. Upload something!" => "Alles leer. Bitte laden Sie etwas hoch!",
+"Share" => "Teilen",
+"Download" => "Herunterladen",
+"Upload too large" => "Upload zu groß",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
+"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
+"Current scanning" => "Scanne"
+);
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 9f311c6b28e..fef57c62283 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -1,51 +1,71 @@
<?php $TRANSLATIONS = array(
-"There is no error, the file uploaded with success" => "Δεν υπάρχει λάθος, το αρχείο μεταφορτώθηκε επιτυχώς",
-"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Το αρχείο που μεταφορτώθηκε υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"upload_max_filesize\" του php.ini",
+"There is no error, the file uploaded with success" => "Δεν υπάρχει σφάλμα, το αρχείο εστάλει επιτυχώς",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Το αρχείο που εστάλει υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"upload_max_filesize\" του php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Το αρχείο υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"MAX_FILE_SIZE\" που έχει οριστεί στην HTML φόρμα",
-"The uploaded file was only partially uploaded" => "Το αρχείο μεταφορώθηκε μόνο εν μέρει",
-"No file was uploaded" => "Το αρχείο δεν μεταφορτώθηκε",
-"Missing a temporary folder" => "Λείπει ένας προσωρινός φάκελος",
-"Failed to write to disk" => "Η εγγραφή στο δίσκο απέτυχε",
+"The uploaded file was only partially uploaded" => "Το αρχείο εστάλει μόνο εν μέρει",
+"No file was uploaded" => "Κανένα αρχείο δεν στάλθηκε",
+"Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος",
+"Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο",
"Files" => "Αρχεία",
+"Unshare" => "Διακοπή κοινής χρήσης",
"Delete" => "Διαγραφή",
-"already exists" => "υπάρχει ήδη",
+"Rename" => "Μετονομασία",
+"{new_name} already exists" => "{new_name} υπάρχει ήδη",
"replace" => "αντικατέστησε",
+"suggest name" => "συνιστώμενο όνομα",
"cancel" => "ακύρωση",
-"replaced" => "αντικαταστάθηκε",
+"replaced {new_name}" => "{new_name} αντικαταστάθηκε",
"undo" => "αναίρεση",
-"with" => "με",
-"deleted" => "διαγράφηκε",
+"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
+"unshared {files}" => "μη διαμοιρασμένα {files}",
+"deleted {files}" => "διαγραμμένα {files}",
"generating ZIP-file, it may take some time." => "παραγωγή αρχείου ZIP, ίσως διαρκέσει αρκετά.",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην μεταφόρτωση του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes",
-"Upload Error" => "Σφάλμα Μεταφόρτωσης",
-"Pending" => "Εν αναμονή",
-"Upload cancelled." => "Η μεταφόρτωση ακυρώθηκε.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην αποστολή του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes",
+"Upload Error" => "Σφάλμα Αποστολής",
+"Pending" => "Εκκρεμεί",
+"1 file uploading" => "1 αρχείο ανεβαίνει",
+"{count} files uploading" => "{count} αρχεία ανεβαίνουν",
+"Upload cancelled." => "Η αποστολή ακυρώθηκε.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Έξοδος από την σελίδα τώρα θα ακυρώσει την αποστολή.",
"Invalid name, '/' is not allowed." => "Μη έγκυρο όνομα, το '/' δεν επιτρέπεται.",
+"{count} files scanned" => "{count} αρχεία ανιχνεύτηκαν",
+"error while scanning" => "σφάλμα κατά την ανίχνευση",
+"Name" => "Όνομα",
"Size" => "Μέγεθος",
"Modified" => "Τροποποιήθηκε",
-"folder" => "φάκελος",
-"folders" => "φάκελοι",
-"file" => "αρχείο",
-"files" => "αρχεία",
+"1 folder" => "1 φάκελος",
+"{count} folders" => "{count} φάκελοι",
+"1 file" => "1 αρχείο",
+"{count} files" => "{count} αρχεία",
+"seconds ago" => "δευτερόλεπτα πριν",
+"1 minute ago" => "1 λεπτό πριν",
+"{minutes} minutes ago" => "{minutes} λεπτά πριν",
+"today" => "σήμερα",
+"yesterday" => "χτες",
+"{days} days ago" => "{days} ημέρες πριν",
+"last month" => "τελευταίο μήνα",
+"months ago" => "μήνες πριν",
+"last year" => "τελευταίο χρόνο",
+"years ago" => "χρόνια πριν",
"File handling" => "Διαχείριση αρχείων",
-"Maximum upload size" => "Μέγιστο μέγεθος μεταφόρτωσης",
+"Maximum upload size" => "Μέγιστο μέγεθος αποστολής",
"max. possible: " => "μέγιστο δυνατό:",
"Needed for multi-file and folder downloads." => "Απαραίτητο για κατέβασμα πολλαπλών αρχείων και φακέλων",
"Enable ZIP-download" => "Ενεργοποίηση κατεβάσματος ZIP",
"0 is unlimited" => "0 για απεριόριστο",
"Maximum input size for ZIP files" => "Μέγιστο μέγεθος για αρχεία ZIP",
+"Save" => "Αποθήκευση",
"New" => "Νέο",
"Text file" => "Αρχείο κειμένου",
"Folder" => "Φάκελος",
"From url" => "Από την διεύθυνση",
-"Upload" => "Μεταφόρτωση",
-"Cancel upload" => "Ακύρωση ανεβάσματος",
+"Upload" => "Αποστολή",
+"Cancel upload" => "Ακύρωση αποστολής",
"Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!",
-"Name" => "Όνομα",
-"Share" => "Διαμοίρασε",
+"Share" => "Διαμοιρασμός",
"Download" => "Λήψη",
-"Upload too large" => "Πολύ μεγάλο το αρχείο προς μεταφόρτωση",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος μεταφόρτωσης αρχείων σε αυτόν το διακομιστή.",
-"Files are being scanned, please wait." => "Τα αρχεία ανιχνεύονται, παρακαλώ περιμένετε",
+"Upload too large" => "Πολύ μεγάλο αρχείο προς αποστολή",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν το διακομιστή.",
+"Files are being scanned, please wait." => "Τα αρχεία σαρώνονται, παρακαλώ περιμένετε",
"Current scanning" => "Τρέχουσα αναζήτηση "
);
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
index 95df1363ff1..8d5d59f70dc 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -9,28 +9,30 @@
"Files" => "Dosieroj",
"Unshare" => "Malkunhavigi",
"Delete" => "Forigi",
-"already exists" => "jam ekzistas",
+"Rename" => "Alinomigi",
"replace" => "anstataŭigi",
"suggest name" => "sugesti nomon",
"cancel" => "nuligi",
-"replaced" => "anstataŭigita",
"undo" => "malfari",
-"with" => "kun",
-"unshared" => "malkunhavigita",
-"deleted" => "forigita",
"generating ZIP-file, it may take some time." => "generanta ZIP-dosiero, ĝi povas daŭri iom da tempo",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn",
"Upload Error" => "Alŝuta eraro",
"Pending" => "Traktotaj",
+"1 file uploading" => "1 dosiero estas alŝutata",
"Upload cancelled." => "La alŝuto nuliĝis.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.",
"Invalid name, '/' is not allowed." => "Nevalida nomo, “/” ne estas permesata.",
+"error while scanning" => "eraro dum skano",
+"Name" => "Nomo",
"Size" => "Grando",
"Modified" => "Modifita",
-"folder" => "dosierujo",
-"folders" => "dosierujoj",
-"file" => "dosiero",
-"files" => "dosieroj",
+"seconds ago" => "sekundoj antaŭe",
+"today" => "hodiaŭ",
+"yesterday" => "hieraŭ",
+"last month" => "lastamonate",
+"months ago" => "monatoj antaŭe",
+"last year" => "lastajare",
+"years ago" => "jaroj antaŭe",
"File handling" => "Dosieradministro",
"Maximum upload size" => "Maksimuma alŝutogrando",
"max. possible: " => "maks. ebla: ",
@@ -46,7 +48,6 @@
"Upload" => "Alŝuti",
"Cancel upload" => "Nuligi alŝuton",
"Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!",
-"Name" => "Nomo",
"Share" => "Kunhavigi",
"Download" => "Elŝuti",
"Upload too large" => "Elŝuto tro larĝa",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index d07149d8595..1b783281eb8 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -8,29 +8,45 @@
"Failed to write to disk" => "La escritura en disco ha fallado",
"Files" => "Archivos",
"Unshare" => "Dejar de compartir",
-"Delete" => "Eliminado",
-"already exists" => "ya existe",
+"Delete" => "Eliminar",
+"Rename" => "Renombrar",
+"{new_name} already exists" => "{new_name} ya existe",
"replace" => "reemplazar",
"suggest name" => "sugerir nombre",
"cancel" => "cancelar",
-"replaced" => "reemplazado",
+"replaced {new_name}" => "reemplazado {new_name}",
"undo" => "deshacer",
-"with" => "con",
-"unshared" => "no compartido",
-"deleted" => "borrado",
+"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
+"unshared {files}" => "{files} descompartidos",
+"deleted {files}" => "{files} eliminados",
"generating ZIP-file, it may take some time." => "generando un fichero ZIP, puede llevar un tiempo.",
"Unable to upload your file as it is a directory or has 0 bytes" => "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes",
"Upload Error" => "Error al subir el archivo",
"Pending" => "Pendiente",
+"1 file uploading" => "subiendo 1 archivo",
+"{count} files uploading" => "Subiendo {count} archivos",
"Upload cancelled." => "Subida cancelada.",
"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida.",
"Invalid name, '/' is not allowed." => "Nombre no válido, '/' no está permitido.",
+"{count} files scanned" => "{count} archivos escaneados",
+"error while scanning" => "error escaneando",
+"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
-"folder" => "carpeta",
-"folders" => "carpetas",
-"file" => "archivo",
-"files" => "archivos",
+"1 folder" => "1 carpeta",
+"{count} folders" => "{count} carpetas",
+"1 file" => "1 archivo",
+"{count} files" => "{count} archivos",
+"seconds ago" => "hace segundos",
+"1 minute ago" => "hace 1 minuto",
+"{minutes} minutes ago" => "hace {minutes} minutos",
+"today" => "hoy",
+"yesterday" => "ayer",
+"{days} days ago" => "hace {days} días",
+"last month" => "mes pasado",
+"months ago" => "hace meses",
+"last year" => "año pasado",
+"years ago" => "hace años",
"File handling" => "Tratamiento de archivos",
"Maximum upload size" => "Tamaño máximo de subida",
"max. possible: " => "máx. posible:",
@@ -46,11 +62,10 @@
"Upload" => "Subir",
"Cancel upload" => "Cancelar subida",
"Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!",
-"Name" => "Nombre",
"Share" => "Compartir",
"Download" => "Descargar",
"Upload too large" => "El archivo es demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor.",
"Files are being scanned, please wait." => "Se están escaneando los archivos, por favor espere.",
-"Current scanning" => "Escaneo actual"
+"Current scanning" => "Ahora escaneando"
);
diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php
new file mode 100644
index 00000000000..f9a943cf9f2
--- /dev/null
+++ b/apps/files/l10n/es_AR.php
@@ -0,0 +1,71 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "No se han producido errores, el archivo se ha subido con éxito",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "El archivo que intentás subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El archivo que intentás subir sobrepasa el tamaño definido por la variable MAX_FILE_SIZE especificada en el formulario HTML",
+"The uploaded file was only partially uploaded" => "El archivo que intentás subir solo se subió parcialmente",
+"No file was uploaded" => "El archivo no fue subido",
+"Missing a temporary folder" => "Falta un directorio temporal",
+"Failed to write to disk" => "Error al escribir en el disco",
+"Files" => "Archivos",
+"Unshare" => "Dejar de compartir",
+"Delete" => "Borrar",
+"Rename" => "Cambiar nombre",
+"{new_name} already exists" => "{new_name} ya existe",
+"replace" => "reemplazar",
+"suggest name" => "sugerir nombre",
+"cancel" => "cancelar",
+"replaced {new_name}" => "reemplazado {new_name}",
+"undo" => "deshacer",
+"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
+"unshared {files}" => "{files} se dejaron de compartir",
+"deleted {files}" => "{files} borrados",
+"generating ZIP-file, it may take some time." => "generando un archivo ZIP, puede llevar un tiempo.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes",
+"Upload Error" => "Error al subir el archivo",
+"Pending" => "Pendiente",
+"1 file uploading" => "Subiendo 1 archivo",
+"{count} files uploading" => "Subiendo {count} archivos",
+"Upload cancelled." => "La subida fue cancelada",
+"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.",
+"Invalid name, '/' is not allowed." => "Nombre no válido, no se permite '/' en él.",
+"{count} files scanned" => "{count} archivos escaneados",
+"error while scanning" => "error mientras se escaneaba",
+"Name" => "Nombre",
+"Size" => "Tamaño",
+"Modified" => "Modificado",
+"1 folder" => "1 directorio",
+"{count} folders" => "{count} directorios",
+"1 file" => "1 archivo",
+"{count} files" => "{count} archivos",
+"seconds ago" => "segundos atrás",
+"1 minute ago" => "hace 1 minuto",
+"{minutes} minutes ago" => "hace {minutes} minutos",
+"today" => "hoy",
+"yesterday" => "ayer",
+"{days} days ago" => "hace {days} días",
+"last month" => "el mes pasado",
+"months ago" => "meses atrás",
+"last year" => "el año pasado",
+"years ago" => "años atrás",
+"File handling" => "Tratamiento de archivos",
+"Maximum upload size" => "Tamaño máximo de subida",
+"max. possible: " => "máx. posible:",
+"Needed for multi-file and folder downloads." => "Es necesario para descargas multi-archivo y de carpetas",
+"Enable ZIP-download" => "Habilitar descarga en formato ZIP",
+"0 is unlimited" => "0 significa ilimitado",
+"Maximum input size for ZIP files" => "Tamaño máximo para archivos ZIP de entrada",
+"Save" => "Guardar",
+"New" => "Nuevo",
+"Text file" => "Archivo de texto",
+"Folder" => "Carpeta",
+"From url" => "Desde la URL",
+"Upload" => "Subir",
+"Cancel upload" => "Cancelar subida",
+"Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!",
+"Share" => "Compartir",
+"Download" => "Descargar",
+"Upload too large" => "El archivo es demasiado grande",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que intentás subir sobrepasan el tamaño máximo ",
+"Files are being scanned, please wait." => "Se están escaneando los archivos, por favor esperá.",
+"Current scanning" => "Escaneo actual"
+);
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 88e91719282..9b9679068c6 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -9,28 +9,44 @@
"Files" => "Failid",
"Unshare" => "Lõpeta jagamine",
"Delete" => "Kustuta",
-"already exists" => "on juba olemas",
+"Rename" => "ümber",
+"{new_name} already exists" => "{new_name} on juba olemas",
"replace" => "asenda",
"suggest name" => "soovita nime",
"cancel" => "loobu",
-"replaced" => "asendatud",
+"replaced {new_name}" => "asendatud nimega {new_name}",
"undo" => "tagasi",
-"with" => "millega",
-"unshared" => "jagamata",
-"deleted" => "kustutatud",
+"replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}",
+"unshared {files}" => "jagamata {files}",
+"deleted {files}" => "kustutatud {files}",
"generating ZIP-file, it may take some time." => "ZIP-faili loomine, see võib veidi aega võtta.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti",
"Upload Error" => "Üleslaadimise viga",
"Pending" => "Ootel",
+"1 file uploading" => "1 faili üleslaadimisel",
+"{count} files uploading" => "{count} faili üleslaadimist",
"Upload cancelled." => "Üleslaadimine tühistati.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.",
"Invalid name, '/' is not allowed." => "Vigane nimi, '/' pole lubatud.",
+"{count} files scanned" => "{count} faili skännitud",
+"error while scanning" => "viga skännimisel",
+"Name" => "Nimi",
"Size" => "Suurus",
"Modified" => "Muudetud",
-"folder" => "kaust",
-"folders" => "kausta",
-"file" => "fail",
-"files" => "faili",
+"1 folder" => "1 kaust",
+"{count} folders" => "{count} kausta",
+"1 file" => "1 fail",
+"{count} files" => "{count} faili",
+"seconds ago" => "sekundit tagasi",
+"1 minute ago" => "1 minut tagasi",
+"{minutes} minutes ago" => "{minutes} minutit tagasi",
+"today" => "täna",
+"yesterday" => "eile",
+"{days} days ago" => "{days} päeva tagasi",
+"last month" => "viimasel kuul",
+"months ago" => "kuu tagasi",
+"last year" => "viimasel aastal",
+"years ago" => "aastat tagasi",
"File handling" => "Failide käsitlemine",
"Maximum upload size" => "Maksimaalne üleslaadimise suurus",
"max. possible: " => "maks. võimalik: ",
@@ -46,7 +62,6 @@
"Upload" => "Lae üles",
"Cancel upload" => "Tühista üleslaadimine",
"Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!",
-"Name" => "Nimi",
"Share" => "Jaga",
"Download" => "Lae alla",
"Upload too large" => "Üleslaadimine on liiga suur",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index d72e73adf00..b273c533557 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -9,28 +9,30 @@
"Files" => "Fitxategiak",
"Unshare" => "Ez partekatu",
"Delete" => "Ezabatu",
-"already exists" => "dagoeneko existitzen da",
+"Rename" => "Berrizendatu",
"replace" => "ordeztu",
"suggest name" => "aholkatu izena",
"cancel" => "ezeztatu",
-"replaced" => "ordeztua",
"undo" => "desegin",
-"with" => "honekin",
-"unshared" => "Ez partekatuta",
-"deleted" => "ezabatuta",
"generating ZIP-file, it may take some time." => "ZIP-fitxategia sortzen ari da, denbora har dezake",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu",
"Upload Error" => "Igotzean errore bat suertatu da",
"Pending" => "Zain",
+"1 file uploading" => "fitxategi 1 igotzen",
"Upload cancelled." => "Igoera ezeztatuta",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
"Invalid name, '/' is not allowed." => "Baliogabeko izena, '/' ezin da erabili. ",
+"error while scanning" => "errore bat egon da eskaneatzen zen bitartean",
+"Name" => "Izena",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
-"folder" => "karpeta",
-"folders" => "Karpetak",
-"file" => "fitxategia",
-"files" => "fitxategiak",
+"seconds ago" => "segundu",
+"today" => "gaur",
+"yesterday" => "atzo",
+"last month" => "joan den hilabetean",
+"months ago" => "hilabete",
+"last year" => "joan den urtean",
+"years ago" => "urte",
"File handling" => "Fitxategien kudeaketa",
"Maximum upload size" => "Igo daitekeen gehienezko tamaina",
"max. possible: " => "max, posiblea:",
@@ -46,7 +48,6 @@
"Upload" => "Igo",
"Cancel upload" => "Ezeztatu igoera",
"Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!",
-"Name" => "Izena",
"Share" => "Elkarbanatu",
"Download" => "Deskargatu",
"Upload too large" => "Igotakoa handiegia da",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index e6ddd50f917..01a1b1e56f7 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -8,25 +8,18 @@
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود",
"Files" => "فایل ها",
"Delete" => "پاک کردن",
-"already exists" => "وجود دارد",
"replace" => "جایگزین",
"cancel" => "لغو",
-"replaced" => "جایگزین‌شده",
"undo" => "بازگشت",
-"with" => "همراه",
-"deleted" => "حذف شده",
"generating ZIP-file, it may take some time." => "در حال ساخت فایل فشرده ممکن است زمان زیادی به طول بیانجامد",
"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد",
"Upload Error" => "خطا در بار گذاری",
"Pending" => "در انتظار",
"Upload cancelled." => "بار گذاری لغو شد",
"Invalid name, '/' is not allowed." => "نام نامناسب '/' غیرفعال است",
+"Name" => "نام",
"Size" => "اندازه",
"Modified" => "تغییر یافته",
-"folder" => "پوشه",
-"folders" => "پوشه ها",
-"file" => "پرونده",
-"files" => "پرونده ها",
"File handling" => "اداره پرونده ها",
"Maximum upload size" => "حداکثر اندازه بارگزاری",
"max. possible: " => "حداکثرمقدارممکن:",
@@ -41,7 +34,6 @@
"Upload" => "بارگذاری",
"Cancel upload" => "متوقف کردن بار گذاری",
"Nothing in here. Upload something!" => "اینجا هیچ چیز نیست.",
-"Name" => "نام",
"Share" => "به اشتراک گذاری",
"Download" => "بارگیری",
"Upload too large" => "حجم بارگذاری بسیار زیاد است",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 757d0594d30..fd86c21ffdb 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -8,14 +8,12 @@
"Failed to write to disk" => "Levylle kirjoitus epäonnistui",
"Files" => "Tiedostot",
"Delete" => "Poista",
-"already exists" => "on jo olemassa",
+"Rename" => "Nimeä uudelleen",
+"{new_name} already exists" => "{new_name} on jo olemassa",
"replace" => "korvaa",
"suggest name" => "ehdota nimeä",
"cancel" => "peru",
-"replaced" => "korvattu",
"undo" => "kumoa",
-"with" => "käyttäen",
-"deleted" => "poistettu",
"generating ZIP-file, it may take some time." => "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio",
"Upload Error" => "Lähetysvirhe.",
@@ -23,12 +21,23 @@
"Upload cancelled." => "Lähetys peruttu.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
"Invalid name, '/' is not allowed." => "Virheellinen nimi, merkki '/' ei ole sallittu.",
+"Name" => "Nimi",
"Size" => "Koko",
"Modified" => "Muutettu",
-"folder" => "kansio",
-"folders" => "kansiota",
-"file" => "tiedosto",
-"files" => "tiedostoa",
+"1 folder" => "1 kansio",
+"{count} folders" => "{count} kansiota",
+"1 file" => "1 tiedosto",
+"{count} files" => "{count} tiedostoa",
+"seconds ago" => "sekuntia sitten",
+"1 minute ago" => "1 minuutti sitten",
+"{minutes} minutes ago" => "{minutes} minuuttia sitten",
+"today" => "tänään",
+"yesterday" => "eilen",
+"{days} days ago" => "{days} päivää sitten",
+"last month" => "viime kuussa",
+"months ago" => "kuukautta sitten",
+"last year" => "viime vuonna",
+"years ago" => "vuotta sitten",
"File handling" => "Tiedostonhallinta",
"Maximum upload size" => "Lähetettävän tiedoston suurin sallittu koko",
"max. possible: " => "suurin mahdollinen:",
@@ -44,7 +53,6 @@
"Upload" => "Lähetä",
"Cancel upload" => "Peru lähetys",
"Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!",
-"Name" => "Nimi",
"Share" => "Jaa",
"Download" => "Lataa",
"Upload too large" => "Lähetettävä tiedosto on liian suuri",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index c0f08b118d5..4f0f01fb23d 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -9,28 +9,44 @@
"Files" => "Fichiers",
"Unshare" => "Ne plus partager",
"Delete" => "Supprimer",
-"already exists" => "existe déjà",
+"Rename" => "Renommer",
+"{new_name} already exists" => "{new_name} existe déjà",
"replace" => "remplacer",
"suggest name" => "Suggérer un nom",
"cancel" => "annuler",
-"replaced" => "remplacé",
+"replaced {new_name}" => "{new_name} a été replacé",
"undo" => "annuler",
-"with" => "avec",
-"unshared" => "non partagée",
-"deleted" => "supprimé",
+"replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}",
+"unshared {files}" => "Fichiers non partagés : {files}",
+"deleted {files}" => "Fichiers supprimés : {files}",
"generating ZIP-file, it may take some time." => "Fichier ZIP en cours d'assemblage ; cela peut prendre du temps.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet.",
"Upload Error" => "Erreur de chargement",
"Pending" => "En cours",
+"1 file uploading" => "1 fichier en cours de téléchargement",
+"{count} files uploading" => "{count} fichiers téléversés",
"Upload cancelled." => "Chargement annulé.",
"File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
"Invalid name, '/' is not allowed." => "Nom invalide, '/' n'est pas autorisé.",
+"{count} files scanned" => "{count} fichiers indexés",
+"error while scanning" => "erreur lors de l'indexation",
+"Name" => "Nom",
"Size" => "Taille",
"Modified" => "Modifié",
-"folder" => "dossier",
-"folders" => "dossiers",
-"file" => "fichier",
-"files" => "fichiers",
+"1 folder" => "1 dossier",
+"{count} folders" => "{count} dossiers",
+"1 file" => "1 fichier",
+"{count} files" => "{count} fichiers",
+"seconds ago" => "secondes passées",
+"1 minute ago" => "Il y a une minute",
+"{minutes} minutes ago" => "Il y a {minutes} minutes",
+"today" => "aujourd'hui",
+"yesterday" => "hier",
+"{days} days ago" => "Il y a {days} jours",
+"last month" => "mois dernier",
+"months ago" => "mois passés",
+"last year" => "année dernière",
+"years ago" => "années passées",
"File handling" => "Gestion des fichiers",
"Maximum upload size" => "Taille max. d'envoi",
"max. possible: " => "Max. possible :",
@@ -46,7 +62,6 @@
"Upload" => "Envoyer",
"Cancel upload" => "Annuler l'envoi",
"Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
-"Name" => "Nom",
"Share" => "Partager",
"Download" => "Téléchargement",
"Upload too large" => "Fichier trop volumineux",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 67293de5cb7..bfb455d37f8 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -7,26 +7,23 @@
"Missing a temporary folder" => "Falta un cartafol temporal",
"Failed to write to disk" => "Erro ao escribir no disco",
"Files" => "Ficheiros",
+"Unshare" => "Deixar de compartir",
"Delete" => "Eliminar",
-"already exists" => "xa existe",
"replace" => "substituír",
+"suggest name" => "suxira nome",
"cancel" => "cancelar",
-"replaced" => "substituído",
"undo" => "desfacer",
-"with" => "con",
-"deleted" => "eliminado",
"generating ZIP-file, it may take some time." => "xerando ficheiro ZIP, pode levar un anaco.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes",
"Upload Error" => "Erro na subida",
"Pending" => "Pendentes",
"Upload cancelled." => "Subida cancelada.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida.",
"Invalid name, '/' is not allowed." => "Nome non válido, '/' non está permitido.",
+"error while scanning" => "erro mentras analizaba",
+"Name" => "Nome",
"Size" => "Tamaño",
"Modified" => "Modificado",
-"folder" => "cartafol",
-"folders" => "cartafoles",
-"file" => "ficheiro",
-"files" => "ficheiros",
"File handling" => "Manexo de ficheiro",
"Maximum upload size" => "Tamaño máximo de envío",
"max. possible: " => "máx. posible: ",
@@ -34,6 +31,7 @@
"Enable ZIP-download" => "Habilitar a descarga-ZIP",
"0 is unlimited" => "0 significa ilimitado",
"Maximum input size for ZIP files" => "Tamaño máximo de descarga para os ZIP",
+"Save" => "Gardar",
"New" => "Novo",
"Text file" => "Ficheiro de texto",
"Folder" => "Cartafol",
@@ -41,7 +39,6 @@
"Upload" => "Enviar",
"Cancel upload" => "Cancelar subida",
"Nothing in here. Upload something!" => "Nada por aquí. Envíe algo.",
-"Name" => "Nome",
"Share" => "Compartir",
"Download" => "Descargar",
"Upload too large" => "Envío demasiado grande",
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index e7ab4a524bc..997617673e4 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -8,19 +8,15 @@
"Failed to write to disk" => "הכתיבה לכונן נכשלה",
"Files" => "קבצים",
"Delete" => "מחיקה",
-"already exists" => "כבר קיים",
"generating ZIP-file, it may take some time." => "יוצר קובץ ZIP, אנא המתן.",
"Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים",
"Upload Error" => "שגיאת העלאה",
"Pending" => "ממתין",
"Upload cancelled." => "ההעלאה בוטלה.",
"Invalid name, '/' is not allowed." => "שם לא חוקי, '/' אסור לשימוש.",
+"Name" => "שם",
"Size" => "גודל",
"Modified" => "זמן שינוי",
-"folder" => "תקיה",
-"folders" => "תקיות",
-"file" => "קובץ",
-"files" => "קבצים",
"File handling" => "טיפול בקבצים",
"Maximum upload size" => "גודל העלאה מקסימלי",
"max. possible: " => "המרבי האפשרי: ",
@@ -35,7 +31,6 @@
"Upload" => "העלאה",
"Cancel upload" => "ביטול ההעלאה",
"Nothing in here. Upload something!" => "אין כאן שום דבר. אולי ברצונך להעלות משהו?",
-"Name" => "שם",
"Share" => "שיתוף",
"Download" => "הורדה",
"Upload too large" => "העלאה גדולה מידי",
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
index b05b7c568b4..fa16feaa39a 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -7,26 +7,32 @@
"Missing a temporary folder" => "Nedostaje privremena mapa",
"Failed to write to disk" => "Neuspjelo pisanje na disk",
"Files" => "Datoteke",
+"Unshare" => "Prekini djeljenje",
"Delete" => "Briši",
-"already exists" => "već postoji",
+"Rename" => "Promjeni ime",
"replace" => "zamjeni",
+"suggest name" => "predloži ime",
"cancel" => "odustani",
-"replaced" => "zamjenjeno",
"undo" => "vrati",
-"with" => "sa",
-"deleted" => "izbrisano",
"generating ZIP-file, it may take some time." => "generiranje ZIP datoteke, ovo može potrajati.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nemoguće poslati datoteku jer je prazna ili je direktorij",
"Upload Error" => "Pogreška pri slanju",
"Pending" => "U tijeku",
+"1 file uploading" => "1 datoteka se učitava",
"Upload cancelled." => "Slanje poništeno.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.",
"Invalid name, '/' is not allowed." => "Neispravan naziv, znak '/' nije dozvoljen.",
+"error while scanning" => "grečka prilikom skeniranja",
+"Name" => "Naziv",
"Size" => "Veličina",
"Modified" => "Zadnja promjena",
-"folder" => "mapa",
-"folders" => "mape",
-"file" => "datoteka",
-"files" => "datoteke",
+"seconds ago" => "sekundi prije",
+"today" => "danas",
+"yesterday" => "jučer",
+"last month" => "prošli mjesec",
+"months ago" => "mjeseci",
+"last year" => "prošlu godinu",
+"years ago" => "godina",
"File handling" => "datoteka za rukovanje",
"Maximum upload size" => "Maksimalna veličina prijenosa",
"max. possible: " => "maksimalna moguća: ",
@@ -34,6 +40,7 @@
"Enable ZIP-download" => "Omogući ZIP-preuzimanje",
"0 is unlimited" => "0 je \"bez limita\"",
"Maximum input size for ZIP files" => "Maksimalna veličina za ZIP datoteke",
+"Save" => "Snimi",
"New" => "novo",
"Text file" => "tekstualna datoteka",
"Folder" => "mapa",
@@ -41,7 +48,6 @@
"Upload" => "Pošalji",
"Cancel upload" => "Prekini upload",
"Nothing in here. Upload something!" => "Nema ničega u ovoj mapi. Pošalji nešto!",
-"Name" => "Naziv",
"Share" => "podjeli",
"Download" => "Preuzmi",
"Upload too large" => "Prijenos je preobiman",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index 95b3c57ce11..1eeca809d64 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -8,25 +8,18 @@
"Failed to write to disk" => "Nem írható lemezre",
"Files" => "Fájlok",
"Delete" => "Törlés",
-"already exists" => "már létezik",
"replace" => "cserél",
"cancel" => "mégse",
-"replaced" => "kicserélve",
"undo" => "visszavon",
-"with" => "-val/-vel",
-"deleted" => "törölve",
"generating ZIP-file, it may take some time." => "ZIP-fájl generálása, ez eltarthat egy ideig.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű",
"Upload Error" => "Feltöltési hiba",
"Pending" => "Folyamatban",
"Upload cancelled." => "Feltöltés megszakítva",
"Invalid name, '/' is not allowed." => "Érvénytelen név, a '/' nem megengedett",
+"Name" => "Név",
"Size" => "Méret",
"Modified" => "Módosítva",
-"folder" => "mappa",
-"folders" => "mappák",
-"file" => "fájl",
-"files" => "fájlok",
"File handling" => "Fájlkezelés",
"Maximum upload size" => "Maximális feltölthető fájlméret",
"max. possible: " => "max. lehetséges",
@@ -41,7 +34,6 @@
"Upload" => "Feltöltés",
"Cancel upload" => "Feltöltés megszakítása",
"Nothing in here. Upload something!" => "Töltsön fel egy fájlt.",
-"Name" => "Név",
"Share" => "Megosztás",
"Download" => "Letöltés",
"Upload too large" => "Feltöltés túl nagy",
diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php
index f9205cb5f64..21a0bb52374 100644
--- a/apps/files/l10n/ia.php
+++ b/apps/files/l10n/ia.php
@@ -3,6 +3,7 @@
"No file was uploaded" => "Nulle file esseva incargate",
"Files" => "Files",
"Delete" => "Deler",
+"Name" => "Nomine",
"Size" => "Dimension",
"Modified" => "Modificate",
"Maximum upload size" => "Dimension maxime de incargamento",
@@ -11,7 +12,6 @@
"Folder" => "Dossier",
"Upload" => "Incargar",
"Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!",
-"Name" => "Nomine",
"Download" => "Discargar",
"Upload too large" => "Incargamento troppo longe"
);
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index 351d0641388..a11894d1a76 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -8,25 +8,18 @@
"Failed to write to disk" => "Gagal menulis ke disk",
"Files" => "Berkas",
"Delete" => "Hapus",
-"already exists" => "sudah ada",
"replace" => "mengganti",
"cancel" => "batalkan",
-"replaced" => "diganti",
"undo" => "batal dikerjakan",
-"with" => "dengan",
-"deleted" => "dihapus",
"generating ZIP-file, it may take some time." => "membuat berkas ZIP, ini mungkin memakan waktu.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte",
"Upload Error" => "Terjadi Galat Pengunggahan",
"Pending" => "Menunggu",
"Upload cancelled." => "Pengunggahan dibatalkan.",
"Invalid name, '/' is not allowed." => "Kesalahan nama, '/' tidak diijinkan.",
+"Name" => "Nama",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
-"folder" => "folder",
-"folders" => "folder-folder",
-"file" => "berkas",
-"files" => "berkas-berkas",
"File handling" => "Penanganan berkas",
"Maximum upload size" => "Ukuran unggah maksimum",
"max. possible: " => "Kemungkinan maks:",
@@ -41,7 +34,6 @@
"Upload" => "Unggah",
"Cancel upload" => "Batal mengunggah",
"Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!",
-"Name" => "Nama",
"Share" => "Bagikan",
"Download" => "Unduh",
"Upload too large" => "Unggahan terlalu besar",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index c7046118a3a..5d3b58e783a 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -9,28 +9,44 @@
"Files" => "File",
"Unshare" => "Rimuovi condivisione",
"Delete" => "Elimina",
-"already exists" => "esiste già",
+"Rename" => "Rinomina",
+"{new_name} already exists" => "{new_name} esiste già",
"replace" => "sostituisci",
"suggest name" => "suggerisci nome",
"cancel" => "annulla",
-"replaced" => "sostituito",
+"replaced {new_name}" => "sostituito {new_name}",
"undo" => "annulla",
-"with" => "con",
-"unshared" => "condivisione rimossa",
-"deleted" => "eliminati",
+"replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}",
+"unshared {files}" => "non condivisi {files}",
+"deleted {files}" => "eliminati {files}",
"generating ZIP-file, it may take some time." => "creazione file ZIP, potrebbe richiedere del tempo.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte",
"Upload Error" => "Errore di invio",
"Pending" => "In corso",
+"1 file uploading" => "1 file in fase di caricamento",
+"{count} files uploading" => "{count} file in fase di caricamentoe",
"Upload cancelled." => "Invio annullato",
"File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
"Invalid name, '/' is not allowed." => "Nome non valido",
+"{count} files scanned" => "{count} file analizzati",
+"error while scanning" => "errore durante la scansione",
+"Name" => "Nome",
"Size" => "Dimensione",
"Modified" => "Modificato",
-"folder" => "cartella",
-"folders" => "cartelle",
-"file" => "file",
-"files" => "file",
+"1 folder" => "1 cartella",
+"{count} folders" => "{count} cartelle",
+"1 file" => "1 file",
+"{count} files" => "{count} file",
+"seconds ago" => "secondi fa",
+"1 minute ago" => "1 minuto fa",
+"{minutes} minutes ago" => "{minutes} minuti fa",
+"today" => "oggi",
+"yesterday" => "ieri",
+"{days} days ago" => "{days} giorni fa",
+"last month" => "mese scorso",
+"months ago" => "mesi fa",
+"last year" => "anno scorso",
+"years ago" => "anni fa",
"File handling" => "Gestione file",
"Maximum upload size" => "Dimensione massima upload",
"max. possible: " => "numero mass.: ",
@@ -46,7 +62,6 @@
"Upload" => "Carica",
"Cancel upload" => "Annulla invio",
"Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!",
-"Name" => "Nome",
"Share" => "Condividi",
"Download" => "Scarica",
"Upload too large" => "Il file caricato è troppo grande",
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index 6d278c3f0fb..c161f8b3bac 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -9,28 +9,44 @@
"Files" => "ファイル",
"Unshare" => "共有しない",
"Delete" => "削除",
-"already exists" => "既に存在します",
+"Rename" => "名前の変更",
+"{new_name} already exists" => "{new_name} はすでに存在しています",
"replace" => "置き換え",
"suggest name" => "推奨名称",
"cancel" => "キャンセル",
-"replaced" => "置換:",
+"replaced {new_name}" => "{new_name} を置換",
"undo" => "元に戻す",
-"with" => "←",
-"unshared" => "未共有",
-"deleted" => "削除",
+"replaced {new_name} with {old_name}" => "{old_name} を {new_name} に置換",
+"unshared {files}" => "未共有 {files}",
+"deleted {files}" => "削除 {files}",
"generating ZIP-file, it may take some time." => "ZIPファイルを生成中です、しばらくお待ちください。",
"Unable to upload your file as it is a directory or has 0 bytes" => "アップロード使用としているファイルがディレクトリ、もしくはサイズが0バイトのため、アップロードできません。",
"Upload Error" => "アップロードエラー",
"Pending" => "保留",
+"1 file uploading" => "ファイルを1つアップロード中",
+"{count} files uploading" => "{count} ファイルをアップロード中",
"Upload cancelled." => "アップロードはキャンセルされました。",
"File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
"Invalid name, '/' is not allowed." => "無効な名前、'/' は使用できません。",
+"{count} files scanned" => "{count} ファイルをスキャン",
+"error while scanning" => "スキャン中のエラー",
+"Name" => "名前",
"Size" => "サイズ",
"Modified" => "更新日時",
-"folder" => "フォルダ",
-"folders" => "フォルダ",
-"file" => "ファイル",
-"files" => "ファイル",
+"1 folder" => "1 フォルダ",
+"{count} folders" => "{count} フォルダ",
+"1 file" => "1 ファイル",
+"{count} files" => "{count} ファイル",
+"seconds ago" => "秒前",
+"1 minute ago" => "1 分前",
+"{minutes} minutes ago" => "{minutes} 分前",
+"today" => "今日",
+"yesterday" => "昨日",
+"{days} days ago" => "{days} 日前",
+"last month" => "一月前",
+"months ago" => "月前",
+"last year" => "一年前",
+"years ago" => "年前",
"File handling" => "ファイル操作",
"Maximum upload size" => "最大アップロードサイズ",
"max. possible: " => "最大容量: ",
@@ -46,7 +62,6 @@
"Upload" => "アップロード",
"Cancel upload" => "アップロードをキャンセル",
"Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。",
-"Name" => "名前",
"Share" => "共有",
"Download" => "ダウンロード",
"Upload too large" => "ファイルサイズが大きすぎます",
diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php
new file mode 100644
index 00000000000..d9672d647c2
--- /dev/null
+++ b/apps/files/l10n/ka_GE.php
@@ -0,0 +1,71 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "ჭოცდომა არ დაფიქსირდა, ფაილი წარმატებით აიტვირთა",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "ატვირთული ფაილი აჭარბებს upload_max_filesize დირექტივას php.ini ფაილში",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "ატვირთული ფაილი აჭარბებს MAX_FILE_SIZE დირექტივას, რომელიც მითითებულია HTML ფორმაში",
+"The uploaded file was only partially uploaded" => "ატვირთული ფაილი მხოლოდ ნაწილობრივ აიტვირთა",
+"No file was uploaded" => "ფაილი არ აიტვირთა",
+"Missing a temporary folder" => "დროებითი საქაღალდე არ არსებობს",
+"Failed to write to disk" => "შეცდომა დისკზე ჩაწერისას",
+"Files" => "ფაილები",
+"Unshare" => "გაზიარების მოხსნა",
+"Delete" => "წაშლა",
+"Rename" => "გადარქმევა",
+"{new_name} already exists" => "{new_name} უკვე არსებობს",
+"replace" => "შეცვლა",
+"suggest name" => "სახელის შემოთავაზება",
+"cancel" => "უარყოფა",
+"replaced {new_name}" => "{new_name} შეცვლილია",
+"undo" => "დაბრუნება",
+"replaced {new_name} with {old_name}" => "{new_name} შეცვლილია {old_name}–ით",
+"unshared {files}" => "გაზიარება მოხსნილი {files}",
+"deleted {files}" => "წაშლილი {files}",
+"generating ZIP-file, it may take some time." => "ZIP-ფაილის გენერირება, ამას ჭირდება გარკვეული დრო.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფაილის ატვირთვა ვერ მოხერხდა. ის არის საქაღალდე და შეიცავს 0 ბაიტს",
+"Upload Error" => "შეცდომა ატვირთვისას",
+"Pending" => "მოცდის რეჟიმში",
+"1 file uploading" => "1 ფაილის ატვირთვა",
+"{count} files uploading" => "{count} ფაილი იტვირთება",
+"Upload cancelled." => "ატვირთვა შეჩერებულ იქნა.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
+"Invalid name, '/' is not allowed." => "არასწორი სახელი, '/' არ დაიშვება.",
+"{count} files scanned" => "{count} ფაილი სკანირებულია",
+"error while scanning" => "შეცდომა სკანირებისას",
+"Name" => "სახელი",
+"Size" => "ზომა",
+"Modified" => "შეცვლილია",
+"1 folder" => "1 საქაღალდე",
+"{count} folders" => "{count} საქაღალდე",
+"1 file" => "1 ფაილი",
+"{count} files" => "{count} ფაილი",
+"seconds ago" => "წამის წინ",
+"1 minute ago" => "1 წუთის წინ",
+"{minutes} minutes ago" => "{minutes} წუთის წინ",
+"today" => "დღეს",
+"yesterday" => "გუშინ",
+"{days} days ago" => "{days} დღის წინ",
+"last month" => "გასულ თვეში",
+"months ago" => "თვის წინ",
+"last year" => "გასულ წელს",
+"years ago" => "წლის წინ",
+"File handling" => "ფაილის დამუშავება",
+"Maximum upload size" => "მაქსიმუმ ატვირთის ზომა",
+"max. possible: " => "მაქს. შესაძლებელი:",
+"Needed for multi-file and folder downloads." => "საჭიროა მულტი ფაილ ან საქაღალდის ჩამოტვირთვა.",
+"Enable ZIP-download" => "ZIP-Download–ის ჩართვა",
+"0 is unlimited" => "0 is unlimited",
+"Maximum input size for ZIP files" => "ZIP ფაილების მაქსიმუმ დასაშვები ზომა",
+"Save" => "შენახვა",
+"New" => "ახალი",
+"Text file" => "ტექსტური ფაილი",
+"Folder" => "საქაღალდე",
+"From url" => "მისამართიდან",
+"Upload" => "ატვირთვა",
+"Cancel upload" => "ატვირთვის გაუქმება",
+"Nothing in here. Upload something!" => "აქ არაფერი არ არის. ატვირთე რამე!",
+"Share" => "გაზიარება",
+"Download" => "ჩამოტვირთვა",
+"Upload too large" => "ასატვირთი ფაილი ძალიან დიდია",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.",
+"Files are being scanned, please wait." => "მიმდინარეობს ფაილების სკანირება, გთხოვთ დაელოდოთ.",
+"Current scanning" => "მიმდინარე სკანირება"
+);
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index 121be7d1abb..05db100e189 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -8,25 +8,18 @@
"Failed to write to disk" => "디스크에 쓰지 못했습니다",
"Files" => "파일",
"Delete" => "삭제",
-"already exists" => "이미 존재 합니다",
"replace" => "대체",
"cancel" => "취소",
-"replaced" => "대체됨",
"undo" => "복구",
-"with" => "와",
-"deleted" => "삭제",
"generating ZIP-file, it may take some time." => "ZIP파일 생성에 시간이 걸릴 수 있습니다.",
"Unable to upload your file as it is a directory or has 0 bytes" => "이 파일은 디렉토리이거나 0 바이트이기 때문에 업로드 할 수 없습니다.",
"Upload Error" => "업로드 에러",
"Pending" => "보류 중",
"Upload cancelled." => "업로드 취소.",
"Invalid name, '/' is not allowed." => "잘못된 이름, '/' 은 허용이 되지 않습니다.",
+"Name" => "이름",
"Size" => "크기",
"Modified" => "수정됨",
-"folder" => "폴더",
-"folders" => "폴더",
-"file" => "파일",
-"files" => "파일",
"File handling" => "파일 처리",
"Maximum upload size" => "최대 업로드 크기",
"max. possible: " => "최대. 가능한:",
@@ -41,7 +34,6 @@
"Upload" => "업로드",
"Cancel upload" => "업로드 취소",
"Nothing in here. Upload something!" => "내용이 없습니다. 업로드할 수 있습니다!",
-"Name" => "이름",
"Share" => "공유",
"Download" => "다운로드",
"Upload too large" => "업로드 용량 초과",
diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php
index 92acea1d117..aed0938ff04 100644
--- a/apps/files/l10n/lb.php
+++ b/apps/files/l10n/lb.php
@@ -8,25 +8,18 @@
"Failed to write to disk" => "Konnt net op den Disk schreiwen",
"Files" => "Dateien",
"Delete" => "Läschen",
-"already exists" => "existéiert schonn",
"replace" => "ersetzen",
"cancel" => "ofbriechen",
-"replaced" => "ersat",
"undo" => "réckgängeg man",
-"with" => "mat",
-"deleted" => "geläscht",
"generating ZIP-file, it may take some time." => "Et gëtt eng ZIP-File generéiert, dëst ka bëssen daueren.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass.",
"Upload Error" => "Fehler beim eroplueden",
"Upload cancelled." => "Upload ofgebrach.",
"File upload is in progress. Leaving the page now will cancel the upload." => "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
"Invalid name, '/' is not allowed." => "Ongültege Numm, '/' net erlaabt.",
+"Name" => "Numm",
"Size" => "Gréisst",
"Modified" => "Geännert",
-"folder" => "Dossier",
-"folders" => "Dossieren",
-"file" => "Datei",
-"files" => "Dateien",
"File handling" => "Fichier handling",
"Maximum upload size" => "Maximum Upload Gréisst ",
"max. possible: " => "max. méiglech:",
@@ -41,7 +34,6 @@
"Upload" => "Eroplueden",
"Cancel upload" => "Upload ofbriechen",
"Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!",
-"Name" => "Numm",
"Share" => "Share",
"Download" => "Eroflueden",
"Upload too large" => "Upload ze grouss",
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index 90b03143074..d224b8cce8e 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -7,25 +7,54 @@
"Missing a temporary folder" => "Nėra laikinojo katalogo",
"Failed to write to disk" => "Nepavyko įrašyti į diską",
"Files" => "Failai",
+"Unshare" => "Nebesidalinti",
"Delete" => "Ištrinti",
+"Rename" => "Pervadinti",
+"{new_name} already exists" => "{new_name} jau egzistuoja",
+"replace" => "pakeisti",
+"suggest name" => "pasiūlyti pavadinimą",
"cancel" => "atšaukti",
+"replaced {new_name}" => "pakeiskite {new_name}",
+"undo" => "anuliuoti",
+"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
+"unshared {files}" => "nebesidalinti {files}",
+"deleted {files}" => "ištrinti {files}",
"generating ZIP-file, it may take some time." => "kuriamas ZIP archyvas, tai gali užtrukti šiek tiek laiko.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas",
"Upload Error" => "Įkėlimo klaida",
"Pending" => "Laukiantis",
+"1 file uploading" => "įkeliamas 1 failas",
+"{count} files uploading" => "{count} įkeliami failai",
"Upload cancelled." => "Įkėlimas atšauktas.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
"Invalid name, '/' is not allowed." => "Pavadinime negali būti naudojamas ženklas \"/\".",
+"{count} files scanned" => "{count} praskanuoti failai",
+"error while scanning" => "klaida skanuojant",
+"Name" => "Pavadinimas",
"Size" => "Dydis",
"Modified" => "Pakeista",
-"folder" => "katalogas",
-"folders" => "katalogai",
-"file" => "failas",
-"files" => "failai",
+"1 folder" => "1 aplankalas",
+"{count} folders" => "{count} aplankalai",
+"1 file" => "1 failas",
+"{count} files" => "{count} failai",
+"seconds ago" => "prieš sekundę",
+"1 minute ago" => "Prieš 1 minutę",
+"{minutes} minutes ago" => "Prieš {count} minutes",
+"today" => "šiandien",
+"yesterday" => "vakar",
+"{days} days ago" => "Prieš {days} dienas",
+"last month" => "praeitą mėnesį",
+"months ago" => "prieš mėnesį",
+"last year" => "praeitais metais",
+"years ago" => "prieš metus",
"File handling" => "Failų tvarkymas",
"Maximum upload size" => "Maksimalus įkeliamo failo dydis",
+"max. possible: " => "maks. galima:",
+"Needed for multi-file and folder downloads." => "Reikalinga daugybinui failų ir aplankalų atsisiuntimui.",
"Enable ZIP-download" => "Įjungti atsisiuntimą ZIP archyvu",
"0 is unlimited" => "0 yra neribotas",
"Maximum input size for ZIP files" => "Maksimalus ZIP archyvo failo dydis",
+"Save" => "Išsaugoti",
"New" => "Naujas",
"Text file" => "Teksto failas",
"Folder" => "Katalogas",
@@ -33,7 +62,6 @@
"Upload" => "Įkelti",
"Cancel upload" => "Atšaukti siuntimą",
"Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!",
-"Name" => "Pavadinimas",
"Share" => "Dalintis",
"Download" => "Atsisiųsti",
"Upload too large" => "Įkėlimui failas per didelis",
diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php
index eedab2546c5..835416c301b 100644
--- a/apps/files/l10n/lv.php
+++ b/apps/files/l10n/lv.php
@@ -3,25 +3,18 @@
"Failed to write to disk" => "Nav iespējams saglabāt",
"Files" => "Faili",
"Delete" => "Izdzēst",
-"already exists" => "tāds fails jau eksistē",
"replace" => "aizvietot",
"cancel" => "atcelt",
-"replaced" => "aizvietots",
"undo" => "vienu soli atpakaļ",
-"with" => "ar",
-"deleted" => "izdzests",
"generating ZIP-file, it may take some time." => "lai uzģenerētu ZIP failu, kāds brīdis ir jāpagaida",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nav iespējams augšuplādēt jūsu failu, jo tāds jau eksistē vai arī failam nav izmēra (0 baiti)",
"Upload Error" => "Augšuplādēšanas laikā radās kļūda",
"Pending" => "Gaida savu kārtu",
"Upload cancelled." => "Augšuplāde ir atcelta",
"Invalid name, '/' is not allowed." => "Šis simbols '/', nav atļauts.",
+"Name" => "Nosaukums",
"Size" => "Izmērs",
"Modified" => "Izmainīts",
-"folder" => "mape",
-"folders" => "mapes",
-"file" => "fails",
-"files" => "faili",
"Maximum upload size" => "Maksimālais failu augšuplādes apjoms",
"max. possible: " => "maksīmālais iespējamais:",
"Enable ZIP-download" => "Iespējot ZIP lejuplādi",
@@ -33,7 +26,6 @@
"Upload" => "Augšuplādet",
"Cancel upload" => "Atcelt augšuplādi",
"Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšuplādēt",
-"Name" => "Nosaukums",
"Share" => "Līdzdalīt",
"Download" => "Lejuplādēt",
"Upload too large" => "Fails ir par lielu lai to augšuplādetu",
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index 4e1eccff255..f8953fbaef6 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -14,12 +14,9 @@
"Pending" => "Чека",
"Upload cancelled." => "Преземањето е прекинато.",
"Invalid name, '/' is not allowed." => "неисправно име, '/' не е дозволено.",
+"Name" => "Име",
"Size" => "Големина",
"Modified" => "Променето",
-"folder" => "фолдер",
-"folders" => "фолдери",
-"file" => "датотека",
-"files" => "датотеки",
"File handling" => "Ракување со датотеки",
"Maximum upload size" => "Максимална големина за подигање",
"max. possible: " => "макс. можно:",
@@ -34,7 +31,6 @@
"Upload" => "Подигни",
"Cancel upload" => "Откажи прикачување",
"Nothing in here. Upload something!" => "Тука нема ништо. Снимете нешто!",
-"Name" => "Име",
"Share" => "Сподели",
"Download" => "Преземи",
"Upload too large" => "Датотеката е премногу голема",
diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php
index de472a7c651..95f1b418c7e 100644
--- a/apps/files/l10n/ms_MY.php
+++ b/apps/files/l10n/ms_MY.php
@@ -8,24 +8,17 @@
"Failed to write to disk" => "Gagal untuk disimpan",
"Files" => "fail",
"Delete" => "Padam",
-"already exists" => "Sudah wujud",
"replace" => "ganti",
"cancel" => "Batal",
-"replaced" => "diganti",
-"with" => "dengan",
-"deleted" => "dihapus",
"generating ZIP-file, it may take some time." => "sedang menghasilkan fail ZIP, mungkin mengambil sedikit masa.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes",
"Upload Error" => "Muat naik ralat",
"Pending" => "Dalam proses",
"Upload cancelled." => "Muatnaik dibatalkan.",
"Invalid name, '/' is not allowed." => "penggunaa nama tidak sah, '/' tidak dibenarkan.",
+"Name" => "Nama ",
"Size" => "Saiz",
"Modified" => "Dimodifikasi",
-"folder" => "direktori",
-"folders" => "direktori",
-"file" => "fail",
-"files" => "fail",
"File handling" => "Pengendalian fail",
"Maximum upload size" => "Saiz maksimum muat naik",
"max. possible: " => "maksimum:",
@@ -40,7 +33,6 @@
"Upload" => "Muat naik",
"Cancel upload" => "Batal muat naik",
"Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!",
-"Name" => "Nama ",
"Share" => "Kongsi",
"Download" => "Muat turun",
"Upload too large" => "Muat naik terlalu besar",
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index 6331de6d45e..0fe6d293393 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -7,26 +7,32 @@
"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Failed to write to disk" => "Klarte ikke å skrive til disk",
"Files" => "Filer",
+"Unshare" => "Avslutt deling",
"Delete" => "Slett",
-"already exists" => "eksisterer allerede",
+"Rename" => "Omdøp",
"replace" => "erstatt",
+"suggest name" => "foreslå navn",
"cancel" => "avbryt",
-"replaced" => "erstattet",
"undo" => "angre",
-"with" => "med",
-"deleted" => "slettet",
"generating ZIP-file, it may take some time." => "opprettet ZIP-fil, dette kan ta litt tid",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes",
"Upload Error" => "Opplasting feilet",
"Pending" => "Ventende",
+"1 file uploading" => "1 fil lastes opp",
"Upload cancelled." => "Opplasting avbrutt.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
"Invalid name, '/' is not allowed." => "Ugyldig navn, '/' er ikke tillatt. ",
+"error while scanning" => "feil under skanning",
+"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Endret",
-"folder" => "mappe",
-"folders" => "mapper",
-"file" => "fil",
-"files" => "filer",
+"seconds ago" => "sekunder siden",
+"today" => "i dag",
+"yesterday" => "i går",
+"last month" => "forrige måned",
+"months ago" => "måneder siden",
+"last year" => "forrige år",
+"years ago" => "år siden",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimum opplastingsstørrelse",
"max. possible: " => "max. mulige:",
@@ -42,7 +48,6 @@
"Upload" => "Last opp",
"Cancel upload" => "Avbryt opplasting",
"Nothing in here. Upload something!" => "Ingenting her. Last opp noe!",
-"Name" => "Navn",
"Share" => "Del",
"Download" => "Last ned",
"Upload too large" => "Opplasting for stor",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index b54c96bd9ae..e6e5fa52a86 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -9,28 +9,44 @@
"Files" => "Bestanden",
"Unshare" => "Stop delen",
"Delete" => "Verwijder",
-"already exists" => "bestaat al",
+"Rename" => "Hernoem",
+"{new_name} already exists" => "{new_name} bestaat al",
"replace" => "vervang",
"suggest name" => "Stel een naam voor",
"cancel" => "annuleren",
-"replaced" => "vervangen",
+"replaced {new_name}" => "verving {new_name}",
"undo" => "ongedaan maken",
-"with" => "door",
-"unshared" => "niet gedeeld",
-"deleted" => "verwijderd",
+"replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}",
+"unshared {files}" => "delen gestopt {files}",
+"deleted {files}" => "verwijderde {files}",
"generating ZIP-file, it may take some time." => "aanmaken ZIP-file, dit kan enige tijd duren.",
"Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes",
"Upload Error" => "Upload Fout",
"Pending" => "Wachten",
+"1 file uploading" => "1 bestand wordt ge-upload",
+"{count} files uploading" => "{count} bestanden aan het uploaden",
"Upload cancelled." => "Uploaden geannuleerd.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Bestands upload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.",
"Invalid name, '/' is not allowed." => "Ongeldige naam, '/' is niet toegestaan.",
+"{count} files scanned" => "{count} bestanden gescanned",
+"error while scanning" => "Fout tijdens het scannen",
+"Name" => "Naam",
"Size" => "Bestandsgrootte",
"Modified" => "Laatst aangepast",
-"folder" => "map",
-"folders" => "mappen",
-"file" => "bestand",
-"files" => "bestanden",
+"1 folder" => "1 map",
+"{count} folders" => "{count} mappen",
+"1 file" => "1 bestand",
+"{count} files" => "{count} bestanden",
+"seconds ago" => "seconden geleden",
+"1 minute ago" => "1 minuut geleden",
+"{minutes} minutes ago" => "{minutes} minuten geleden",
+"today" => "vandaag",
+"yesterday" => "gisteren",
+"{days} days ago" => "{days} dagen geleden",
+"last month" => "vorige maand",
+"months ago" => "maanden geleden",
+"last year" => "vorig jaar",
+"years ago" => "jaar geleden",
"File handling" => "Bestand",
"Maximum upload size" => "Maximale bestandsgrootte voor uploads",
"max. possible: " => "max. mogelijk: ",
@@ -46,7 +62,6 @@
"Upload" => "Upload",
"Cancel upload" => "Upload afbreken",
"Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!",
-"Name" => "Naam",
"Share" => "Delen",
"Download" => "Download",
"Upload too large" => "Bestanden te groot",
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
index d6af7302494..7af37057ce0 100644
--- a/apps/files/l10n/nn_NO.php
+++ b/apps/files/l10n/nn_NO.php
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "Manglar ei mellombels mappe",
"Files" => "Filer",
"Delete" => "Slett",
+"Name" => "Namn",
"Size" => "Storleik",
"Modified" => "Endra",
"Maximum upload size" => "Maksimal opplastingsstorleik",
@@ -15,7 +16,6 @@
"Folder" => "Mappe",
"Upload" => "Last opp",
"Nothing in here. Upload something!" => "Ingenting her. Last noko opp!",
-"Name" => "Namn",
"Download" => "Last ned",
"Upload too large" => "For stor opplasting",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php
new file mode 100644
index 00000000000..d4bb09e94b3
--- /dev/null
+++ b/apps/files/l10n/oc.php
@@ -0,0 +1,57 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Amontcargament capitat, pas d'errors",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Lo fichièr amontcargat es tròp bèl per la directiva «upload_max_filesize » del php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lo fichièr amontcargat es mai gròs que la directiva «MAX_FILE_SIZE» especifiada dins lo formulari HTML",
+"The uploaded file was only partially uploaded" => "Lo fichièr foguèt pas completament amontcargat",
+"No file was uploaded" => "Cap de fichièrs son estats amontcargats",
+"Missing a temporary folder" => "Un dorsièr temporari manca",
+"Failed to write to disk" => "L'escriptura sul disc a fracassat",
+"Files" => "Fichièrs",
+"Unshare" => "Non parteja",
+"Delete" => "Escafa",
+"Rename" => "Torna nomenar",
+"replace" => "remplaça",
+"suggest name" => "nom prepausat",
+"cancel" => "anulla",
+"undo" => "defar",
+"generating ZIP-file, it may take some time." => "Fichièr ZIP a se far, aquò pòt trigar un briu.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet.",
+"Upload Error" => "Error d'amontcargar",
+"Pending" => "Al esperar",
+"1 file uploading" => "1 fichièr al amontcargar",
+"Upload cancelled." => "Amontcargar anullat.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
+"Invalid name, '/' is not allowed." => "Nom invalid, '/' es pas permis.",
+"error while scanning" => "error pendant l'exploracion",
+"Name" => "Nom",
+"Size" => "Talha",
+"Modified" => "Modificat",
+"seconds ago" => "secondas",
+"today" => "uèi",
+"yesterday" => "ièr",
+"last month" => "mes passat",
+"months ago" => "meses",
+"last year" => "an passat",
+"years ago" => "ans",
+"File handling" => "Manejament de fichièr",
+"Maximum upload size" => "Talha maximum d'amontcargament",
+"max. possible: " => "max. possible: ",
+"Needed for multi-file and folder downloads." => "Requesit per avalcargar gropat de fichièrs e dorsièr",
+"Enable ZIP-download" => "Activa l'avalcargament de ZIP",
+"0 is unlimited" => "0 es pas limitat",
+"Maximum input size for ZIP files" => "Talha maximum de dintrada per fichièrs ZIP",
+"Save" => "Enregistra",
+"New" => "Nòu",
+"Text file" => "Fichièr de tèxte",
+"Folder" => "Dorsièr",
+"From url" => "Dempuèi l'URL",
+"Upload" => "Amontcarga",
+"Cancel upload" => " Anulla l'amontcargar",
+"Nothing in here. Upload something!" => "Pas res dedins. Amontcarga qualquaren",
+"Share" => "Parteja",
+"Download" => "Avalcarga",
+"Upload too large" => "Amontcargament tròp gròs",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
+"Files are being scanned, please wait." => "Los fiichièrs son a èsser explorats, ",
+"Current scanning" => "Exploracion en cors"
+);
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index 289a6139158..f84dc7086e6 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -9,28 +9,44 @@
"Files" => "Pliki",
"Unshare" => "Nie udostępniaj",
"Delete" => "Usuwa element",
-"already exists" => "Już istnieje",
+"Rename" => "Zmień nazwę",
+"{new_name} already exists" => "{new_name} już istnieje",
"replace" => "zastap",
"suggest name" => "zasugeruj nazwę",
"cancel" => "anuluj",
-"replaced" => "zastąpione",
+"replaced {new_name}" => "zastąpiony {new_name}",
"undo" => "wróć",
-"with" => "z",
-"unshared" => "Nie udostępnione",
-"deleted" => "skasuj",
+"replaced {new_name} with {old_name}" => "zastąpiony {new_name} z {old_name}",
+"unshared {files}" => "Udostępniane wstrzymane {files}",
+"deleted {files}" => "usunięto {files}",
"generating ZIP-file, it may take some time." => "Generowanie pliku ZIP, może potrwać pewien czas.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów",
"Upload Error" => "Błąd wczytywania",
"Pending" => "Oczekujące",
+"1 file uploading" => "1 plik wczytany",
+"{count} files uploading" => "{count} przesyłanie plików",
"Upload cancelled." => "Wczytywanie anulowane.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane.",
"Invalid name, '/' is not allowed." => "Nieprawidłowa nazwa '/' jest niedozwolone.",
+"{count} files scanned" => "{count} pliki skanowane",
+"error while scanning" => "Wystąpił błąd podczas skanowania",
+"Name" => "Nazwa",
"Size" => "Rozmiar",
"Modified" => "Czas modyfikacji",
-"folder" => "folder",
-"folders" => "foldery",
-"file" => "plik",
-"files" => "pliki",
+"1 folder" => "1 folder",
+"{count} folders" => "{count} foldery",
+"1 file" => "1 plik",
+"{count} files" => "{count} pliki",
+"seconds ago" => "sekund temu",
+"1 minute ago" => "1 minute temu",
+"{minutes} minutes ago" => "{minutes} minut temu",
+"today" => "dziś",
+"yesterday" => "wczoraj",
+"{days} days ago" => "{days} dni temu",
+"last month" => "ostani miesiąc",
+"months ago" => "miesięcy temu",
+"last year" => "ostatni rok",
+"years ago" => "lat temu",
"File handling" => "Zarządzanie plikami",
"Maximum upload size" => "Maksymalny rozmiar wysyłanego pliku",
"max. possible: " => "max. możliwych",
@@ -46,7 +62,6 @@
"Upload" => "Prześlij",
"Cancel upload" => "Przestań wysyłać",
"Nothing in here. Upload something!" => "Brak zawartości. Proszę wysłać pliki!",
-"Name" => "Nazwa",
"Share" => "Współdziel",
"Download" => "Pobiera element",
"Upload too large" => "Wysyłany plik ma za duży rozmiar",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index e9fe7747c13..4dfbadc8915 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -7,26 +7,32 @@
"Missing a temporary folder" => "Pasta temporária não encontrada",
"Failed to write to disk" => "Falha ao escrever no disco",
"Files" => "Arquivos",
+"Unshare" => "Descompartilhar",
"Delete" => "Excluir",
-"already exists" => "já existe",
+"Rename" => "Renomear",
"replace" => "substituir",
+"suggest name" => "sugerir nome",
"cancel" => "cancelar",
-"replaced" => "substituido ",
"undo" => "desfazer",
-"with" => "com",
-"deleted" => "deletado",
"generating ZIP-file, it may take some time." => "gerando arquivo ZIP, isso pode levar um tempo.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.",
"Upload Error" => "Erro de envio",
"Pending" => "Pendente",
+"1 file uploading" => "enviando 1 arquivo",
"Upload cancelled." => "Envio cancelado.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.",
"Invalid name, '/' is not allowed." => "Nome inválido, '/' não é permitido.",
+"error while scanning" => "erro durante verificação",
+"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
-"folder" => "pasta",
-"folders" => "pastas",
-"file" => "arquivo",
-"files" => "arquivos",
+"seconds ago" => "segundos atrás",
+"today" => "hoje",
+"yesterday" => "ontem",
+"last month" => "último mês",
+"months ago" => "meses atrás",
+"last year" => "último ano",
+"years ago" => "anos atrás",
"File handling" => "Tratamento de Arquivo",
"Maximum upload size" => "Tamanho máximo para carregar",
"max. possible: " => "max. possível:",
@@ -34,6 +40,7 @@
"Enable ZIP-download" => "Habilitar ZIP-download",
"0 is unlimited" => "0 para ilimitado",
"Maximum input size for ZIP files" => "Tamanho máximo para arquivo ZIP",
+"Save" => "Salvar",
"New" => "Novo",
"Text file" => "Arquivo texto",
"Folder" => "Pasta",
@@ -41,7 +48,6 @@
"Upload" => "Carregar",
"Cancel upload" => "Cancelar upload",
"Nothing in here. Upload something!" => "Nada aqui.Carrege alguma coisa!",
-"Name" => "Nome",
"Share" => "Compartilhar",
"Download" => "Baixar",
"Upload too large" => "Arquivo muito grande",
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index 998c494a695..3343d0d04bb 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -1,51 +1,71 @@
<?php $TRANSLATIONS = array(
"There is no error, the file uploaded with success" => "Sem erro, ficheiro enviado com sucesso",
-"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O ficheiro enviado escede o diretivo upload_max_filesize no php.ini",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O ficheiro enviado excede a directiva upload_max_filesize no php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro enviado excede o diretivo MAX_FILE_SIZE especificado no formulário HTML",
"The uploaded file was only partially uploaded" => "O ficheiro enviado só foi enviado parcialmente",
"No file was uploaded" => "Não foi enviado nenhum ficheiro",
"Missing a temporary folder" => "Falta uma pasta temporária",
"Failed to write to disk" => "Falhou a escrita no disco",
"Files" => "Ficheiros",
+"Unshare" => "Deixar de partilhar",
"Delete" => "Apagar",
-"already exists" => "Já existe",
+"Rename" => "Renomear",
+"{new_name} already exists" => "O nome {new_name} já existe",
"replace" => "substituir",
+"suggest name" => "Sugira um nome",
"cancel" => "cancelar",
-"replaced" => "substituido",
+"replaced {new_name}" => "{new_name} substituido",
"undo" => "desfazer",
-"with" => "com",
-"deleted" => "apagado",
+"replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}",
+"unshared {files}" => "{files} não partilhado(s)",
+"deleted {files}" => "{files} eliminado(s)",
"generating ZIP-file, it may take some time." => "a gerar o ficheiro ZIP, poderá demorar algum tempo.",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possivel fazer o upload do ficheiro devido a ser uma pasta ou ter 0 bytes",
-"Upload Error" => "Erro no upload",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes",
+"Upload Error" => "Erro no envio",
"Pending" => "Pendente",
-"Upload cancelled." => "O upload foi cancelado.",
-"Invalid name, '/' is not allowed." => "nome inválido, '/' não permitido.",
+"1 file uploading" => "A enviar 1 ficheiro",
+"{count} files uploading" => "A carregar {count} ficheiros",
+"Upload cancelled." => "O envio foi cancelado.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora.",
+"Invalid name, '/' is not allowed." => "Nome inválido, '/' não permitido.",
+"{count} files scanned" => "{count} ficheiros analisados",
+"error while scanning" => "erro ao analisar",
+"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
-"folder" => "pasta",
-"folders" => "pastas",
-"file" => "ficheiro",
-"files" => "ficheiros",
+"1 folder" => "1 pasta",
+"{count} folders" => "{count} pastas",
+"1 file" => "1 ficheiro",
+"{count} files" => "{count} ficheiros",
+"seconds ago" => "há segundos",
+"1 minute ago" => "há 1 minuto",
+"{minutes} minutes ago" => "há {minutes} minutos",
+"today" => "hoje",
+"yesterday" => "ontem",
+"{days} days ago" => "há {days} dias",
+"last month" => "mês passado",
+"months ago" => "há meses",
+"last year" => "ano passado",
+"years ago" => "há anos",
"File handling" => "Manuseamento de ficheiros",
"Maximum upload size" => "Tamanho máximo de envio",
"max. possible: " => "max. possivel: ",
-"Needed for multi-file and folder downloads." => "Necessário para multi download de ficheiros e pastas",
-"Enable ZIP-download" => "Ativar dowload de ficheiros ZIP",
+"Needed for multi-file and folder downloads." => "Necessário para descarregamento múltiplo de ficheiros e pastas",
+"Enable ZIP-download" => "Permitir descarregar em ficheiro ZIP",
"0 is unlimited" => "0 é ilimitado",
"Maximum input size for ZIP files" => "Tamanho máximo para ficheiros ZIP",
+"Save" => "Guardar",
"New" => "Novo",
"Text file" => "Ficheiro de texto",
"Folder" => "Pasta",
"From url" => "Do endereço",
"Upload" => "Enviar",
-"Cancel upload" => "Cancelar upload",
-"Nothing in here. Upload something!" => "Vazio. Envia alguma coisa!",
-"Name" => "Nome",
+"Cancel upload" => "Cancelar envio",
+"Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!",
"Share" => "Partilhar",
"Download" => "Transferir",
"Upload too large" => "Envio muito grande",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiro que estás a tentar enviar excedem o tamanho máximo de envio neste servidor.",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor.",
"Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.",
"Current scanning" => "Análise actual"
);
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index 58a6d2454f5..24df128b826 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -7,9 +7,32 @@
"Missing a temporary folder" => "Lipsește un dosar temporar",
"Failed to write to disk" => "Eroare la scriere pe disc",
"Files" => "Fișiere",
+"Unshare" => "Anulează partajarea",
"Delete" => "Șterge",
+"Rename" => "Redenumire",
+"replace" => "înlocuire",
+"suggest name" => "sugerează nume",
+"cancel" => "anulare",
+"undo" => "Anulează ultima acțiune",
+"generating ZIP-file, it may take some time." => "se generază fișierul ZIP, va dura ceva timp.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes.",
+"Upload Error" => "Eroare la încărcare",
+"Pending" => "În așteptare",
+"1 file uploading" => "un fișier se încarcă",
+"Upload cancelled." => "Încărcare anulată.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.",
+"Invalid name, '/' is not allowed." => "Nume invalid, '/' nu este permis.",
+"error while scanning" => "eroare la scanarea",
+"Name" => "Nume",
"Size" => "Dimensiune",
"Modified" => "Modificat",
+"seconds ago" => "secunde în urmă",
+"today" => "astăzi",
+"yesterday" => "ieri",
+"last month" => "ultima lună",
+"months ago" => "luni în urmă",
+"last year" => "ultimul an",
+"years ago" => "ani în urmă",
"File handling" => "Manipulare fișiere",
"Maximum upload size" => "Dimensiune maximă admisă la încărcare",
"max. possible: " => "max. posibil:",
@@ -17,6 +40,7 @@
"Enable ZIP-download" => "Activează descărcare fișiere compresate",
"0 is unlimited" => "0 e nelimitat",
"Maximum input size for ZIP files" => "Dimensiunea maximă de intrare pentru fișiere compresate",
+"Save" => "Salvare",
"New" => "Nou",
"Text file" => "Fișier text",
"Folder" => "Dosar",
@@ -24,7 +48,6 @@
"Upload" => "Încarcă",
"Cancel upload" => "Anulează încărcarea",
"Nothing in here. Upload something!" => "Nimic aici. Încarcă ceva!",
-"Name" => "Nume",
"Share" => "Partajează",
"Download" => "Descarcă",
"Upload too large" => "Fișierul încărcat este prea mare",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index 61091790af5..2ba14a1ac03 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -9,28 +9,44 @@
"Files" => "Файлы",
"Unshare" => "Отменить публикацию",
"Delete" => "Удалить",
-"already exists" => "уже существует",
+"Rename" => "Переименовать",
+"{new_name} already exists" => "{new_name} уже существует",
"replace" => "заменить",
"suggest name" => "предложить название",
"cancel" => "отмена",
-"replaced" => "заменён",
+"replaced {new_name}" => "заменено {new_name}",
"undo" => "отмена",
-"with" => "с",
-"unshared" => "публикация отменена",
-"deleted" => "удален",
+"replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}",
+"unshared {files}" => "не опубликованные {files}",
+"deleted {files}" => "удаленные {files}",
"generating ZIP-file, it may take some time." => "создание ZIP-файла, это может занять некоторое время.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Не удается загрузить файл размером 0 байт в каталог",
"Upload Error" => "Ошибка загрузки",
"Pending" => "Ожидание",
+"1 file uploading" => "загружается 1 файл",
+"{count} files uploading" => "{count} файлов загружается",
"Upload cancelled." => "Загрузка отменена.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.",
"Invalid name, '/' is not allowed." => "Неверное имя, '/' не допускается.",
+"{count} files scanned" => "{count} файлов просканировано",
+"error while scanning" => "ошибка во время санирования",
+"Name" => "Название",
"Size" => "Размер",
"Modified" => "Изменён",
-"folder" => "папка",
-"folders" => "папки",
-"file" => "файл",
-"files" => "файлы",
+"1 folder" => "1 папка",
+"{count} folders" => "{count} папок",
+"1 file" => "1 файл",
+"{count} files" => "{count} файлов",
+"seconds ago" => "несколько секунд назад",
+"1 minute ago" => "1 минуту назад",
+"{minutes} minutes ago" => "{minutes} минут назад",
+"today" => "сегодня",
+"yesterday" => "вчера",
+"{days} days ago" => "{days} дней назад",
+"last month" => "в прошлом месяце",
+"months ago" => "несколько месяцев назад",
+"last year" => "в прошлом году",
+"years ago" => "несколько лет назад",
"File handling" => "Управление файлами",
"Maximum upload size" => "Максимальный размер загружаемого файла",
"max. possible: " => "макс. возможно: ",
@@ -46,7 +62,6 @@
"Upload" => "Загрузить",
"Cancel upload" => "Отмена загрузки",
"Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!",
-"Name" => "Название",
"Share" => "Опубликовать",
"Download" => "Скачать",
"Upload too large" => "Файл слишком большой",
diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php
index f43959d4e95..d9792a1f8ab 100644
--- a/apps/files/l10n/ru_RU.php
+++ b/apps/files/l10n/ru_RU.php
@@ -9,28 +9,44 @@
"Files" => "Файлы",
"Unshare" => "Скрыть",
"Delete" => "Удалить",
-"already exists" => "уже существует",
+"Rename" => "Переименовать",
+"{new_name} already exists" => "{новое_имя} уже существует",
"replace" => "отмена",
"suggest name" => "подобрать название",
"cancel" => "отменить",
-"replaced" => "заменено",
+"replaced {new_name}" => "заменено {новое_имя}",
"undo" => "отменить действие",
-"with" => "с",
-"unshared" => "скрытый",
-"deleted" => "удалено",
+"replaced {new_name} with {old_name}" => "заменено {новое_имя} с {старое_имя}",
+"unshared {files}" => "Cовместное использование прекращено {файлы}",
+"deleted {files}" => "удалено {файлы}",
"generating ZIP-file, it may take some time." => "Создание ZIP-файла, это может занять некоторое время.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Невозможно загрузить файл,\n так как он имеет нулевой размер или является директорией",
"Upload Error" => "Ошибка загрузки",
"Pending" => "Ожидающий решения",
+"1 file uploading" => "загрузка 1 файла",
+"{count} files uploading" => "{количество} загружено файлов",
"Upload cancelled." => "Загрузка отменена",
"File upload is in progress. Leaving the page now will cancel the upload." => "Процесс загрузки файла. Если покинуть страницу сейчас, загрузка будет отменена.",
"Invalid name, '/' is not allowed." => "Неправильное имя, '/' не допускается.",
+"{count} files scanned" => "{количество} файлов отсканировано",
+"error while scanning" => "ошибка при сканировании",
+"Name" => "Имя",
"Size" => "Размер",
"Modified" => "Изменен",
-"folder" => "папка",
-"folders" => "папки",
-"file" => "файл",
-"files" => "файлы",
+"1 folder" => "1 папка",
+"{count} folders" => "{количество} папок",
+"1 file" => "1 файл",
+"{count} files" => "{количество} файлов",
+"seconds ago" => "секунд назад",
+"1 minute ago" => "1 минуту назад",
+"{minutes} minutes ago" => "{minutes} минут назад",
+"today" => "сегодня",
+"yesterday" => "вчера",
+"{days} days ago" => "{days} дней назад",
+"last month" => "в прошлом месяце",
+"months ago" => "месяцев назад",
+"last year" => "в прошлом году",
+"years ago" => "лет назад",
"File handling" => "Работа с файлами",
"Maximum upload size" => "Максимальный размер загружаемого файла",
"max. possible: " => "Максимально возможный",
@@ -46,7 +62,6 @@
"Upload" => "Загрузить ",
"Cancel upload" => "Отмена загрузки",
"Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!",
-"Name" => "Имя",
"Share" => "Сделать общим",
"Download" => "Загрузить",
"Upload too large" => "Загрузка слишком велика",
diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php
new file mode 100644
index 00000000000..b0243e89753
--- /dev/null
+++ b/apps/files/l10n/si_LK.php
@@ -0,0 +1,32 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "නිවැරදි ව ගොනුව උඩුගත කෙරිනි",
+"The uploaded file was only partially uploaded" => "උඩුගත කළ ගොනුවේ කොටසක් පමණක් උඩුගත විය",
+"No file was uploaded" => "කිසිදු ගොනවක් උඩුගත නොවිනි",
+"Failed to write to disk" => "තැටිගත කිරීම අසාර්ථකයි",
+"Files" => "ගොනු",
+"Delete" => "මකන්න",
+"Rename" => "නැවත නම් කරන්න",
+"replace" => "ප්‍රතිස්ථාපනය කරන්න",
+"suggest name" => "නමක් යෝජනා කරන්න",
+"cancel" => "අත් හරින්න",
+"undo" => "නිෂ්ප්‍රභ කරන්න",
+"Upload Error" => "උඩුගත කිරීමේ දෝශයක්",
+"Upload cancelled." => "උඩුගත කිරීම අත් හරින්න ලදී",
+"Name" => "නම",
+"Size" => "ප්‍රමාණය",
+"1 file" => "1 ගොනුවක්",
+"today" => "අද",
+"yesterday" => "පෙර දින",
+"File handling" => "ගොනු පරිහරණය",
+"Maximum upload size" => "උඩුගත කිරීමක උපරිම ප්‍රමාණය",
+"max. possible: " => "හැකි උපරිමය:",
+"Save" => "සුරකින්න",
+"New" => "නව",
+"Text file" => "පෙළ ගොනුව",
+"Folder" => "ෆෝල්ඩරය",
+"Upload" => "උඩුගත කිරීම",
+"Cancel upload" => "උඩුගත කිරීම අත් හරින්න",
+"Nothing in here. Upload something!" => "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න",
+"Download" => "බාගත කිරීම",
+"Upload too large" => "උඩුගත කිරීම විශාල වැඩිය"
+);
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
index 8a31c550320..cbb89eb8a3f 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -7,38 +7,65 @@
"Missing a temporary folder" => "Chýbajúci dočasný priečinok",
"Failed to write to disk" => "Zápis na disk sa nepodaril",
"Files" => "Súbory",
+"Unshare" => "Nezdielať",
"Delete" => "Odstrániť",
+"Rename" => "Premenovať",
+"{new_name} already exists" => "{new_name} už existuje",
+"replace" => "nahradiť",
+"suggest name" => "pomôcť s menom",
+"cancel" => "zrušiť",
+"replaced {new_name}" => "prepísaný {new_name}",
+"undo" => "vrátiť",
+"replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}",
+"unshared {files}" => "zdieľanie zrušené pre {files}",
+"deleted {files}" => "zmazané {files}",
"generating ZIP-file, it may take some time." => "generujem ZIP-súbor, môže to chvíľu trvať.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nemôžem nahrať súbor lebo je to priečinok alebo má 0 bajtov.",
-"Upload Error" => "Chyba nahrávania",
+"Upload Error" => "Chyba odosielania",
"Pending" => "Čaká sa",
-"Upload cancelled." => "Nahrávanie zrušené",
+"1 file uploading" => "1 súbor sa posiela ",
+"{count} files uploading" => "{count} súborov odosielaných",
+"Upload cancelled." => "Odosielanie zrušené",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
"Invalid name, '/' is not allowed." => "Chybný názov, \"/\" nie je povolené",
+"{count} files scanned" => "{count} súborov prehľadaných",
+"error while scanning" => "chyba počas kontroly",
+"Name" => "Meno",
"Size" => "Veľkosť",
"Modified" => "Upravené",
-"folder" => "priečinok",
-"folders" => "priečinky",
-"file" => "súbor",
-"files" => "súbory",
+"1 folder" => "1 priečinok",
+"{count} folders" => "{count} priečinkov",
+"1 file" => "1 súbor",
+"{count} files" => "{count} súborov",
+"seconds ago" => "pred sekundami",
+"1 minute ago" => "pred minútou",
+"{minutes} minutes ago" => "pred {minutes} minútami",
+"today" => "dnes",
+"yesterday" => "včera",
+"{days} days ago" => "pred {days} dňami",
+"last month" => "minulý mesiac",
+"months ago" => "pred mesiacmi",
+"last year" => "minulý rok",
+"years ago" => "pred rokmi",
"File handling" => "Nastavenie správanie k súborom",
-"Maximum upload size" => "Maximálna veľkosť nahratia",
+"Maximum upload size" => "Maximálna veľkosť odosielaného súboru",
"max. possible: " => "najväčšie možné:",
"Needed for multi-file and folder downloads." => "Vyžadované pre sťahovanie viacerých súborov a adresárov.",
"Enable ZIP-download" => "Povoliť sťahovanie ZIP súborov",
"0 is unlimited" => "0 znamená neobmedzené",
"Maximum input size for ZIP files" => "Najväčšia veľkosť ZIP súborov",
+"Save" => "Uložiť",
"New" => "Nový",
"Text file" => "Textový súbor",
"Folder" => "Priečinok",
"From url" => "Z url",
-"Upload" => "Nahrať",
+"Upload" => "Odoslať",
"Cancel upload" => "Zrušiť odosielanie",
-"Nothing in here. Upload something!" => "Nič tu nie je. Nahrajte niečo!",
-"Name" => "Meno",
+"Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!",
"Share" => "Zdielať",
"Download" => "Stiahnuť",
-"Upload too large" => "Nahrávanie príliš veľké",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory ktoré sa snažíte nahrať presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
-"Files are being scanned, please wait." => "Súbory sa práve prehľadávajú, prosím čakajte.",
+"Upload too large" => "Odosielaný súbor je príliš veľký",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
+"Files are being scanned, please wait." => "Čakajte, súbory sú prehľadávané.",
"Current scanning" => "Práve prehliadané"
);
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index 1a7ae8c0b10..21e1bf05253 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -1,56 +1,63 @@
<?php $TRANSLATIONS = array(
-"There is no error, the file uploaded with success" => "Datoteka je bila uspešno naložena.",
+"There is no error, the file uploaded with success" => "Datoteka je uspešno naložena brez napak.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Naložena datoteka presega velikost, ki jo določa parameter upload_max_filesize v datoteki php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Naložena datoteka presega velikost, ki jo določa parameter MAX_FILE_SIZE v HTML obrazcu",
-"The uploaded file was only partially uploaded" => "Datoteka je bila le delno naložena",
+"The uploaded file was only partially uploaded" => "Datoteka je le delno naložena",
"No file was uploaded" => "Nobena datoteka ni bila naložena",
"Missing a temporary folder" => "Manjka začasna mapa",
"Failed to write to disk" => "Pisanje na disk je spodletelo",
"Files" => "Datoteke",
"Unshare" => "Odstrani iz souporabe",
"Delete" => "Izbriši",
-"already exists" => "že obstaja",
-"replace" => "nadomesti",
+"Rename" => "Preimenuj",
+"{new_name} already exists" => "{new_name} že obstaja",
+"replace" => "zamenjaj",
"suggest name" => "predlagaj ime",
-"cancel" => "ekliči",
-"replaced" => "nadomeščen",
+"cancel" => "prekliči",
+"replaced {new_name}" => "zamenjano je ime {new_name}",
"undo" => "razveljavi",
-"with" => "z",
-"unshared" => "odstranjeno iz souporabe",
-"deleted" => "izbrisano",
-"generating ZIP-file, it may take some time." => "Ustvarjam ZIP datoteko. To lahko traja nekaj časa.",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nalaganje ni mogoče, saj gre za mapo, ali pa ima datoteka velikost 0 bajtov.",
-"Upload Error" => "Napaka pri nalaganju",
-"Pending" => "Na čakanju",
-"Upload cancelled." => "Nalaganje je bilo preklicano.",
-"File upload is in progress. Leaving the page now will cancel the upload." => "Nalaganje datoteke je v teku. Če zapustite to stran zdaj, boste nalaganje preklicali.",
+"replaced {new_name} with {old_name}" => "zamenjano ime {new_name} z imenom {old_name}",
+"generating ZIP-file, it may take some time." => "Ustvarjanje datoteke ZIP. To lahko traja nekaj časa.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Pošiljanje ni mogoče, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov.",
+"Upload Error" => "Napaka med nalaganjem",
+"Pending" => "V čakanju ...",
+"1 file uploading" => "Pošiljanje 1 datoteke",
+"Upload cancelled." => "Pošiljanje je preklicano.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
"Invalid name, '/' is not allowed." => "Neveljavno ime. Znak '/' ni dovoljen.",
+"error while scanning" => "napaka med pregledovanjem datotek",
+"Name" => "Ime",
"Size" => "Velikost",
"Modified" => "Spremenjeno",
-"folder" => "mapa",
-"folders" => "mape",
-"file" => "datoteka",
-"files" => "datoteke",
-"File handling" => "Rokovanje z datotekami",
-"Maximum upload size" => "Največja velikost za nalaganje",
+"1 folder" => "1 mapa",
+"1 file" => "1 datoteka",
+"seconds ago" => "sekund nazaj",
+"1 minute ago" => "Pred 1 minuto",
+"today" => "danes",
+"yesterday" => "včeraj",
+"last month" => "zadnji mesec",
+"months ago" => "mesecev nazaj",
+"last year" => "lansko leto",
+"years ago" => "let nazaj",
+"File handling" => "Upravljanje z datotekami",
+"Maximum upload size" => "Največja velikost za pošiljanja",
"max. possible: " => "največ mogoče:",
-"Needed for multi-file and folder downloads." => "Potrebno za prenose večih datotek in map.",
-"Enable ZIP-download" => "Omogoči ZIP-prejemanje",
+"Needed for multi-file and folder downloads." => "Uporabljeno za prenos več datotek in map.",
+"Enable ZIP-download" => "Omogoči prejemanje arhivov ZIP",
"0 is unlimited" => "0 je neskončno",
-"Maximum input size for ZIP files" => "Največja vhodna velikost za ZIP datoteke",
+"Maximum input size for ZIP files" => "Največja vhodna velikost za datoteke ZIP",
"Save" => "Shrani",
"New" => "Nova",
"Text file" => "Besedilna datoteka",
"Folder" => "Mapa",
-"From url" => "Iz url naslova",
-"Upload" => "Naloži",
-"Cancel upload" => "Prekliči nalaganje",
+"From url" => "Iz naslova URL",
+"Upload" => "Pošlji",
+"Cancel upload" => "Prekliči pošiljanje",
"Nothing in here. Upload something!" => "Tukaj ni ničesar. Naložite kaj!",
-"Name" => "Ime",
"Share" => "Souporaba",
-"Download" => "Prenesi",
+"Download" => "Prejmi",
"Upload too large" => "Nalaganje ni mogoče, ker je preveliko",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite naložiti, presegajo največjo dovoljeno velikost na tem strežniku.",
-"Files are being scanned, please wait." => "Preiskujem datoteke, prosimo počakajte.",
-"Current scanning" => "Trenutno preiskujem"
+"Files are being scanned, please wait." => "Poteka preučevanje datotek, počakajte ...",
+"Current scanning" => "Trenutno poteka preučevanje"
);
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index 84164e25c62..99e4b12697c 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "Недостаје привремена фасцикла",
"Files" => "Фајлови",
"Delete" => "Обриши",
+"Name" => "Име",
"Size" => "Величина",
"Modified" => "Задња измена",
"Maximum upload size" => "Максимална величина пошиљке",
@@ -15,7 +16,6 @@
"Folder" => "фасцикла",
"Upload" => "Пошаљи",
"Nothing in here. Upload something!" => "Овде нема ничег. Пошаљите нешто!",
-"Name" => "Име",
"Download" => "Преузми",
"Upload too large" => "Пошиљка је превелика",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Фајлови које желите да пошаљете превазилазе ограничење максималне величине пошиљке на овом серверу."
diff --git a/apps/files/l10n/sr@latin.php b/apps/files/l10n/sr@latin.php
index 96c567aec41..d8c7ef18989 100644
--- a/apps/files/l10n/sr@latin.php
+++ b/apps/files/l10n/sr@latin.php
@@ -7,12 +7,12 @@
"Missing a temporary folder" => "Nedostaje privremena fascikla",
"Files" => "Fajlovi",
"Delete" => "Obriši",
+"Name" => "Ime",
"Size" => "Veličina",
"Modified" => "Zadnja izmena",
"Maximum upload size" => "Maksimalna veličina pošiljke",
"Upload" => "Pošalji",
"Nothing in here. Upload something!" => "Ovde nema ničeg. Pošaljite nešto!",
-"Name" => "Ime",
"Download" => "Preuzmi",
"Upload too large" => "Pošiljka je prevelika",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru."
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
index 06d988d4512..0945145d318 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -9,28 +9,44 @@
"Files" => "Filer",
"Unshare" => "Sluta dela",
"Delete" => "Radera",
-"already exists" => "finns redan",
+"Rename" => "Byt namn",
+"{new_name} already exists" => "{new_name} finns redan",
"replace" => "ersätt",
"suggest name" => "föreslå namn",
"cancel" => "avbryt",
-"replaced" => "ersatt",
+"replaced {new_name}" => "ersatt {new_name}",
"undo" => "ångra",
-"with" => "med",
-"unshared" => "Ej delad",
-"deleted" => "raderad",
+"replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}",
+"unshared {files}" => "stoppad delning {files}",
+"deleted {files}" => "raderade {files}",
"generating ZIP-file, it may take some time." => "genererar ZIP-fil, det kan ta lite tid.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes.",
"Upload Error" => "Uppladdningsfel",
"Pending" => "Väntar",
+"1 file uploading" => "1 filuppladdning",
+"{count} files uploading" => "{count} filer laddas upp",
"Upload cancelled." => "Uppladdning avbruten.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
"Invalid name, '/' is not allowed." => "Ogiltigt namn, '/' är inte tillåten.",
+"{count} files scanned" => "{count} filer skannade",
+"error while scanning" => "fel vid skanning",
+"Name" => "Namn",
"Size" => "Storlek",
"Modified" => "Ändrad",
-"folder" => "mapp",
-"folders" => "mappar",
-"file" => "fil",
-"files" => "filer",
+"1 folder" => "1 mapp",
+"{count} folders" => "{count} mappar",
+"1 file" => "1 fil",
+"{count} files" => "{count} filer",
+"seconds ago" => "sekunder sedan",
+"1 minute ago" => "1 minut sedan",
+"{minutes} minutes ago" => "{minutes} minuter sedan",
+"today" => "i dag",
+"yesterday" => "i går",
+"{days} days ago" => "{days} dagar sedan",
+"last month" => "förra månaden",
+"months ago" => "månader sedan",
+"last year" => "förra året",
+"years ago" => "år sedan",
"File handling" => "Filhantering",
"Maximum upload size" => "Maximal storlek att ladda upp",
"max. possible: " => "max. möjligt:",
@@ -46,7 +62,6 @@
"Upload" => "Ladda upp",
"Cancel upload" => "Avbryt uppladdning",
"Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!",
-"Name" => "Namn",
"Share" => "Dela",
"Download" => "Ladda ner",
"Upload too large" => "För stor uppladdning",
diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php
new file mode 100644
index 00000000000..e1c00d05a72
--- /dev/null
+++ b/apps/files/l10n/ta_LK.php
@@ -0,0 +1,71 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "இங்கு வழு இல்லை, கோப்பு வெற்றிகரமாக பதிவேற்றப்பட்டது",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "பதிவேற்றப்பட்ட கோப்பானது php.ini இலுள்ள upload_max_filesize directive ஐ விட கூடியது",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "பதிவேற்றப்பட்ட கோப்பானது HTML படிவத்தில் குறிப்பிடப்பட்டுள்ள MAX_FILE_SIZE directive ஐ விட கூடியது",
+"The uploaded file was only partially uploaded" => "பதிவேற்றப்பட்ட கோப்பானது பகுதியாக மட்டுமே பதிவேற்றப்பட்டுள்ளது",
+"No file was uploaded" => "எந்த கோப்பும் பதிவேற்றப்படவில்லை",
+"Missing a temporary folder" => "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை",
+"Failed to write to disk" => "வட்டில் எழுத முடியவில்லை",
+"Files" => "கோப்புகள்",
+"Unshare" => "பகிரப்படாதது",
+"Delete" => "அழிக்க",
+"Rename" => "பெயர்மாற்றம்",
+"{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது",
+"replace" => "மாற்றிடுக",
+"suggest name" => "பெயரை பரிந்துரைக்க",
+"cancel" => "இரத்து செய்க",
+"replaced {new_name}" => "மாற்றப்பட்டது {new_name}",
+"undo" => "முன் செயல் நீக்கம் ",
+"replaced {new_name} with {old_name}" => "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது",
+"unshared {files}" => "பகிரப்படாதது {கோப்புகள்}",
+"deleted {files}" => "நீக்கப்பட்டது {கோப்புகள்}",
+"generating ZIP-file, it may take some time." => " ZIP கோப்பு உருவாக்கப்படுகின்றது, இது சில நேரம் ஆகலாம்.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "அடைவு அல்லது 0 bytes ஐ கொண்டுள்ளதால் உங்களுடைய கோப்பை பதிவேற்ற முடியவில்லை",
+"Upload Error" => "பதிவேற்றல் வழு",
+"Pending" => "நிலுவையிலுள்ள",
+"1 file uploading" => "1 கோப்பு பதிவேற்றப்படுகிறது",
+"{count} files uploading" => "{எண்ணிக்கை} கோப்புகள் பதிவேற்றப்படுகின்றது",
+"Upload cancelled." => "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது",
+"File upload is in progress. Leaving the page now will cancel the upload." => "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.",
+"Invalid name, '/' is not allowed." => "செல்லுபடியற்ற பெயர், '/ ' அனுமதிக்கப்படமாட்டாது",
+"{count} files scanned" => "{எண்ணிக்கை} கோப்புகள் வருடப்பட்டது",
+"error while scanning" => "வருடும் போதான வழு",
+"Name" => "பெயர்",
+"Size" => "அளவு",
+"Modified" => "மாற்றப்பட்டது",
+"1 folder" => "1 கோப்புறை",
+"{count} folders" => "{எண்ணிக்கை} கோப்புறைகள்",
+"1 file" => "1 கோப்பு",
+"{count} files" => "{எண்ணிக்கை} கோப்புகள்",
+"seconds ago" => "செக்கன்களுக்கு முன்",
+"1 minute ago" => "1 நிமிடத்திற்கு முன் ",
+"{minutes} minutes ago" => "{நிமிடங்கள்} நிமிடங்களுக்கு முன் ",
+"today" => "இன்று",
+"yesterday" => "நேற்று",
+"{days} days ago" => "{நாட்கள்} நாட்களுக்கு முன்",
+"last month" => "கடந்த மாதம்",
+"months ago" => "மாதங்களுக்கு முன",
+"last year" => "கடந்த வருடம்",
+"years ago" => "வருடங்களுக்கு முன்",
+"File handling" => "கோப்பு கையாளுதல்",
+"Maximum upload size" => "பதிவேற்றக்கூடிய ஆகக்கூடிய அளவு ",
+"max. possible: " => "ஆகக் கூடியது:",
+"Needed for multi-file and folder downloads." => "பல்வேறுப்பட்ட கோப்பு மற்றும் கோப்புறைகளை பதிவிறக்க தேவையானது.",
+"Enable ZIP-download" => "ZIP பதிவிறக்கலை இயலுமைப்படுத்துக",
+"0 is unlimited" => "0 ஆனது எல்லையற்றது",
+"Maximum input size for ZIP files" => "ZIP கோப்புகளுக்கான ஆகக்கூடிய உள்ளீட்டு அளவு",
+"Save" => "சேமிக்க",
+"New" => "புதிய",
+"Text file" => "கோப்பு உரை",
+"Folder" => "கோப்புறை",
+"From url" => "url இலிருந்து",
+"Upload" => "பதிவேற்றுக",
+"Cancel upload" => "பதிவேற்றலை இரத்து செய்க",
+"Nothing in here. Upload something!" => "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!",
+"Share" => "பகிர்வு",
+"Download" => "பதிவிறக்குக",
+"Upload too large" => "பதிவேற்றல் மிகப்பெரியது",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்புகளானது இந்த சேவையகத்தில் கோப்பு பதிவேற்றக்கூடிய ஆகக்கூடிய அளவிலும் கூடியது.",
+"Files are being scanned, please wait." => "கோப்புகள் வருடப்படுகின்றன, தயவுசெய்து காத்திருங்கள்.",
+"Current scanning" => "தற்போது வருடப்படுபவை"
+);
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index 2208051236c..3645435e54b 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -9,28 +9,30 @@
"Files" => "ไฟล์",
"Unshare" => "ยกเลิกการแชร์ข้อมูล",
"Delete" => "ลบ",
-"already exists" => "มีอยู่แล้ว",
+"Rename" => "เปลี่ยนชื่อ",
"replace" => "แทนที่",
"suggest name" => "แนะนำชื่อ",
"cancel" => "ยกเลิก",
-"replaced" => "แทนที่แล้ว",
"undo" => "เลิกทำ",
-"with" => "กับ",
-"unshared" => "ยกเลิกการแชร์ข้อมูลแล้ว",
-"deleted" => "ลบแล้ว",
"generating ZIP-file, it may take some time." => "กำลังสร้างไฟล์บีบอัด ZIP อาจใช้เวลาสักครู่",
"Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่หรือมีขนาด 0 ไบต์",
"Upload Error" => "เกิดข้อผิดพลาดในการอัพโหลด",
"Pending" => "อยู่ระหว่างดำเนินการ",
+"1 file uploading" => "กำลังอัพโหลดไฟล์ 1 ไฟล์",
"Upload cancelled." => "การอัพโหลดถูกยกเลิก",
"File upload is in progress. Leaving the page now will cancel the upload." => "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
"Invalid name, '/' is not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง '/' ไม่อนุญาตให้ใช้งาน",
+"error while scanning" => "พบข้อผิดพลาดในระหว่างการสแกนไฟล์",
+"Name" => "ชื่อ",
"Size" => "ขนาด",
"Modified" => "ปรับปรุงล่าสุด",
-"folder" => "โฟลเดอร์",
-"folders" => "โฟลเดอร์",
-"file" => "ไฟล์",
-"files" => "ไฟล์",
+"seconds ago" => "วินาที ก่อนหน้านี้",
+"today" => "วันนี้",
+"yesterday" => "เมื่อวานนี้",
+"last month" => "เดือนที่แล้ว",
+"months ago" => "เดือน ที่ผ่านมา",
+"last year" => "ปีที่แล้ว",
+"years ago" => "ปี ที่ผ่านมา",
"File handling" => "การจัดกาไฟล์",
"Maximum upload size" => "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
"max. possible: " => "จำนวนสูงสุดที่สามารถทำได้: ",
@@ -46,7 +48,6 @@
"Upload" => "อัพโหลด",
"Cancel upload" => "ยกเลิกการอัพโหลด",
"Nothing in here. Upload something!" => "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!",
-"Name" => "ชื่อ",
"Share" => "แชร์",
"Download" => "ดาวน์โหลด",
"Upload too large" => "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index 72e0e1427d3..d9a619353d1 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -8,13 +8,9 @@
"Failed to write to disk" => "Diske yazılamadı",
"Files" => "Dosyalar",
"Delete" => "Sil",
-"already exists" => "zaten mevcut",
"replace" => "değiştir",
"cancel" => "iptal",
-"replaced" => "değiştirildi",
"undo" => "geri al",
-"with" => "ile",
-"deleted" => "silindi",
"generating ZIP-file, it may take some time." => "ZIP dosyası oluşturuluyor, biraz sürebilir.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi",
"Upload Error" => "Yükleme hatası",
@@ -22,12 +18,9 @@
"Upload cancelled." => "Yükleme iptal edildi.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.",
"Invalid name, '/' is not allowed." => "Geçersiz isim, '/' işaretine izin verilmiyor.",
+"Name" => "Ad",
"Size" => "Boyut",
"Modified" => "Değiştirilme",
-"folder" => "dizin",
-"folders" => "dizinler",
-"file" => "dosya",
-"files" => "dosyalar",
"File handling" => "Dosya taşıma",
"Maximum upload size" => "Maksimum yükleme boyutu",
"max. possible: " => "mümkün olan en fazla: ",
@@ -42,7 +35,6 @@
"Upload" => "Yükle",
"Cancel upload" => "Yüklemeyi iptal et",
"Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!",
-"Name" => "Ad",
"Share" => "Paylaş",
"Download" => "İndir",
"Upload too large" => "Yüklemeniz çok büyük",
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index dc7e9d18b70..6276b6074ca 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -8,19 +8,15 @@
"Files" => "Файли",
"Delete" => "Видалити",
"undo" => "відмінити",
-"deleted" => "видалені",
"generating ZIP-file, it may take some time." => "Створення ZIP-файлу, це може зайняти певний час.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
"Upload Error" => "Помилка завантаження",
"Pending" => "Очікування",
"Upload cancelled." => "Завантаження перервано.",
"Invalid name, '/' is not allowed." => "Некоректне ім'я, '/' не дозволено.",
+"Name" => "Ім'я",
"Size" => "Розмір",
"Modified" => "Змінено",
-"folder" => "тека",
-"folders" => "теки",
-"file" => "файл",
-"files" => "файли",
"Maximum upload size" => "Максимальний розмір відвантажень",
"max. possible: " => "макс.можливе:",
"0 is unlimited" => "0 є безліміт",
@@ -31,7 +27,6 @@
"Upload" => "Відвантажити",
"Cancel upload" => "Перервати завантаження",
"Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!",
-"Name" => "Ім'я",
"Share" => "Поділитися",
"Download" => "Завантажити",
"Upload too large" => "Файл занадто великий",
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
index ce7e0c219ab..f933d6c7912 100644
--- a/apps/files/l10n/vi.php
+++ b/apps/files/l10n/vi.php
@@ -9,29 +9,47 @@
"Files" => "Tập tin",
"Unshare" => "Không chia sẽ",
"Delete" => "Xóa",
-"already exists" => "đã tồn tại",
+"Rename" => "Sửa tên",
+"{new_name} already exists" => "{new_name} đã tồn tại",
"replace" => "thay thế",
"suggest name" => "tên gợi ý",
"cancel" => "hủy",
-"replaced" => "đã được thay thế",
+"replaced {new_name}" => "đã thay thế {new_name}",
"undo" => "lùi lại",
-"with" => "với",
-"deleted" => "đã xóa",
+"replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
+"unshared {files}" => "hủy chia sẽ {files}",
+"deleted {files}" => "đã xóa {files}",
"generating ZIP-file, it may take some time." => "Tạo tập tinh ZIP, điều này có thể mất một ít thời gian",
"Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte",
"Upload Error" => "Tải lên lỗi",
"Pending" => "Chờ",
+"1 file uploading" => "1 tệp tin đang được tải lên",
+"{count} files uploading" => "{count} tập tin đang tải lên",
"Upload cancelled." => "Hủy tải lên",
"File upload is in progress. Leaving the page now will cancel the upload." => "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.",
"Invalid name, '/' is not allowed." => "Tên không hợp lệ ,không được phép dùng '/'",
+"{count} files scanned" => "{count} tập tin đã được quét",
+"error while scanning" => "lỗi trong khi quét",
+"Name" => "Tên",
"Size" => "Kích cỡ",
"Modified" => "Thay đổi",
-"folder" => "folder",
-"folders" => "folders",
-"file" => "file",
-"files" => "files",
+"1 folder" => "1 thư mục",
+"{count} folders" => "{count} thư mục",
+"1 file" => "1 tập tin",
+"{count} files" => "{count} tập tin",
+"seconds ago" => "giây trước",
+"1 minute ago" => "1 phút trước",
+"{minutes} minutes ago" => "{minutes} phút trước",
+"today" => "hôm nay",
+"yesterday" => "hôm qua",
+"{days} days ago" => "{days} ngày trước",
+"last month" => "tháng trước",
+"months ago" => "tháng trước",
+"last year" => "năm trước",
+"years ago" => "năm trước",
"File handling" => "Xử lý tập tin",
"Maximum upload size" => "Kích thước tối đa ",
+"max. possible: " => "tối đa cho phép",
"Needed for multi-file and folder downloads." => "Cần thiết cho tải nhiều tập tin và thư mục.",
"Enable ZIP-download" => "Cho phép ZIP-download",
"0 is unlimited" => "0 là không giới hạn",
@@ -44,7 +62,6 @@
"Upload" => "Tải lên",
"Cancel upload" => "Hủy upload",
"Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !",
-"Name" => "Tên",
"Share" => "Chia sẻ",
"Download" => "Tải xuống",
"Upload too large" => "File tải lên quá lớn",
diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php
index 42063712eac..2a52ac8096e 100644
--- a/apps/files/l10n/zh_CN.GB2312.php
+++ b/apps/files/l10n/zh_CN.GB2312.php
@@ -7,26 +7,32 @@
"Missing a temporary folder" => "丢失了一个临时文件夹",
"Failed to write to disk" => "写磁盘失败",
"Files" => "文件",
+"Unshare" => "取消共享",
"Delete" => "删除",
-"already exists" => "已经存在了",
+"Rename" => "重命名",
"replace" => "替换",
+"suggest name" => "推荐名称",
"cancel" => "取消",
-"replaced" => "替换过了",
"undo" => "撤销",
-"with" => "随着",
-"deleted" => "删除",
"generating ZIP-file, it may take some time." => "正在生成ZIP文件,这可能需要点时间",
"Unable to upload your file as it is a directory or has 0 bytes" => "不能上传你指定的文件,可能因为它是个文件夹或者大小为0",
"Upload Error" => "上传错误",
"Pending" => "Pending",
+"1 file uploading" => "1 个文件正在上传",
"Upload cancelled." => "上传取消了",
+"File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传。关闭页面会取消上传。",
"Invalid name, '/' is not allowed." => "非法文件名,\"/\"是不被许可的",
+"error while scanning" => "扫描出错",
+"Name" => "名字",
"Size" => "大小",
"Modified" => "修改日期",
-"folder" => "文件夹",
-"folders" => "文件夹",
-"file" => "文件",
-"files" => "文件",
+"seconds ago" => "秒前",
+"today" => "今天",
+"yesterday" => "昨天",
+"last month" => "上个月",
+"months ago" => "月前",
+"last year" => "去年",
+"years ago" => "年前",
"File handling" => "文件处理中",
"Maximum upload size" => "最大上传大小",
"max. possible: " => "最大可能",
@@ -34,6 +40,7 @@
"Enable ZIP-download" => "支持ZIP下载",
"0 is unlimited" => "0是无限的",
"Maximum input size for ZIP files" => "最大的ZIP文件输入大小",
+"Save" => "保存",
"New" => "新建",
"Text file" => "文本文档",
"Folder" => "文件夹",
@@ -41,7 +48,6 @@
"Upload" => "上传",
"Cancel upload" => "取消上传",
"Nothing in here. Upload something!" => "这里没有东西.上传点什么!",
-"Name" => "名字",
"Share" => "分享",
"Download" => "下载",
"Upload too large" => "上传的文件太大了",
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
index cd8dbe406a4..506c3ad29c0 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -9,31 +9,47 @@
"Files" => "文件",
"Unshare" => "取消分享",
"Delete" => "删除",
-"already exists" => "已经存在",
+"Rename" => "重命名",
+"{new_name} already exists" => "{new_name} 已存在",
"replace" => "替换",
"suggest name" => "建议名称",
"cancel" => "取消",
-"replaced" => "已经替换",
+"replaced {new_name}" => "替换 {new_name}",
"undo" => "撤销",
-"with" => "随着",
-"unshared" => "已取消分享",
-"deleted" => "已经删除",
+"replaced {new_name} with {old_name}" => "已将 {old_name}替换成 {new_name}",
+"unshared {files}" => "取消了共享 {files}",
+"deleted {files}" => "删除了 {files}",
"generating ZIP-file, it may take some time." => "正在生成 ZIP 文件,可能需要一些时间",
"Unable to upload your file as it is a directory or has 0 bytes" => "无法上传文件,因为它是一个目录或者大小为 0 字节",
"Upload Error" => "上传错误",
"Pending" => "操作等待中",
+"1 file uploading" => "1个文件上传中",
+"{count} files uploading" => "{count} 个文件上传中",
"Upload cancelled." => "上传已取消",
"File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传中。现在离开此页会导致上传动作被取消。",
"Invalid name, '/' is not allowed." => "非法的名称,不允许使用‘/’。",
+"{count} files scanned" => "{count} 个文件已扫描。",
+"error while scanning" => "扫描时出错",
+"Name" => "名称",
"Size" => "大小",
"Modified" => "修改日期",
-"folder" => "文件夹",
-"folders" => "文件夹",
-"file" => "文件",
-"files" => "文件",
+"1 folder" => "1个文件夹",
+"{count} folders" => "{count} 个文件夹",
+"1 file" => "1 个文件",
+"{count} files" => "{count} 个文件",
+"seconds ago" => "秒前",
+"1 minute ago" => "一分钟前",
+"{minutes} minutes ago" => "{minutes} 分钟前",
+"today" => "今天",
+"yesterday" => "昨天",
+"{days} days ago" => "{days} 天前",
+"last month" => "上月",
+"months ago" => "月前",
+"last year" => "去年",
+"years ago" => "年前",
"File handling" => "文件处理",
"Maximum upload size" => "最大上传大小",
-"max. possible: " => "最大可能: ",
+"max. possible: " => "最大允许: ",
"Needed for multi-file and folder downloads." => "多文件和文件夹下载需要此项。",
"Enable ZIP-download" => "启用 ZIP 下载",
"0 is unlimited" => "0 为无限制",
@@ -46,11 +62,10 @@
"Upload" => "上传",
"Cancel upload" => "取消上传",
"Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!",
-"Name" => "名称",
"Share" => "共享",
"Download" => "下载",
"Upload too large" => "上传文件过大",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正尝试上传的文件超过了此服务器可以上传的最大大小",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
"Files are being scanned, please wait." => "文件正在被扫描,请稍候。",
"Current scanning" => "当前扫描"
);
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index 9652fb5a073..9013a752bc2 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -8,7 +8,6 @@
"Failed to write to disk" => "寫入硬碟失敗",
"Files" => "檔案",
"Delete" => "刪除",
-"already exists" => "已經存在",
"replace" => "取代",
"cancel" => "取消",
"generating ZIP-file, it may take some time." => "產生壓縮檔, 它可能需要一段時間.",
@@ -17,6 +16,7 @@
"Upload cancelled." => "上傳取消",
"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中. 離開此頁面將會取消上傳.",
"Invalid name, '/' is not allowed." => "無效的名稱, '/'是不被允許的",
+"Name" => "名稱",
"Size" => "大小",
"Modified" => "修改",
"File handling" => "檔案處理",
@@ -33,7 +33,6 @@
"Upload" => "上傳",
"Cancel upload" => "取消上傳",
"Nothing in here. Upload something!" => "沒有任何東西。請上傳內容!",
-"Name" => "名稱",
"Share" => "分享",
"Download" => "下載",
"Upload too large" => "上傳過大",
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 911a312fb9a..d49f2f4d5d3 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -12,13 +12,13 @@
</ul>
</div>
<div class="file_upload_wrapper svg">
- <form data-upload-id='1' class="file_upload_form" action="<?php echo OCP\Util::linkTo('files', 'ajax/upload.php'); ?>" method="post" enctype="multipart/form-data" target="file_upload_target_1">
+ <form data-upload-id='1' id="data-upload-form" class="file_upload_form" action="<?php echo OCP\Util::linkTo('files', 'ajax/upload.php'); ?>" method="post" enctype="multipart/form-data" target="file_upload_target_1">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
<input type="hidden" class="max_human_file_size" value="(max <?php echo $_['uploadMaxHumanFilesize']; ?>)">
<input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
- <button class="file_upload_filename">&nbsp;<img class='svg action' alt="Upload" src="<?php echo OCP\image_path("core", "actions/upload-white.svg"); ?>" /></button>
<input class="file_upload_start" type="file" name='files[]'/>
- <a href="#" class="file_upload_button_wrapper" onclick="return false;" title="<?php echo $l->t('Upload'); echo ' max. '.$_['uploadMaxHumanFilesize'] ?>"></a>
+ <a href="#" class="file_upload_button_wrapper" onclick="return false;" title="<?php echo $l->t('Upload'); echo ' max. '.$_['uploadMaxHumanFilesize'] ?>"></a>
+ <button class="file_upload_filename"></button>
<iframe name="file_upload_target_1" class='file_upload_target' src=""></iframe>
</form>
</div>
diff --git a/apps/files/templates/part.breadcrumb.php b/apps/files/templates/part.breadcrumb.php
index 875fc747bb7..71b695f65f8 100644
--- a/apps/files/templates/part.breadcrumb.php
+++ b/apps/files/templates/part.breadcrumb.php
@@ -1,6 +1,6 @@
<?php for($i=0; $i<count($_["breadcrumb"]); $i++):
$crumb = $_["breadcrumb"][$i]; ?>
- <div class="crumb <?php if($i == count($_["breadcrumb"])-1) echo 'last';?> svg" data-dir='<?php echo $crumb["dir"];?>' style='background-image:url("<?php echo OCP\image_path('core','breadcrumb.png');?>")'>
- <a href="<?php echo $_['baseURL'].$crumb["dir"]; ?>"><?php echo OCP\Util::sanitizeHTML($crumb["name"]); ?></a>
+ <div class="crumb <?php if($i == count($_["breadcrumb"])-1) echo 'last';?> svg" data-dir='<?php echo urlencode($crumb["dir"]);?>' style='background-image:url("<?php echo OCP\image_path('core','breadcrumb.png');?>")'>
+ <a href="<?php echo $_['baseURL'].urlencode($crumb["dir"]); ?>"><?php echo OCP\Util::sanitizeHTML($crumb["name"]); ?></a>
</div>
<?php endfor;?>
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php
index 8faeae3939c..aaf9c5f57ee 100644
--- a/apps/files/templates/part.list.php
+++ b/apps/files/templates/part.list.php
@@ -1,3 +1,12 @@
+ <script type="text/javascript">
+ <?php if ( array_key_exists('publicListView', $_) && $_['publicListView'] == true ) {
+ echo "var publicListView = true;";
+ } else {
+ echo "var publicListView = false;";
+ }
+ ?>
+ </script>
+
<?php foreach($_['files'] as $file):
$simple_file_size = OCP\simple_file_size($file['size']);
$simple_size_color = intval(200-$file['size']/(1024*1024)*2); // the bigger the file, the darker the shade of grey; megabytes*2
@@ -5,9 +14,9 @@
$relative_modified_date = OCP\relative_modified_date($file['mtime']);
$relative_date_color = round((time()-$file['mtime'])/60/60/24*14); // the older the file, the brighter the shade of grey; days*14
if($relative_date_color>200) $relative_date_color = 200;
- $name = str_replace('+','%20',urlencode($file['name']));
+ $name = str_replace('+','%20', urlencode($file['name']));
$name = str_replace('%2F','/', $name);
- $directory = str_replace('+','%20',urlencode($file['directory']));
+ $directory = str_replace('+','%20', urlencode($file['directory']));
$directory = str_replace('%2F','/', $directory); ?>
<tr data-id="<?php echo $file['id']; ?>" data-file="<?php echo $name;?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mimetype']?>" data-size='<?php echo $file['size'];?>' data-permissions='<?php echo $file['permissions']; ?>'>
<td class="filename svg" style="background-image:url(<?php if($file['type'] == 'dir') echo OCP\mimetype_icon('dir'); else echo OCP\mimetype_icon($file['mimetype']); ?>)">
diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml
index 419bdb1b120..48a28fde78a 100644
--- a/apps/files_encryption/appinfo/info.xml
+++ b/apps/files_encryption/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>Server side encryption of files. DEPRECATED. This app is no longer supported and will be replaced with an improved version in ownCloud 5. Only enable this features if you want to read old encrypted data. Warning: You will lose your data if you enable this App and forget your password. Encryption is not yet compatible with LDAP.</description>
<licence>AGPL</licence>
<author>Robin Appelman</author>
- <require>4</require>
+ <require>4.9</require>
<shipped>true</shipped>
<types>
<filesystem/>
diff --git a/apps/files_encryption/l10n/de_DE.php b/apps/files_encryption/l10n/de_DE.php
new file mode 100644
index 00000000000..d486a82322b
--- /dev/null
+++ b/apps/files_encryption/l10n/de_DE.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Verschlüsselung",
+"Exclude the following file types from encryption" => "Die folgenden Dateitypen von der Verschlüsselung ausnehmen",
+"None" => "Keine",
+"Enable Encryption" => "Verschlüsselung aktivieren"
+);
diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php
new file mode 100644
index 00000000000..a15c37e730e
--- /dev/null
+++ b/apps/files_encryption/l10n/es_AR.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Encriptación",
+"Exclude the following file types from encryption" => "Exceptuar de la encriptación los siguientes tipos de archivo",
+"None" => "Ninguno",
+"Enable Encryption" => "Habilitar encriptación"
+);
diff --git a/apps/files_encryption/l10n/gl.php b/apps/files_encryption/l10n/gl.php
new file mode 100644
index 00000000000..1434ff48aac
--- /dev/null
+++ b/apps/files_encryption/l10n/gl.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Encriptado",
+"Exclude the following file types from encryption" => "Excluír os seguintes tipos de ficheiro da encriptación",
+"None" => "Nada",
+"Enable Encryption" => "Habilitar encriptación"
+);
diff --git a/apps/files_encryption/l10n/id.php b/apps/files_encryption/l10n/id.php
new file mode 100644
index 00000000000..824ae883041
--- /dev/null
+++ b/apps/files_encryption/l10n/id.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "enkripsi",
+"Exclude the following file types from encryption" => "pengecualian untuk tipe file berikut dari enkripsi",
+"None" => "tidak ada",
+"Enable Encryption" => "aktifkan enkripsi"
+);
diff --git a/apps/files_encryption/l10n/ku_IQ.php b/apps/files_encryption/l10n/ku_IQ.php
new file mode 100644
index 00000000000..bd8977ac515
--- /dev/null
+++ b/apps/files_encryption/l10n/ku_IQ.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "نهێنیکردن",
+"Exclude the following file types from encryption" => "به‌ربه‌ست کردنی ئه‌م جۆره‌ په‌ڕگانه له‌ نهێنیکردن",
+"None" => "هیچ",
+"Enable Encryption" => "چالاکردنی نهێنیکردن"
+);
diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php
new file mode 100644
index 00000000000..5c02f52217f
--- /dev/null
+++ b/apps/files_encryption/l10n/pt_BR.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Criptografia",
+"Exclude the following file types from encryption" => "Excluir os seguintes tipos de arquivo da criptografia",
+"None" => "Nenhuma",
+"Enable Encryption" => "Habilitar Criptografia"
+);
diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php
new file mode 100644
index 00000000000..570462b414f
--- /dev/null
+++ b/apps/files_encryption/l10n/pt_PT.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Encriptação",
+"Exclude the following file types from encryption" => "Excluir da encriptação os seguintes tipo de ficheiros",
+"None" => "Nenhum",
+"Enable Encryption" => "Activar Encriptação"
+);
diff --git a/apps/files_encryption/l10n/ro.php b/apps/files_encryption/l10n/ro.php
new file mode 100644
index 00000000000..97f3f262d76
--- /dev/null
+++ b/apps/files_encryption/l10n/ro.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Încriptare",
+"Exclude the following file types from encryption" => "Exclude următoarele tipuri de fișiere de la încriptare",
+"None" => "Niciuna",
+"Enable Encryption" => "Activare încriptare"
+);
diff --git a/apps/files_encryption/l10n/ru_RU.php b/apps/files_encryption/l10n/ru_RU.php
new file mode 100644
index 00000000000..1328b0d0359
--- /dev/null
+++ b/apps/files_encryption/l10n/ru_RU.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Шифрование",
+"Exclude the following file types from encryption" => "Исключите следующие типы файлов из шифрования",
+"None" => "Ни один",
+"Enable Encryption" => "Включить шифрование"
+);
diff --git a/apps/files_encryption/l10n/si_LK.php b/apps/files_encryption/l10n/si_LK.php
new file mode 100644
index 00000000000..a29884afffd
--- /dev/null
+++ b/apps/files_encryption/l10n/si_LK.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "ගුප්ත කේතනය",
+"Exclude the following file types from encryption" => "මෙම ගොනු වර්ග ගුප්ත කේතනය කිරීමෙන් බැහැරව තබන්න",
+"None" => "කිසිවක් නැත",
+"Enable Encryption" => "ගුප්ත කේතනය සක්‍රිය කරන්න"
+);
diff --git a/apps/files_encryption/l10n/sl.php b/apps/files_encryption/l10n/sl.php
index 65807910e10..f62fe781c6a 100644
--- a/apps/files_encryption/l10n/sl.php
+++ b/apps/files_encryption/l10n/sl.php
@@ -1,6 +1,6 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Šifriranje",
-"Exclude the following file types from encryption" => "Naslednje vrste datotek naj se ne šifrirajo",
+"Exclude the following file types from encryption" => "Navedene vrste datotek naj ne bodo šifrirane",
"None" => "Brez",
"Enable Encryption" => "Omogoči šifriranje"
);
diff --git a/apps/files_encryption/l10n/uk.php b/apps/files_encryption/l10n/uk.php
new file mode 100644
index 00000000000..3c15bb28436
--- /dev/null
+++ b/apps/files_encryption/l10n/uk.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Шифрування",
+"Exclude the following file types from encryption" => "Не шифрувати файли наступних типів",
+"None" => "Жоден",
+"Enable Encryption" => "Включити шифрування"
+);
diff --git a/apps/files_encryption/l10n/zh_CN.GB2312.php b/apps/files_encryption/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..297444fcf55
--- /dev/null
+++ b/apps/files_encryption/l10n/zh_CN.GB2312.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "加密",
+"Exclude the following file types from encryption" => "从加密中排除如下文件类型",
+"None" => "无",
+"Enable Encryption" => "启用加密"
+);
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index 38d8edf28c3..d057c1ed194 100644
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -151,7 +151,7 @@ class OC_Crypt {
*/
public static function encryptFile( $source, $target, $key='') {
$handleread = fopen($source, "rb");
- if($handleread!=FALSE) {
+ if($handleread!=false) {
$handlewrite = fopen($target, "wb");
while (!feof($handleread)) {
$content = fread($handleread, 8192);
@@ -174,7 +174,7 @@ class OC_Crypt {
*/
public static function decryptFile( $source, $target, $key='') {
$handleread = fopen($source, "rb");
- if($handleread!=FALSE) {
+ if($handleread!=false) {
$handlewrite = fopen($target, "wb");
while (!feof($handleread)) {
$content = fread($handleread, 8192);
diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php
index 721a1b955df..95b58b8cce7 100644
--- a/apps/files_encryption/lib/cryptstream.php
+++ b/apps/files_encryption/lib/cryptstream.php
@@ -167,7 +167,7 @@ class OC_CryptStream{
public function stream_close() {
$this->flush();
if($this->meta['mode']!='r' and $this->meta['mode']!='rb') {
- OC_FileCache::put($this->path,array('encrypted'=>true,'size'=>$this->size),'');
+ OC_FileCache::put($this->path, array('encrypted'=>true,'size'=>$this->size),'');
}
return fclose($this->source);
}
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index f61cd1e3773..61b87ab5463 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -42,13 +42,13 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
return false;
}
if(is_null(self::$blackList)) {
- self::$blackList=explode(',',OCP\Config::getAppValue('files_encryption','type_blacklist','jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg'));
+ self::$blackList=explode(',', OCP\Config::getAppValue('files_encryption', 'type_blacklist', 'jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg'));
}
if(self::isEncrypted($path)) {
return true;
}
- $extension=substr($path,strrpos($path,'.')+1);
- if(array_search($extension,self::$blackList)===false) {
+ $extension=substr($path, strrpos($path, '.')+1);
+ if(array_search($extension, self::$blackList)===false) {
return true;
}
}
@@ -68,7 +68,7 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
if (!is_resource($data)) {//stream put contents should have been converter to fopen
$size=strlen($data);
$data=OC_Crypt::blockEncrypt($data);
- OC_FileCache::put($path,array('encrypted'=>true,'size'=>$size),'');
+ OC_FileCache::put($path, array('encrypted'=>true,'size'=>$size),'');
}
}
}
diff --git a/apps/files_encryption/settings.php b/apps/files_encryption/settings.php
index 0a0d4d1abba..168124a8d22 100644
--- a/apps/files_encryption/settings.php
+++ b/apps/files_encryption/settings.php
@@ -7,7 +7,7 @@
*/
$tmpl = new OCP\Template( 'files_encryption', 'settings');
-$blackList=explode(',',OCP\Config::getAppValue('files_encryption','type_blacklist','jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg'));
+$blackList=explode(',', OCP\Config::getAppValue('files_encryption', 'type_blacklist', 'jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg'));
$enabled=(OCP\Config::getAppValue('files_encryption','enable_encryption','true')=='true');
$tmpl->assign('blacklist',$blackList);
$tmpl->assign('encryption_enabled',$enabled);
diff --git a/apps/files_encryption/tests/encryption.php b/apps/files_encryption/tests/encryption.php
index 89397f6ef2c..a7bc2df0e12 100644
--- a/apps/files_encryption/tests/encryption.php
+++ b/apps/files_encryption/tests/encryption.php
@@ -19,7 +19,7 @@ class Test_Encryption extends UnitTestCase {
$chunk=substr($source,0,8192);
$encrypted=OC_Crypt::encrypt($chunk,$key);
- $this->assertEqual(strlen($chunk),strlen($encrypted));
+ $this->assertEqual(strlen($chunk), strlen($encrypted));
$decrypted=OC_Crypt::decrypt($encrypted,$key);
$decrypted=rtrim($decrypted, "\0");
$this->assertEqual($decrypted,$chunk);
@@ -66,7 +66,7 @@ class Test_Encryption extends UnitTestCase {
$this->assertEqual($decrypted,$source);
$encrypted=OC_Crypt::blockEncrypt($source,$key);
- $decrypted=OC_Crypt::blockDecrypt($encrypted,$key,strlen($source));
+ $decrypted=OC_Crypt::blockDecrypt($encrypted,$key, strlen($source));
$this->assertEqual($decrypted,$source);
}
}
diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php
index 042011a6c87..c3c8f4a2db0 100644
--- a/apps/files_encryption/tests/proxy.php
+++ b/apps/files_encryption/tests/proxy.php
@@ -30,7 +30,7 @@ class Test_CryptProxy extends UnitTestCase {
//set up temporary storage
OC_Filesystem::clearMounts();
- OC_Filesystem::mount('OC_Filestorage_Temporary',array(),'/');
+ OC_Filesystem::mount('OC_Filestorage_Temporary', array(),'/');
OC_Filesystem::init('/'.$user.'/files');
@@ -59,7 +59,7 @@ class Test_CryptProxy extends UnitTestCase {
$fromFile=OC_Filesystem::file_get_contents('/file');
$this->assertNotEqual($original,$stored);
- $this->assertEqual(strlen($original),strlen($fromFile));
+ $this->assertEqual(strlen($original), strlen($fromFile));
$this->assertEqual($original,$fromFile);
}
@@ -98,7 +98,7 @@ class Test_CryptProxy extends UnitTestCase {
$fromFile=OC_Filesystem::file_get_contents('/file');
$this->assertNotEqual($original,$stored);
- $this->assertEqual(strlen($original),strlen($fromFile));
+ $this->assertEqual(strlen($original), strlen($fromFile));
$this->assertEqual($original,$fromFile);
$file=__DIR__.'/zeros';
@@ -112,6 +112,6 @@ class Test_CryptProxy extends UnitTestCase {
$fromFile=OC_Filesystem::file_get_contents('/file');
$this->assertNotEqual($original,$stored);
- $this->assertEqual(strlen($original),strlen($fromFile));
+ $this->assertEqual(strlen($original), strlen($fromFile));
}
}
diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php
index 39b13620782..5ea0da48017 100644
--- a/apps/files_encryption/tests/stream.php
+++ b/apps/files_encryption/tests/stream.php
@@ -10,11 +10,11 @@ class Test_CryptStream extends UnitTestCase {
private $tmpFiles=array();
function testStream() {
- $stream=$this->getStream('test1','w',strlen('foobar'));
+ $stream=$this->getStream('test1','w', strlen('foobar'));
fwrite($stream,'foobar');
fclose($stream);
- $stream=$this->getStream('test1','r',strlen('foobar'));
+ $stream=$this->getStream('test1','r', strlen('foobar'));
$data=fread($stream,6);
fclose($stream);
$this->assertEqual('foobar',$data);
@@ -26,10 +26,10 @@ class Test_CryptStream extends UnitTestCase {
fclose($target);
fclose($source);
- $stream=$this->getStream('test2','r',filesize($file));
+ $stream=$this->getStream('test2','r', filesize($file));
$data=stream_get_contents($stream);
$original=file_get_contents($file);
- $this->assertEqual(strlen($original),strlen($data));
+ $this->assertEqual(strlen($original), strlen($data));
$this->assertEqual($original,$data);
}
@@ -59,27 +59,27 @@ class Test_CryptStream extends UnitTestCase {
$file=__DIR__.'/binary';
$source=file_get_contents($file);
- $stream=$this->getStream('test','w',strlen($source));
+ $stream=$this->getStream('test','w', strlen($source));
fwrite($stream,$source);
fclose($stream);
- $stream=$this->getStream('test','r',strlen($source));
+ $stream=$this->getStream('test','r', strlen($source));
$data=stream_get_contents($stream);
fclose($stream);
- $this->assertEqual(strlen($data),strlen($source));
+ $this->assertEqual(strlen($data), strlen($source));
$this->assertEqual($source,$data);
$file=__DIR__.'/zeros';
$source=file_get_contents($file);
- $stream=$this->getStream('test2','w',strlen($source));
+ $stream=$this->getStream('test2','w', strlen($source));
fwrite($stream,$source);
fclose($stream);
- $stream=$this->getStream('test2','r',strlen($source));
+ $stream=$this->getStream('test2','r', strlen($source));
$data=stream_get_contents($stream);
fclose($stream);
- $this->assertEqual(strlen($data),strlen($source));
+ $this->assertEqual(strlen($data), strlen($source));
$this->assertEqual($source,$data);
}
}
diff --git a/apps/files_external/ajax/addRootCertificate.php b/apps/files_external/ajax/addRootCertificate.php
index a8719fc7a3d..72eb30009d1 100644
--- a/apps/files_external/ajax/addRootCertificate.php
+++ b/apps/files_external/ajax/addRootCertificate.php
@@ -2,26 +2,35 @@
OCP\JSON::checkAppEnabled('files_external');
-$view = \OCP\Files::getStorage("files_external");
-$from = $_FILES['rootcert_import']['tmp_name'];
-$path = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/';
-if(!file_exists($path)) mkdir($path,0700,true);
-$to = $path.$_FILES['rootcert_import']['name'];
-move_uploaded_file($from, $to);
-
-//check if it is a PEM certificate, otherwise convert it if possible
-$fh = fopen($to, 'r');
-$data = fread($fh, filesize($to));
+if ( !($filename = $_FILES['rootcert_import']['name']) ) {
+ header("Location: settings/personal.php");
+ exit;
+}
+
+$fh = fopen($_FILES['rootcert_import']['tmp_name'], 'r');
+$data = fread($fh, filesize($_FILES['rootcert_import']['tmp_name']));
fclose($fh);
-if (!strpos($data, 'BEGIN CERTIFICATE')) {
- $pem = chunk_split(base64_encode($data), 64, "\n");
- $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
- $fh = fopen($to, 'w');
- fwrite($fh, $pem);
- fclose($fh);
+$filename = $_FILES['rootcert_import']['name'];
+
+$view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_external/uploads');
+if (!$view->file_exists('')) $view->mkdir('');
+
+$isValid = openssl_pkey_get_public($data);
+
+//maybe it was just the wrong file format, try to convert it...
+if ($isValid == false) {
+ $data = chunk_split(base64_encode($data), 64, "\n");
+ $data = "-----BEGIN CERTIFICATE-----\n".$data."-----END CERTIFICATE-----\n";
+ $isValid = openssl_pkey_get_public($data);
}
-OC_Mount_Config::createCertificateBundle();
+// add the certificate if it could be verified
+if ( $isValid ) {
+ $view->file_put_contents($filename, $data);
+ OC_Mount_Config::createCertificateBundle();
+} else {
+ OCP\Util::writeLog("files_external", "Couldn't import SSL root certificate ($filename), allowed formats: PEM and DER", OCP\Util::WARN);
+}
header("Location: settings/personal.php");
exit;
diff --git a/apps/files_external/ajax/removeRootCertificate.php b/apps/files_external/ajax/removeRootCertificate.php
index 9b78e180d9e..664b3937e97 100644
--- a/apps/files_external/ajax/removeRootCertificate.php
+++ b/apps/files_external/ajax/removeRootCertificate.php
@@ -5,7 +5,9 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
$view = \OCP\Files::getStorage("files_external");
-$cert = $_POST['cert'];
-$file = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/'.$cert;
-unlink($file);
-OC_Mount_Config::createCertificateBundle();
+$file = 'uploads/'.ltrim($_POST['cert'], "/\\.");
+
+if ( $view->file_exists($file) ) {
+ $view->unlink($file);
+ OC_Mount_Config::createCertificateBundle();
+}
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index e0301365d16..3da1913c5fc 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>Mount external storage sources</description>
<licence>AGPL</licence>
<author>Robin Appelman, Michael Gapczynski</author>
- <require>4</require>
+ <require>4.9</require>
<shipped>true</shipped>
<types>
<filesystem/>
diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js
index 6082fdd2cb7..c1e38640708 100644
--- a/apps/files_external/js/dropbox.js
+++ b/apps/files_external/js/dropbox.js
@@ -4,7 +4,7 @@ $(document).ready(function() {
var configured = $(this).find('[data-parameter="configured"]');
if ($(configured).val() == 'true') {
$(this).find('.configuration input').attr('disabled', 'disabled');
- $(this).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ $(this).find('.configuration').append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>');
} else {
var app_key = $(this).find('.configuration [data-parameter="app_key"]').val();
var app_secret = $(this).find('.configuration [data-parameter="app_secret"]').val();
@@ -22,14 +22,16 @@ $(document).ready(function() {
$(configured).val('true');
OC.MountConfig.saveStorage(tr);
$(tr).find('.configuration input').attr('disabled', 'disabled');
- $(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ $(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>');
} else {
- OC.dialogs.alert(result.data.message, 'Error configuring Dropbox storage');
+ OC.dialogs.alert(result.data.message,
+ t('files_external', 'Error configuring Dropbox storage')
+ );
}
});
}
} else if ($(this).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '' && $(this).find('.dropbox').length == 0) {
- $(this).find('.configuration').append('<a class="button dropbox">Grant access</a>');
+ $(this).find('.configuration').append('<a class="button dropbox">'+t('files_external', 'Grant access')+'</a>');
}
}
});
@@ -40,7 +42,7 @@ $(document).ready(function() {
var config = $(tr).find('.configuration');
if ($(tr).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '') {
if ($(tr).find('.dropbox').length == 0) {
- $(config).append('<a class="button dropbox">Grant access</a>');
+ $(config).append('<a class="button dropbox">'+t('files_external', 'Grant access')+'</a>');
} else {
$(tr).find('.dropbox').show();
}
@@ -67,14 +69,22 @@ $(document).ready(function() {
if (OC.MountConfig.saveStorage(tr)) {
window.location = result.data.url;
} else {
- OC.dialogs.alert('Fill out all required fields', 'Error configuring Dropbox storage');
+ OC.dialogs.alert(
+ t('files_external', 'Fill out all required fields'),
+ t('files_external', 'Error configuring Dropbox storage')
+ );
}
} else {
- OC.dialogs.alert(result.data.message, 'Error configuring Dropbox storage');
+ OC.dialogs.alert(result.data.message,
+ t('files_external', 'Error configuring Dropbox storage')
+ );
}
});
} else {
- OC.dialogs.alert('Please provide a valid Dropbox app key and secret.', 'Error configuring Dropbox storage');
+ OC.dialogs.alert(
+ t('files_external', 'Please provide a valid Dropbox app key and secret.'),
+ t('files_external', 'Error configuring Dropbox storage')
+ );
}
});
diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js
index 7c62297df4d..0b3c314eb5d 100644
--- a/apps/files_external/js/google.js
+++ b/apps/files_external/js/google.js
@@ -3,7 +3,8 @@ $(document).ready(function() {
$('#externalStorage tbody tr.OC_Filestorage_Google').each(function() {
var configured = $(this).find('[data-parameter="configured"]');
if ($(configured).val() == 'true') {
- $(this).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ $(this).find('.configuration')
+ .append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>');
} else {
var token = $(this).find('[data-parameter="token"]');
var token_secret = $(this).find('[data-parameter="token_secret"]');
@@ -19,13 +20,15 @@ $(document).ready(function() {
$(token_secret).val(result.access_token_secret);
$(configured).val('true');
OC.MountConfig.saveStorage(tr);
- $(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ $(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>');
} else {
- OC.dialogs.alert(result.data.message, 'Error configuring Google Drive storage');
+ OC.dialogs.alert(result.data.message,
+ t('files_external', 'Error configuring Google Drive storage')
+ );
}
});
} else if ($(this).find('.google').length == 0) {
- $(this).find('.configuration').append('<a class="button google">Grant access</a>');
+ $(this).find('.configuration').append('<a class="button google">'+t('files_external', 'Grant access')+'</a>');
}
}
});
@@ -34,7 +37,7 @@ $(document).ready(function() {
if ($(this).hasClass('OC_Filestorage_Google') && $(this).find('[data-parameter="configured"]').val() != 'true') {
if ($(this).find('.mountPoint input').val() != '') {
if ($(this).find('.google').length == 0) {
- $(this).find('.configuration').append('<a class="button google">Grant access</a>');
+ $(this).find('.configuration').append('<a class="button google">'+t('files_external', 'Grant access')+'</a>');
}
}
}
@@ -65,10 +68,15 @@ $(document).ready(function() {
if (OC.MountConfig.saveStorage(tr)) {
window.location = result.data.url;
} else {
- OC.dialogs.alert('Fill out all required fields', 'Error configuring Google Drive storage');
+ OC.dialogs.alert(
+ t('files_external', 'Fill out all required fields'),
+ t('files_external', 'Error configuring Google Drive storage')
+ );
}
} else {
- OC.dialogs.alert(result.data.message, 'Error configuring Google Drive storage');
+ OC.dialogs.alert(result.data.message,
+ t('files_external', 'Error configuring Google Drive storage')
+ );
}
});
});
diff --git a/apps/files_external/l10n/ca.php b/apps/files_external/l10n/ca.php
index aa93379c358..fc6706381b7 100644
--- a/apps/files_external/l10n/ca.php
+++ b/apps/files_external/l10n/ca.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "S'ha concedit l'accés",
+"Error configuring Dropbox storage" => "Error en configurar l'emmagatzemament Dropbox",
+"Grant access" => "Concedeix accés",
+"Fill out all required fields" => "Ompliu els camps requerits",
+"Please provide a valid Dropbox app key and secret." => "Proporcioneu una clau d'aplicació i secret vàlids per a Dropbox",
+"Error configuring Google Drive storage" => "Error en configurar l'emmagatzemament Google Drive",
"External Storage" => "Emmagatzemament extern",
"Mount point" => "Punt de muntatge",
"Backend" => "Dorsal",
@@ -11,8 +17,8 @@
"Groups" => "Grups",
"Users" => "Usuaris",
"Delete" => "Elimina",
-"SSL root certificates" => "Certificats SSL root",
-"Import Root Certificate" => "Importa certificat root",
"Enable User External Storage" => "Habilita l'emmagatzemament extern d'usuari",
-"Allow users to mount their own external storage" => "Permet als usuaris muntar el seu emmagatzemament extern propi"
+"Allow users to mount their own external storage" => "Permet als usuaris muntar el seu emmagatzemament extern propi",
+"SSL root certificates" => "Certificats SSL root",
+"Import Root Certificate" => "Importa certificat root"
);
diff --git a/apps/files_external/l10n/cs_CZ.php b/apps/files_external/l10n/cs_CZ.php
index 75899603349..51951c19bfd 100644
--- a/apps/files_external/l10n/cs_CZ.php
+++ b/apps/files_external/l10n/cs_CZ.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Přístup povolen",
+"Error configuring Dropbox storage" => "Chyba při nastavení úložiště Dropbox",
+"Grant access" => "Povolit přístup",
+"Fill out all required fields" => "Vyplňte všechna povinná pole",
+"Please provide a valid Dropbox app key and secret." => "Zadejte, prosím, platný klíč a bezpečnostní frázi aplikace Dropbox.",
+"Error configuring Google Drive storage" => "Chyba při nastavení úložiště Google Drive",
"External Storage" => "Externí úložiště",
"Mount point" => "Přípojný bod",
"Backend" => "Podpůrná vrstva",
@@ -11,8 +17,8 @@
"Groups" => "Skupiny",
"Users" => "Uživatelé",
"Delete" => "Smazat",
-"SSL root certificates" => "Kořenové certifikáty SSL",
-"Import Root Certificate" => "Importovat kořenového certifikátu",
"Enable User External Storage" => "Zapnout externí uživatelské úložiště",
-"Allow users to mount their own external storage" => "Povolit uživatelům připojení jejich vlastních externích úložišť"
+"Allow users to mount their own external storage" => "Povolit uživatelům připojení jejich vlastních externích úložišť",
+"SSL root certificates" => "Kořenové certifikáty SSL",
+"Import Root Certificate" => "Importovat kořenového certifikátu"
);
diff --git a/apps/files_external/l10n/da.php b/apps/files_external/l10n/da.php
new file mode 100644
index 00000000000..00a81f3da16
--- /dev/null
+++ b/apps/files_external/l10n/da.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "Adgang godkendt",
+"Error configuring Dropbox storage" => "Fejl ved konfiguration af Dropbox plads",
+"Grant access" => "Godkend adgang",
+"Fill out all required fields" => "Udfyld alle nødvendige felter",
+"Please provide a valid Dropbox app key and secret." => "Angiv venligst en valid Dropbox app nøgle og hemmelighed",
+"Error configuring Google Drive storage" => "Fejl ved konfiguration af Google Drive plads",
+"External Storage" => "Ekstern opbevaring",
+"Mount point" => "Monteringspunkt",
+"Backend" => "Backend",
+"Configuration" => "Opsætning",
+"Options" => "Valgmuligheder",
+"Applicable" => "Kan anvendes",
+"Add mount point" => "Tilføj monteringspunkt",
+"None set" => "Ingen sat",
+"All Users" => "Alle brugere",
+"Groups" => "Grupper",
+"Users" => "Brugere",
+"Delete" => "Slet",
+"Enable User External Storage" => "Aktiver ekstern opbevaring for brugere",
+"Allow users to mount their own external storage" => "Tillad brugere at montere deres egne eksterne opbevaring",
+"SSL root certificates" => "SSL-rodcertifikater",
+"Import Root Certificate" => "Importer rodcertifikat"
+);
diff --git a/apps/files_external/l10n/de.php b/apps/files_external/l10n/de.php
index 4306ad33dc3..5d57e5e4598 100644
--- a/apps/files_external/l10n/de.php
+++ b/apps/files_external/l10n/de.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Zugriff gestattet",
+"Error configuring Dropbox storage" => "Fehler beim Einrichten von Dropbox",
+"Grant access" => "Zugriff gestatten",
+"Fill out all required fields" => "Bitte alle notwendigen Felder füllen",
+"Please provide a valid Dropbox app key and secret." => "Bitte trage einen gültigen Dropbox-App-Key mit Secret ein.",
+"Error configuring Google Drive storage" => "Fehler beim Einrichten von Google Drive",
"External Storage" => "Externer Speicher",
"Mount point" => "Mount-Point",
"Backend" => "Backend",
@@ -11,8 +17,8 @@
"Groups" => "Gruppen",
"Users" => "Benutzer",
"Delete" => "Löschen",
-"SSL root certificates" => "SSL-Root-Zertifikate",
-"Import Root Certificate" => "Root-Zertifikate importieren",
"Enable User External Storage" => "Externen Speicher für Benutzer aktivieren",
-"Allow users to mount their own external storage" => "Erlaubt Benutzern ihre eigenen externen Speicher einzubinden"
+"Allow users to mount their own external storage" => "Erlaubt Benutzern ihre eigenen externen Speicher einzubinden",
+"SSL root certificates" => "SSL-Root-Zertifikate",
+"Import Root Certificate" => "Root-Zertifikate importieren"
);
diff --git a/apps/files_external/l10n/de_DE.php b/apps/files_external/l10n/de_DE.php
new file mode 100644
index 00000000000..357968bd462
--- /dev/null
+++ b/apps/files_external/l10n/de_DE.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "Zugriff gestattet",
+"Error configuring Dropbox storage" => "Fehler beim Einrichten von Dropbox",
+"Grant access" => "Zugriff gestatten",
+"Fill out all required fields" => "Bitte alle notwendigen Felder füllen",
+"Please provide a valid Dropbox app key and secret." => "Bitte tragen Sie einen gültigen Dropbox-App-Key mit Secret ein.",
+"Error configuring Google Drive storage" => "Fehler beim Einrichten von Google Drive",
+"External Storage" => "Externer Speicher",
+"Mount point" => "Mount-Point",
+"Backend" => "Backend",
+"Configuration" => "Konfiguration",
+"Options" => "Optionen",
+"Applicable" => "Zutreffend",
+"Add mount point" => "Mount-Point hinzufügen",
+"None set" => "Nicht definiert",
+"All Users" => "Alle Benutzer",
+"Groups" => "Gruppen",
+"Users" => "Benutzer",
+"Delete" => "Löschen",
+"Enable User External Storage" => "Externen Speicher für Benutzer aktivieren",
+"Allow users to mount their own external storage" => "Erlaubt Benutzern ihre eigenen externen Speicher einzubinden",
+"SSL root certificates" => "SSL-Root-Zertifikate",
+"Import Root Certificate" => "Root-Zertifikate importieren"
+);
diff --git a/apps/files_external/l10n/el.php b/apps/files_external/l10n/el.php
index 7dcf13b3972..a1dae9d4888 100644
--- a/apps/files_external/l10n/el.php
+++ b/apps/files_external/l10n/el.php
@@ -1,10 +1,24 @@
<?php $TRANSLATIONS = array(
-"External Storage" => "Εξωτερική αποθήκευση",
+"Access granted" => "Προσβαση παρασχέθηκε",
+"Error configuring Dropbox storage" => "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox ",
+"Grant access" => "Παροχή πρόσβασης",
+"Fill out all required fields" => "Συμπληρώστε όλα τα απαιτούμενα πεδία",
+"Please provide a valid Dropbox app key and secret." => "Παρακαλούμε δώστε έγκυρο κλειδί Dropbox και μυστικό.",
+"Error configuring Google Drive storage" => "Σφάλμα ρυθμίζωντας αποθήκευση Google Drive ",
+"External Storage" => "Εξωτερικό Αποθηκευτικό Μέσο",
"Mount point" => "Σημείο προσάρτησης",
+"Backend" => "Σύστημα υποστήριξης",
"Configuration" => "Ρυθμίσεις",
"Options" => "Επιλογές",
-"All Users" => "Όλοι οι χρήστες",
+"Applicable" => "Εφαρμόσιμο",
+"Add mount point" => "Προσθήκη σημείου προσάρτησης",
+"None set" => "Κανένα επιλεγμένο",
+"All Users" => "Όλοι οι Χρήστες",
"Groups" => "Ομάδες",
"Users" => "Χρήστες",
-"Delete" => "Διαγραφή"
+"Delete" => "Διαγραφή",
+"Enable User External Storage" => "Ενεργοποίηση Εξωτερικού Αποθηκευτικού Χώρου Χρήστη",
+"Allow users to mount their own external storage" => "Να επιτρέπεται στους χρήστες να προσαρτούν δικό τους εξωτερικό αποθηκευτικό χώρο",
+"SSL root certificates" => "Πιστοποιητικά SSL root",
+"Import Root Certificate" => "Εισαγωγή Πιστοποιητικού Root"
);
diff --git a/apps/files_external/l10n/eo.php b/apps/files_external/l10n/eo.php
index 3cb8255c522..97453aafedb 100644
--- a/apps/files_external/l10n/eo.php
+++ b/apps/files_external/l10n/eo.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Alirpermeso donita",
+"Error configuring Dropbox storage" => "Eraro dum agordado de la memorservo Dropbox",
+"Grant access" => "Doni alirpermeson",
+"Fill out all required fields" => "Plenigu ĉiujn neprajn kampojn",
+"Please provide a valid Dropbox app key and secret." => "Bonvolu provizi ŝlosilon de la aplikaĵo Dropbox validan kaj sekretan.",
+"Error configuring Google Drive storage" => "Eraro dum agordado de la memorservo Google Drive",
"External Storage" => "Malena memorilo",
"Mount point" => "Surmetingo",
"Backend" => "Motoro",
@@ -11,8 +17,8 @@
"Groups" => "Grupoj",
"Users" => "Uzantoj",
"Delete" => "Forigi",
-"SSL root certificates" => "Radikaj SSL-atestoj",
-"Import Root Certificate" => "Enporti radikan ateston",
"Enable User External Storage" => "Kapabligi malenan memorilon de uzanto",
-"Allow users to mount their own external storage" => "Permesi al uzantoj surmeti siajn proprajn malenajn memorilojn"
+"Allow users to mount their own external storage" => "Permesi al uzantoj surmeti siajn proprajn malenajn memorilojn",
+"SSL root certificates" => "Radikaj SSL-atestoj",
+"Import Root Certificate" => "Enporti radikan ateston"
);
diff --git a/apps/files_external/l10n/es.php b/apps/files_external/l10n/es.php
index 004c352c199..32a0d896874 100644
--- a/apps/files_external/l10n/es.php
+++ b/apps/files_external/l10n/es.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Acceso garantizado",
+"Error configuring Dropbox storage" => "Error configurando el almacenamiento de Dropbox",
+"Grant access" => "Garantizar acceso",
+"Fill out all required fields" => "Rellenar todos los campos requeridos",
+"Please provide a valid Dropbox app key and secret." => "Por favor , proporcione un secreto y una contraseña válida de la app Dropbox.",
+"Error configuring Google Drive storage" => "Error configurando el almacenamiento de Google Drive",
"External Storage" => "Almacenamiento externo",
"Mount point" => "Punto de montaje",
"Backend" => "Motor",
@@ -11,8 +17,8 @@
"Groups" => "Grupos",
"Users" => "Usuarios",
"Delete" => "Eliiminar",
-"SSL root certificates" => "Raíz de certificados SSL ",
-"Import Root Certificate" => "Importar certificado raíz",
"Enable User External Storage" => "Habilitar almacenamiento de usuario externo",
-"Allow users to mount their own external storage" => "Permitir a los usuarios montar su propio almacenamiento externo"
+"Allow users to mount their own external storage" => "Permitir a los usuarios montar su propio almacenamiento externo",
+"SSL root certificates" => "Raíz de certificados SSL ",
+"Import Root Certificate" => "Importar certificado raíz"
);
diff --git a/apps/files_external/l10n/es_AR.php b/apps/files_external/l10n/es_AR.php
new file mode 100644
index 00000000000..055fbe782e7
--- /dev/null
+++ b/apps/files_external/l10n/es_AR.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "Acceso permitido",
+"Error configuring Dropbox storage" => "Error al configurar el almacenamiento de Dropbox",
+"Grant access" => "Permitir acceso",
+"Fill out all required fields" => "Rellenar todos los campos requeridos",
+"Please provide a valid Dropbox app key and secret." => "Por favor, proporcioná un secreto y una contraseña válida para la aplicación Dropbox.",
+"Error configuring Google Drive storage" => "Error al configurar el almacenamiento de Google Drive",
+"External Storage" => "Almacenamiento externo",
+"Mount point" => "Punto de montaje",
+"Backend" => "Motor",
+"Configuration" => "Configuración",
+"Options" => "Opciones",
+"Applicable" => "Aplicable",
+"Add mount point" => "Añadir punto de montaje",
+"None set" => "No fue configurado",
+"All Users" => "Todos los usuarios",
+"Groups" => "Grupos",
+"Users" => "Usuarios",
+"Delete" => "Borrar",
+"Enable User External Storage" => "Habilitar almacenamiento de usuario externo",
+"Allow users to mount their own external storage" => "Permitir a los usuarios montar su propio almacenamiento externo",
+"SSL root certificates" => "certificados SSL raíz",
+"Import Root Certificate" => "Importar certificado raíz"
+);
diff --git a/apps/files_external/l10n/et_EE.php b/apps/files_external/l10n/et_EE.php
index f47ebc936b5..86922bc751b 100644
--- a/apps/files_external/l10n/et_EE.php
+++ b/apps/files_external/l10n/et_EE.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Ligipääs on antud",
+"Error configuring Dropbox storage" => "Viga Dropboxi salvestusruumi seadistamisel",
+"Grant access" => "Anna ligipääs",
+"Fill out all required fields" => "Täida kõik kohustuslikud lahtrid",
+"Please provide a valid Dropbox app key and secret." => "Palun sisesta korrektne Dropboxi rakenduse võti ja salasõna.",
+"Error configuring Google Drive storage" => "Viga Google Drive'i salvestusruumi seadistamisel",
"External Storage" => "Väline salvestuskoht",
"Mount point" => "Ühenduspunkt",
"Backend" => "Admin",
@@ -11,8 +17,8 @@
"Groups" => "Grupid",
"Users" => "Kasutajad",
"Delete" => "Kustuta",
-"SSL root certificates" => "SSL root sertifikaadid",
-"Import Root Certificate" => "Impordi root sertifikaadid",
"Enable User External Storage" => "Luba kasutajatele väline salvestamine",
-"Allow users to mount their own external storage" => "Luba kasutajatel ühendada külge nende enda välised salvestusseadmed"
+"Allow users to mount their own external storage" => "Luba kasutajatel ühendada külge nende enda välised salvestusseadmed",
+"SSL root certificates" => "SSL root sertifikaadid",
+"Import Root Certificate" => "Impordi root sertifikaadid"
);
diff --git a/apps/files_external/l10n/eu.php b/apps/files_external/l10n/eu.php
index 6299390c266..dccd377b119 100644
--- a/apps/files_external/l10n/eu.php
+++ b/apps/files_external/l10n/eu.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Sarrera baimendua",
+"Error configuring Dropbox storage" => "Errore bat egon da Dropbox biltegiratzea konfiguratzean",
+"Grant access" => "Baimendu sarrera",
+"Fill out all required fields" => "Bete eskatutako eremu guztiak",
+"Please provide a valid Dropbox app key and secret." => "Mesedez eman baliozkoa den Dropbox app giltza eta sekretua",
+"Error configuring Google Drive storage" => "Errore bat egon da Google Drive biltegiratzea konfiguratzean",
"External Storage" => "Kanpoko Biltegiratzea",
"Mount point" => "Montatze puntua",
"Backend" => "Motorra",
@@ -11,8 +17,8 @@
"Groups" => "Taldeak",
"Users" => "Erabiltzaileak",
"Delete" => "Ezabatu",
-"SSL root certificates" => "SSL erro ziurtagiriak",
-"Import Root Certificate" => "Inportatu Erro Ziurtagiria",
"Enable User External Storage" => "Gaitu erabiltzaileentzako Kanpo Biltegiratzea",
-"Allow users to mount their own external storage" => "Baimendu erabiltzaileak bere kanpo biltegiratzeak muntatzen"
+"Allow users to mount their own external storage" => "Baimendu erabiltzaileak bere kanpo biltegiratzeak muntatzen",
+"SSL root certificates" => "SSL erro ziurtagiriak",
+"Import Root Certificate" => "Inportatu Erro Ziurtagiria"
);
diff --git a/apps/files_external/l10n/fi_FI.php b/apps/files_external/l10n/fi_FI.php
index cea671368ed..d7b16e0d3ee 100644
--- a/apps/files_external/l10n/fi_FI.php
+++ b/apps/files_external/l10n/fi_FI.php
@@ -1,4 +1,9 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Pääsy sallittu",
+"Error configuring Dropbox storage" => "Virhe Dropbox levyn asetuksia tehtäessä",
+"Grant access" => "Salli pääsy",
+"Fill out all required fields" => "Täytä kaikki vaaditut kentät",
+"Error configuring Google Drive storage" => "Virhe Google Drive levyn asetuksia tehtäessä",
"External Storage" => "Erillinen tallennusväline",
"Mount point" => "Liitospiste",
"Backend" => "Taustaosa",
@@ -11,8 +16,8 @@
"Groups" => "Ryhmät",
"Users" => "Käyttäjät",
"Delete" => "Poista",
-"SSL root certificates" => "SSL-juurivarmenteet",
-"Import Root Certificate" => "Tuo juurivarmenne",
"Enable User External Storage" => "Ota käyttöön ulkopuoliset tallennuspaikat",
-"Allow users to mount their own external storage" => "Salli käyttäjien liittää omia erillisiä tallennusvälineitä"
+"Allow users to mount their own external storage" => "Salli käyttäjien liittää omia erillisiä tallennusvälineitä",
+"SSL root certificates" => "SSL-juurivarmenteet",
+"Import Root Certificate" => "Tuo juurivarmenne"
);
diff --git a/apps/files_external/l10n/fr.php b/apps/files_external/l10n/fr.php
index b3e76c63500..90007aafaaf 100644
--- a/apps/files_external/l10n/fr.php
+++ b/apps/files_external/l10n/fr.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Accès autorisé",
+"Error configuring Dropbox storage" => "Erreur lors de la configuration du support de stockage Dropbox",
+"Grant access" => "Autoriser l'accès",
+"Fill out all required fields" => "Veuillez remplir tous les champs requis",
+"Please provide a valid Dropbox app key and secret." => "Veuillez fournir une clé d'application (app key) ainsi qu'un mot de passe valides.",
+"Error configuring Google Drive storage" => "Erreur lors de la configuration du support de stockage Google Drive",
"External Storage" => "Stockage externe",
"Mount point" => "Point de montage",
"Backend" => "Infrastructure",
@@ -11,8 +17,8 @@
"Groups" => "Groupes",
"Users" => "Utilisateurs",
"Delete" => "Supprimer",
-"SSL root certificates" => "Certificats racine SSL",
-"Import Root Certificate" => "Importer un certificat racine",
"Enable User External Storage" => "Activer le stockage externe pour les utilisateurs",
-"Allow users to mount their own external storage" => "Autoriser les utilisateurs à monter leur propre stockage externe"
+"Allow users to mount their own external storage" => "Autoriser les utilisateurs à monter leur propre stockage externe",
+"SSL root certificates" => "Certificats racine SSL",
+"Import Root Certificate" => "Importer un certificat racine"
);
diff --git a/apps/files_external/l10n/gl.php b/apps/files_external/l10n/gl.php
new file mode 100644
index 00000000000..3830efb70bf
--- /dev/null
+++ b/apps/files_external/l10n/gl.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Almacenamento externo",
+"Mount point" => "Punto de montaxe",
+"Backend" => "Almacén",
+"Configuration" => "Configuración",
+"Options" => "Opcións",
+"Applicable" => "Aplicable",
+"Add mount point" => "Engadir punto de montaxe",
+"None set" => "Non establecido",
+"All Users" => "Tódolos usuarios",
+"Groups" => "Grupos",
+"Users" => "Usuarios",
+"Delete" => "Eliminar",
+"Enable User External Storage" => "Habilitar almacenamento externo do usuario",
+"Allow users to mount their own external storage" => "Permitir aos usuarios montar os seus propios almacenamentos externos",
+"SSL root certificates" => "Certificados raíz SSL",
+"Import Root Certificate" => "Importar Certificado Raíz"
+);
diff --git a/apps/files_external/l10n/he.php b/apps/files_external/l10n/he.php
index edfa9aa85f0..12dfa62e7c8 100644
--- a/apps/files_external/l10n/he.php
+++ b/apps/files_external/l10n/he.php
@@ -6,8 +6,8 @@
"Groups" => "קבוצות",
"Users" => "משתמשים",
"Delete" => "מחיקה",
-"SSL root certificates" => "שורש אישורי אבטחת SSL ",
-"Import Root Certificate" => "ייבוא אישור אבטחת שורש",
"Enable User External Storage" => "הפעלת אחסון חיצוני למשתמשים",
-"Allow users to mount their own external storage" => "יאפשר למשתמשים לעגן את האחסון החיצוני שלהם"
+"Allow users to mount their own external storage" => "יאפשר למשתמשים לעגן את האחסון החיצוני שלהם",
+"SSL root certificates" => "שורש אישורי אבטחת SSL ",
+"Import Root Certificate" => "ייבוא אישור אבטחת שורש"
);
diff --git a/apps/files_external/l10n/id.php b/apps/files_external/l10n/id.php
new file mode 100644
index 00000000000..4b7850025f4
--- /dev/null
+++ b/apps/files_external/l10n/id.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "akses diberikan",
+"Grant access" => "berikan hak akses",
+"Fill out all required fields" => "isi semua field yang dibutuhkan",
+"External Storage" => "penyimpanan eksternal",
+"Configuration" => "konfigurasi",
+"Options" => "pilihan",
+"Applicable" => "berlaku",
+"None set" => "tidak satupun di set",
+"All Users" => "semua pengguna",
+"Groups" => "grup",
+"Users" => "pengguna",
+"Delete" => "hapus"
+);
diff --git a/apps/files_external/l10n/it.php b/apps/files_external/l10n/it.php
index 5c5d32b214c..49effebdfc3 100644
--- a/apps/files_external/l10n/it.php
+++ b/apps/files_external/l10n/it.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Accesso consentito",
+"Error configuring Dropbox storage" => "Errore durante la configurazione dell'archivio Dropbox",
+"Grant access" => "Concedi l'accesso",
+"Fill out all required fields" => "Compila tutti i campi richiesti",
+"Please provide a valid Dropbox app key and secret." => "Fornisci chiave di applicazione e segreto di Dropbox validi.",
+"Error configuring Google Drive storage" => "Errore durante la configurazione dell'archivio Google Drive",
"External Storage" => "Archiviazione esterna",
"Mount point" => "Punto di mount",
"Backend" => "Motore",
@@ -11,8 +17,8 @@
"Groups" => "Gruppi",
"Users" => "Utenti",
"Delete" => "Elimina",
-"SSL root certificates" => "Certificati SSL radice",
-"Import Root Certificate" => "Importa certificato radice",
"Enable User External Storage" => "Abilita la memoria esterna dell'utente",
-"Allow users to mount their own external storage" => "Consenti agli utenti di montare la propria memoria esterna"
+"Allow users to mount their own external storage" => "Consenti agli utenti di montare la propria memoria esterna",
+"SSL root certificates" => "Certificati SSL radice",
+"Import Root Certificate" => "Importa certificato radice"
);
diff --git a/apps/files_external/l10n/ja_JP.php b/apps/files_external/l10n/ja_JP.php
index c7d38d88321..92f74ce9f72 100644
--- a/apps/files_external/l10n/ja_JP.php
+++ b/apps/files_external/l10n/ja_JP.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "アクセスは許可されました",
+"Error configuring Dropbox storage" => "Dropboxストレージの設定エラー",
+"Grant access" => "アクセスを許可",
+"Fill out all required fields" => "すべての必須フィールドを埋めて下さい",
+"Please provide a valid Dropbox app key and secret." => "有効なDropboxアプリのキーとパスワードを入力して下さい。",
+"Error configuring Google Drive storage" => "Googleドライブストレージの設定エラー",
"External Storage" => "外部ストレージ",
"Mount point" => "マウントポイント",
"Backend" => "バックエンド",
@@ -11,8 +17,8 @@
"Groups" => "グループ",
"Users" => "ユーザ",
"Delete" => "削除",
-"SSL root certificates" => "SSLルート証明書",
-"Import Root Certificate" => "ルート証明書をインポート",
"Enable User External Storage" => "ユーザの外部ストレージを有効にする",
-"Allow users to mount their own external storage" => "ユーザに外部ストレージのマウントを許可する"
+"Allow users to mount their own external storage" => "ユーザに外部ストレージのマウントを許可する",
+"SSL root certificates" => "SSLルート証明書",
+"Import Root Certificate" => "ルート証明書をインポート"
);
diff --git a/apps/files_external/l10n/lt_LT.php b/apps/files_external/l10n/lt_LT.php
index 00022aa3d38..6cd3ca2bbfd 100644
--- a/apps/files_external/l10n/lt_LT.php
+++ b/apps/files_external/l10n/lt_LT.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Priėjimas suteiktas",
+"Error configuring Dropbox storage" => "Klaida nustatinėjantDropbox talpyklą",
+"Grant access" => "Suteikti priėjimą",
+"Fill out all required fields" => "Užpildykite visus reikalingus laukelius",
+"Please provide a valid Dropbox app key and secret." => "Prašome įvesti teisingus Dropbox \"app key\" ir \"secret\".",
+"Error configuring Google Drive storage" => "Klaida nustatinėjant Google Drive talpyklą",
+"External Storage" => "Išorinės saugyklos",
+"Mount point" => "Saugyklos pavadinimas",
+"Backend" => "Posistemės pavadinimas",
"Configuration" => "Konfigūracija",
"Options" => "Nustatymai",
+"Applicable" => "Pritaikyti",
+"Add mount point" => "Pridėti išorinę saugyklą",
"None set" => "Nieko nepasirinkta",
"All Users" => "Visi vartotojai",
"Groups" => "Grupės",
"Users" => "Vartotojai",
-"Delete" => "Ištrinti"
+"Delete" => "Ištrinti",
+"Enable User External Storage" => "Įjungti vartotojų išorines saugyklas",
+"Allow users to mount their own external storage" => "Leisti vartotojams pridėti savo išorines saugyklas",
+"SSL root certificates" => "SSL sertifikatas",
+"Import Root Certificate" => "Įkelti pagrindinį sertifikatą"
);
diff --git a/apps/files_external/l10n/nl.php b/apps/files_external/l10n/nl.php
index f3f38260a8a..87ab87cfc9f 100644
--- a/apps/files_external/l10n/nl.php
+++ b/apps/files_external/l10n/nl.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Toegang toegestaan",
+"Error configuring Dropbox storage" => "Fout tijdens het configureren van Dropbox opslag",
+"Grant access" => "Sta toegang toe",
+"Fill out all required fields" => "Vul alle verplichte in",
+"Please provide a valid Dropbox app key and secret." => "Geef een geldige Dropbox key en secret.",
+"Error configuring Google Drive storage" => "Fout tijdens het configureren van Google Drive opslag",
"External Storage" => "Externe opslag",
"Mount point" => "Aankoppelpunt",
"Backend" => "Backend",
@@ -11,8 +17,8 @@
"Groups" => "Groepen",
"Users" => "Gebruikers",
"Delete" => "Verwijder",
-"SSL root certificates" => "SSL root certificaten",
-"Import Root Certificate" => "Importeer root certificaat",
"Enable User External Storage" => "Zet gebruiker's externe opslag aan",
-"Allow users to mount their own external storage" => "Sta gebruikers toe om hun eigen externe opslag aan te koppelen"
+"Allow users to mount their own external storage" => "Sta gebruikers toe om hun eigen externe opslag aan te koppelen",
+"SSL root certificates" => "SSL root certificaten",
+"Import Root Certificate" => "Importeer root certificaat"
);
diff --git a/apps/files_external/l10n/pl.php b/apps/files_external/l10n/pl.php
index df0ed54e80f..00514e59a5f 100644
--- a/apps/files_external/l10n/pl.php
+++ b/apps/files_external/l10n/pl.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Dostęp do",
+"Error configuring Dropbox storage" => "Wystąpił błąd podczas konfigurowania zasobu Dropbox",
+"Grant access" => "Udziel dostępu",
+"Fill out all required fields" => "Wypełnij wszystkie wymagane pola",
+"Please provide a valid Dropbox app key and secret." => "Proszę podać prawidłowy klucz aplikacji Dropbox i klucz sekretny.",
+"Error configuring Google Drive storage" => "Wystąpił błąd podczas konfigurowania zasobu Google Drive",
"External Storage" => "Zewnętrzna zasoby dyskowe",
"Mount point" => "Punkt montowania",
"Backend" => "Zaplecze",
@@ -11,8 +17,8 @@
"Groups" => "Grupy",
"Users" => "Użytkownicy",
"Delete" => "Usuń",
-"SSL root certificates" => "Główny certyfikat SSL",
-"Import Root Certificate" => "Importuj główny certyfikat",
"Enable User External Storage" => "Włącz zewnętrzne zasoby dyskowe użytkownika",
-"Allow users to mount their own external storage" => "Zezwalaj użytkownikom na montowanie ich własnych zewnętrznych zasobów dyskowych"
+"Allow users to mount their own external storage" => "Zezwalaj użytkownikom na montowanie ich własnych zewnętrznych zasobów dyskowych",
+"SSL root certificates" => "Główny certyfikat SSL",
+"Import Root Certificate" => "Importuj główny certyfikat"
);
diff --git a/apps/files_external/l10n/pt_BR.php b/apps/files_external/l10n/pt_BR.php
new file mode 100644
index 00000000000..26e927a423e
--- /dev/null
+++ b/apps/files_external/l10n/pt_BR.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "Acesso concedido",
+"Error configuring Dropbox storage" => "Erro ao configurar armazenamento do Dropbox",
+"Grant access" => "Permitir acesso",
+"Fill out all required fields" => "Preencha todos os campos obrigatórios",
+"Please provide a valid Dropbox app key and secret." => "Por favor forneça um app key e secret válido do Dropbox",
+"Error configuring Google Drive storage" => "Erro ao configurar armazenamento do Google Drive",
+"External Storage" => "Armazenamento Externo",
+"Mount point" => "Ponto de montagem",
+"Backend" => "Backend",
+"Configuration" => "Configuração",
+"Options" => "Opções",
+"Applicable" => "Aplicável",
+"Add mount point" => "Adicionar ponto de montagem",
+"None set" => "Nenhum definido",
+"All Users" => "Todos os Usuários",
+"Groups" => "Grupos",
+"Users" => "Usuários",
+"Delete" => "Remover",
+"Enable User External Storage" => "Habilitar Armazenamento Externo do Usuário",
+"Allow users to mount their own external storage" => "Permitir usuários a montar seus próprios armazenamentos externos",
+"SSL root certificates" => "Certificados SSL raíz",
+"Import Root Certificate" => "Importar Certificado Raíz"
+);
diff --git a/apps/files_external/l10n/pt_PT.php b/apps/files_external/l10n/pt_PT.php
new file mode 100644
index 00000000000..4795a51a6b7
--- /dev/null
+++ b/apps/files_external/l10n/pt_PT.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "Acesso autorizado",
+"Error configuring Dropbox storage" => "Erro ao configurar o armazenamento do Dropbox",
+"Grant access" => "Conceder acesso",
+"Fill out all required fields" => "Preencha todos os campos obrigatórios",
+"Please provide a valid Dropbox app key and secret." => "Por favor forneça uma \"app key\" e \"secret\" do Dropbox válidas.",
+"Error configuring Google Drive storage" => "Erro ao configurar o armazenamento do Google Drive",
+"External Storage" => "Armazenamento Externo",
+"Mount point" => "Ponto de montagem",
+"Backend" => "Backend",
+"Configuration" => "Configuração",
+"Options" => "Opções",
+"Applicable" => "Aplicável",
+"Add mount point" => "Adicionar ponto de montagem",
+"None set" => "Nenhum configurado",
+"All Users" => "Todos os utilizadores",
+"Groups" => "Grupos",
+"Users" => "Utilizadores",
+"Delete" => "Apagar",
+"Enable User External Storage" => "Activar Armazenamento Externo para o Utilizador",
+"Allow users to mount their own external storage" => "Permitir que os utilizadores montem o seu próprio armazenamento externo",
+"SSL root certificates" => "Certificados SSL de raiz",
+"Import Root Certificate" => "Importar Certificado Root"
+);
diff --git a/apps/files_external/l10n/ro.php b/apps/files_external/l10n/ro.php
new file mode 100644
index 00000000000..6a152786808
--- /dev/null
+++ b/apps/files_external/l10n/ro.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Stocare externă",
+"Mount point" => "Punctul de montare",
+"Backend" => "Backend",
+"Configuration" => "Configurație",
+"Options" => "Opțiuni",
+"Applicable" => "Aplicabil",
+"Add mount point" => "Adaugă punct de montare",
+"None set" => "Niciunul",
+"All Users" => "Toți utilizatorii",
+"Groups" => "Grupuri",
+"Users" => "Utilizatori",
+"Delete" => "Șterge",
+"Enable User External Storage" => "Permite stocare externă pentru utilizatori",
+"Allow users to mount their own external storage" => "Permite utilizatorilor să monteze stocare externă proprie",
+"SSL root certificates" => "Certificate SSL root",
+"Import Root Certificate" => "Importă certificat root"
+);
diff --git a/apps/files_external/l10n/ru.php b/apps/files_external/l10n/ru.php
index 7ee43786621..34d34a18eda 100644
--- a/apps/files_external/l10n/ru.php
+++ b/apps/files_external/l10n/ru.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Доступ предоставлен",
+"Error configuring Dropbox storage" => "Ошибка при настройке хранилища Dropbox",
+"Grant access" => "Предоставление доступа",
+"Fill out all required fields" => "Заполните все обязательные поля",
+"Please provide a valid Dropbox app key and secret." => "Пожалуйста, предоставьте действующий ключ Dropbox и пароль.",
+"Error configuring Google Drive storage" => "Ошибка при настройке хранилища Google Drive",
"External Storage" => "Внешний носитель",
"Mount point" => "Точка монтирования",
"Backend" => "Подсистема",
@@ -11,8 +17,8 @@
"Groups" => "Группы",
"Users" => "Пользователи",
"Delete" => "Удалить",
-"SSL root certificates" => "Корневые сертификаты SSL",
-"Import Root Certificate" => "Импортировать корневые сертификаты",
"Enable User External Storage" => "Включить пользовательские внешние носители",
-"Allow users to mount their own external storage" => "Разрешить пользователям монтировать их собственные внешние носители"
+"Allow users to mount their own external storage" => "Разрешить пользователям монтировать их собственные внешние носители",
+"SSL root certificates" => "Корневые сертификаты SSL",
+"Import Root Certificate" => "Импортировать корневые сертификаты"
);
diff --git a/apps/files_external/l10n/ru_RU.php b/apps/files_external/l10n/ru_RU.php
new file mode 100644
index 00000000000..493e3f5bee4
--- /dev/null
+++ b/apps/files_external/l10n/ru_RU.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "Доступ разрешен",
+"Error configuring Dropbox storage" => "Ошибка при конфигурировании хранилища Dropbox",
+"Grant access" => "Предоставить доступ",
+"Fill out all required fields" => "Заполните все требуемые поля",
+"Please provide a valid Dropbox app key and secret." => "Пожалуйста представьте допустимый ключ приложения Dropbox и пароль.",
+"Error configuring Google Drive storage" => "Ошибка настройки хранилища Google Drive",
+"External Storage" => "Внешние системы хранения данных",
+"Mount point" => "Точка монтирования",
+"Backend" => "Бэкэнд",
+"Configuration" => "Конфигурация",
+"Options" => "Опции",
+"Applicable" => "Применимый",
+"Add mount point" => "Добавить точку монтирования",
+"None set" => "Не задан",
+"All Users" => "Все пользователи",
+"Groups" => "Группы",
+"Users" => "Пользователи",
+"Delete" => "Удалить",
+"Enable User External Storage" => "Включить пользовательскую внешнюю систему хранения данных",
+"Allow users to mount their own external storage" => "Разрешить пользователям монтировать их собственную внешнюю систему хранения данных",
+"SSL root certificates" => "Корневые сертификаты SSL",
+"Import Root Certificate" => "Импортировать корневые сертификаты"
+);
diff --git a/apps/files_external/l10n/si_LK.php b/apps/files_external/l10n/si_LK.php
new file mode 100644
index 00000000000..b8e2c5714b3
--- /dev/null
+++ b/apps/files_external/l10n/si_LK.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "පිවිසීමට හැක",
+"Error configuring Dropbox storage" => "Dropbox ගබඩාව වින්‍යාස කිරීමේ දෝශයක් ඇත",
+"Grant access" => "පිවිසුම ලබාදෙන්න",
+"Fill out all required fields" => "අත්‍යාවශ්‍ය තොරතුරු සියල්ල සම්පුර්ණ කරන්න",
+"Please provide a valid Dropbox app key and secret." => "කරුණාකර වලංගු Dropbox යෙදුම් යතුරක් හා රහසක් ලබාදෙන්න.",
+"Error configuring Google Drive storage" => "Google Drive ගබඩාව වින්‍යාස කිරීමේ දෝශයක් ඇත",
+"External Storage" => "භාහිර ගබඩාව",
+"Mount point" => "මවුන්ට් කළ ස්ථානය",
+"Backend" => "පසු පද්ධතිය",
+"Configuration" => "වින්‍යාසය",
+"Options" => "විකල්පයන්",
+"Applicable" => "අදාළ",
+"Add mount point" => "මවුන්ට් කරන ස්ථානයක් එකතු කරන්න",
+"None set" => "කිසිවක් නැත",
+"All Users" => "සියළු පරිශීලකයන්",
+"Groups" => "කණ්ඩායම්",
+"Users" => "පරිශීලකයන්",
+"Delete" => "මකා දමන්න",
+"Enable User External Storage" => "පරිශීලක භාහිර ගබඩාවන් සක්‍රිය කරන්න",
+"Allow users to mount their own external storage" => "පරිශීලකයන්ට තමාගේම භාහිර ගබඩාවන් මවුන්ට් කිරීමේ අයිතිය දෙන්න",
+"SSL root certificates" => "SSL මූල සහතිකයන්",
+"Import Root Certificate" => "මූල සහතිකය ආයාත කරන්න"
+);
diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php
index 24087ea7feb..04d5e3c7ee4 100644
--- a/apps/files_external/l10n/sk_SK.php
+++ b/apps/files_external/l10n/sk_SK.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Prístup povolený",
+"Error configuring Dropbox storage" => "Chyba pri konfigurácii úložiska Dropbox",
+"Grant access" => "Povoliť prístup",
+"Fill out all required fields" => "Vyplňte všetky vyžadované kolónky",
+"Please provide a valid Dropbox app key and secret." => "Zadajte platný kľúč aplikácie a heslo Dropbox",
+"Error configuring Google Drive storage" => "Chyba pri konfigurácii úložiska Google drive",
"External Storage" => "Externé úložisko",
"Mount point" => "Prípojný bod",
"Backend" => "Backend",
@@ -11,8 +17,8 @@
"Groups" => "Skupiny",
"Users" => "Užívatelia",
"Delete" => "Odstrániť",
-"SSL root certificates" => "Koreňové SSL certifikáty",
-"Import Root Certificate" => "Importovať koreňový certifikát",
"Enable User External Storage" => "Povoliť externé úložisko",
-"Allow users to mount their own external storage" => "Povoliť užívateľom pripojiť ich vlastné externé úložisko"
+"Allow users to mount their own external storage" => "Povoliť užívateľom pripojiť ich vlastné externé úložisko",
+"SSL root certificates" => "Koreňové SSL certifikáty",
+"Import Root Certificate" => "Importovať koreňový certifikát"
);
diff --git a/apps/files_external/l10n/sl.php b/apps/files_external/l10n/sl.php
index d588844467e..713e89578e2 100644
--- a/apps/files_external/l10n/sl.php
+++ b/apps/files_external/l10n/sl.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Dostop je odobren",
+"Error configuring Dropbox storage" => "Napaka nastavljanja shrambe Dropbox",
+"Grant access" => "Odobri dostop",
+"Fill out all required fields" => "Zapolni vsa zahtevana polja",
+"Please provide a valid Dropbox app key and secret." => "Vpišite veljaven ključ programa in kodo za Dropbox",
+"Error configuring Google Drive storage" => "Napaka nastavljanja shrambe Google Drive",
"External Storage" => "Zunanja podatkovna shramba",
"Mount point" => "Priklopna točka",
"Backend" => "Zaledje",
@@ -11,8 +17,8 @@
"Groups" => "Skupine",
"Users" => "Uporabniki",
"Delete" => "Izbriši",
-"SSL root certificates" => "SSL korenski certifikati",
-"Import Root Certificate" => "Uvozi korenski certifikat",
"Enable User External Storage" => "Omogoči uporabo zunanje podatkovne shrambe za uporabnike",
-"Allow users to mount their own external storage" => "Dovoli uporabnikom priklop lastne zunanje podatkovne shrambe"
+"Allow users to mount their own external storage" => "Dovoli uporabnikom priklop lastne zunanje podatkovne shrambe",
+"SSL root certificates" => "Korenska potrdila SSL",
+"Import Root Certificate" => "Uvozi korensko potrdilo"
);
diff --git a/apps/files_external/l10n/sv.php b/apps/files_external/l10n/sv.php
index 0838df6a32b..0a5e1c66d99 100644
--- a/apps/files_external/l10n/sv.php
+++ b/apps/files_external/l10n/sv.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Åtkomst beviljad",
+"Error configuring Dropbox storage" => "Fel vid konfigurering av Dropbox",
+"Grant access" => "Bevilja åtkomst",
+"Fill out all required fields" => "Fyll i alla obligatoriska fält",
+"Please provide a valid Dropbox app key and secret." => "Ange en giltig Dropbox nyckel och hemlighet.",
+"Error configuring Google Drive storage" => "Fel vid konfigurering av Google Drive",
"External Storage" => "Extern lagring",
"Mount point" => "Monteringspunkt",
"Backend" => "Källa",
@@ -11,8 +17,8 @@
"Groups" => "Grupper",
"Users" => "Användare",
"Delete" => "Radera",
-"SSL root certificates" => "SSL rotcertifikat",
-"Import Root Certificate" => "Importera rotcertifikat",
"Enable User External Storage" => "Aktivera extern lagring för användare",
-"Allow users to mount their own external storage" => "Tillåt användare att montera egen extern lagring"
+"Allow users to mount their own external storage" => "Tillåt användare att montera egen extern lagring",
+"SSL root certificates" => "SSL rotcertifikat",
+"Import Root Certificate" => "Importera rotcertifikat"
);
diff --git a/apps/files_external/l10n/th_TH.php b/apps/files_external/l10n/th_TH.php
index 84a233046eb..70ab8d33485 100644
--- a/apps/files_external/l10n/th_TH.php
+++ b/apps/files_external/l10n/th_TH.php
@@ -1,4 +1,10 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "การเข้าถึงได้รับอนุญาตแล้ว",
+"Error configuring Dropbox storage" => "เกิดข้อผิดพลาดในการกำหนดค่าพื้นที่จัดเก็บข้อมูล Dropbox",
+"Grant access" => "อนุญาตให้เข้าถึงได้",
+"Fill out all required fields" => "กรอกข้อมูลในช่องข้อมูลที่จำเป็นต้องกรอกทั้งหมด",
+"Please provide a valid Dropbox app key and secret." => "กรุณากรอกรหัส app key ของ Dropbox และรหัสลับ",
+"Error configuring Google Drive storage" => "เกิดข้อผิดพลาดในการกำหนดค่าการจัดเก็บข้อมูลในพื้นที่ของ Google Drive",
"External Storage" => "พื้นทีจัดเก็บข้อมูลจากภายนอก",
"Mount point" => "จุดชี้ตำแหน่ง",
"Backend" => "ด้านหลังระบบ",
@@ -11,8 +17,8 @@
"Groups" => "กลุ่ม",
"Users" => "ผู้ใช้งาน",
"Delete" => "ลบ",
-"SSL root certificates" => "ใบรับรองความปลอดภัยด้วยระบบ SSL จาก Root",
-"Import Root Certificate" => "นำเข้าข้อมูลใบรับรองความปลอดภัยจาก Root",
"Enable User External Storage" => "เปิดให้มีการใช้พื้นที่จัดเก็บข้อมูลของผู้ใช้งานจากภายนอกได้",
-"Allow users to mount their own external storage" => "อนุญาตให้ผู้ใช้งานสามารถชี้ตำแหน่งไปที่พื้นที่จัดเก็บข้อมูลภายนอกของตนเองได้"
+"Allow users to mount their own external storage" => "อนุญาตให้ผู้ใช้งานสามารถชี้ตำแหน่งไปที่พื้นที่จัดเก็บข้อมูลภายนอกของตนเองได้",
+"SSL root certificates" => "ใบรับรองความปลอดภัยด้วยระบบ SSL จาก Root",
+"Import Root Certificate" => "นำเข้าข้อมูลใบรับรองความปลอดภัยจาก Root"
);
diff --git a/apps/files_external/l10n/vi.php b/apps/files_external/l10n/vi.php
index 35312329da1..80328bf957a 100644
--- a/apps/files_external/l10n/vi.php
+++ b/apps/files_external/l10n/vi.php
@@ -1,4 +1,9 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Đã cấp quyền truy cập",
+"Error configuring Dropbox storage" => "Lỗi cấu hình lưu trữ Dropbox ",
+"Grant access" => "Cấp quyền truy cập",
+"Fill out all required fields" => "Điền vào tất cả các trường bắt buộc",
+"Error configuring Google Drive storage" => "Lỗi cấu hình lưu trữ Google Drive",
"External Storage" => "Lưu trữ ngoài",
"Mount point" => "Điểm gắn",
"Backend" => "phụ trợ",
@@ -11,8 +16,8 @@
"Groups" => "Nhóm",
"Users" => "Người dùng",
"Delete" => "Xóa",
-"SSL root certificates" => "Chứng chỉ SSL root",
-"Import Root Certificate" => "Nhập Root Certificate",
"Enable User External Storage" => "Kích hoạt tính năng lưu trữ ngoài",
-"Allow users to mount their own external storage" => "Cho phép người dùng kết nối với lưu trữ riêng bên ngoài của họ"
+"Allow users to mount their own external storage" => "Cho phép người dùng kết nối với lưu trữ riêng bên ngoài của họ",
+"SSL root certificates" => "Chứng chỉ SSL root",
+"Import Root Certificate" => "Nhập Root Certificate"
);
diff --git a/apps/files_external/l10n/zh_CN.GB2312.php b/apps/files_external/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..47983d3d7d4
--- /dev/null
+++ b/apps/files_external/l10n/zh_CN.GB2312.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "已授予权限",
+"Error configuring Dropbox storage" => "配置 Dropbox 存储出错",
+"Grant access" => "授予权限",
+"Fill out all required fields" => "填充全部必填字段",
+"Please provide a valid Dropbox app key and secret." => "请提供一个有效的 Dropbox app key 和 secret。",
+"Error configuring Google Drive storage" => "配置 Google Drive 存储失败",
+"External Storage" => "外部存储",
+"Mount point" => "挂载点",
+"Backend" => "后端",
+"Configuration" => "配置",
+"Options" => "选项",
+"Applicable" => "可应用",
+"Add mount point" => "添加挂载点",
+"None set" => "未设置",
+"All Users" => "所有用户",
+"Groups" => "群组",
+"Users" => "用户",
+"Delete" => "删除",
+"Enable User External Storage" => "启用用户外部存储",
+"Allow users to mount their own external storage" => "允许用户挂载他们的外部存储",
+"SSL root certificates" => "SSL 根证书",
+"Import Root Certificate" => "导入根证书"
+);
diff --git a/apps/files_external/l10n/zh_CN.php b/apps/files_external/l10n/zh_CN.php
new file mode 100644
index 00000000000..247ef7ce95c
--- /dev/null
+++ b/apps/files_external/l10n/zh_CN.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Access granted" => "权限已授予。",
+"Error configuring Dropbox storage" => "配置Dropbox存储时出错",
+"Grant access" => "授权",
+"Fill out all required fields" => "完成所有必填项",
+"Please provide a valid Dropbox app key and secret." => "请提供有效的Dropbox应用key和secret",
+"Error configuring Google Drive storage" => "配置Google Drive存储时出错",
+"External Storage" => "外部存储",
+"Mount point" => "挂载点",
+"Backend" => "后端",
+"Configuration" => "配置",
+"Options" => "选项",
+"Applicable" => "适用的",
+"Add mount point" => "增加挂载点",
+"None set" => "未设置",
+"All Users" => "所有用户",
+"Groups" => "组",
+"Users" => "用户",
+"Delete" => "删除",
+"Enable User External Storage" => "启用用户外部存储",
+"Allow users to mount their own external storage" => "允许用户挂载自有外部存储",
+"SSL root certificates" => "SSL根证书",
+"Import Root Certificate" => "导入根证书"
+);
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index eec31ec2ef9..9dc3cdd7147 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -109,6 +109,21 @@ class OC_Mount_Config {
return $personal;
}
+ /**
+ * Add directory for mount point to the filesystem
+ * @param OC_Fileview instance $view
+ * @param string path to mount point
+ */
+ private static function addMountPointDirectory($view, $path) {
+ $dir = '';
+ foreach ( explode('/', $path) as $pathPart) {
+ $dir = $dir.'/'.$pathPart;
+ if ( !$view->file_exists($dir)) {
+ $view->mkdir($dir);
+ }
+ }
+ }
+
/**
* Add a mount point to the filesystem
@@ -127,8 +142,33 @@ class OC_Mount_Config {
if ($applicable != OCP\User::getUser() || $class == 'OC_Filestorage_Local') {
return false;
}
+ $view = new OC_FilesystemView('/'.OCP\User::getUser().'/files');
+ self::addMountPointDirectory($view, ltrim($mountPoint, '/'));
$mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
} else {
+ $view = new OC_FilesystemView('/');
+ switch ($mountType) {
+ case 'user':
+ if ($applicable == "all") {
+ $users = OCP\User::getUsers();
+ foreach ( $users as $user ) {
+ $path = $user.'/files/'.ltrim($mountPoint, '/');
+ self::addMountPointDirectory($view, $path);
+ }
+ } else {
+ $path = $applicable.'/files/'.ltrim($mountPoint, '/');
+ self::addMountPointDirectory($view, $path);
+ }
+ break;
+ case 'group' :
+ $groupMembers = OC_Group::usersInGroups(array($applicable));
+ foreach ( $groupMembers as $user ) {
+ $path = $user.'/files/'.ltrim($mountPoint, '/');
+ self::addMountPointDirectory($view, $path);
+ }
+ break;
+ }
+
$mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
}
$mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions)));
@@ -191,7 +231,7 @@ class OC_Mount_Config {
$file = OC::$SERVERROOT.'/config/mount.php';
}
if (is_file($file)) {
- $mountPoints = include($file);
+ $mountPoints = include $file;
if (is_array($mountPoints)) {
return $mountPoints;
}
@@ -248,6 +288,9 @@ class OC_Mount_Config {
if (!is_dir($path)) mkdir($path);
$result = array();
$handle = opendir($path);
+ if (!$handle) {
+ return array();
+ }
while (false !== ($file = readdir($handle))) {
if($file != '.' && $file != '..') $result[] = $file;
}
@@ -270,6 +313,7 @@ class OC_Mount_Config {
fclose($fh);
if (strpos($data, 'BEGIN CERTIFICATE')) {
fwrite($fh_certs, $data);
+ fwrite($fh_certs, "\r\n");
}
}
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index bb86894e55e..c8220832702 100755
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -25,21 +25,25 @@ require_once 'Dropbox/autoload.php';
class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
private $dropbox;
+ private $root;
private $metaData = array();
private static $tempFiles = array();
public function __construct($params) {
if (isset($params['configured']) && $params['configured'] == 'true' && isset($params['app_key']) && isset($params['app_secret']) && isset($params['token']) && isset($params['token_secret'])) {
+ $this->root=isset($params['root'])?$params['root']:'';
$oauth = new Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']);
$oauth->setToken($params['token'], $params['token_secret']);
$this->dropbox = new Dropbox_API($oauth, 'dropbox');
+ $this->mkdir('');
} else {
throw new Exception('Creating OC_Filestorage_Dropbox storage failed');
}
}
private function getMetaData($path, $list = false) {
+ $path = $this->root.$path;
if (!$list && isset($this->metaData[$path])) {
return $this->metaData[$path];
} else {
@@ -76,6 +80,7 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
}
public function mkdir($path) {
+ $path = $this->root.$path;
try {
$this->dropbox->createFolder($path);
return true;
@@ -144,6 +149,7 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
}
public function unlink($path) {
+ $path = $this->root.$path;
try {
$this->dropbox->delete($path);
return true;
@@ -154,6 +160,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
}
public function rename($path1, $path2) {
+ $path1 = $this->root.$path1;
+ $path2 = $this->root.$path2;
try {
$this->dropbox->move($path1, $path2);
return true;
@@ -164,6 +172,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
}
public function copy($path1, $path2) {
+ $path1 = $this->root.$path1;
+ $path2 = $this->root.$path2;
try {
$this->dropbox->copy($path1, $path2);
return true;
@@ -174,6 +184,7 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
}
public function fopen($path, $mode) {
+ $path = $this->root.$path;
switch ($mode) {
case 'r':
case 'rb':
diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php
index 261141455cc..13d1387f287 100644
--- a/apps/files_external/lib/ftp.php
+++ b/apps/files_external/lib/ftp.php
@@ -53,7 +53,7 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
case 'ab':
//these are supported by the wrapper
$context = stream_context_create(array('ftp' => array('overwrite' => true)));
- return fopen($this->constructUrl($path),$mode,false,$context);
+ return fopen($this->constructUrl($path),$mode, false,$context);
case 'r+':
case 'w+':
case 'wb+':
@@ -64,7 +64,7 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
case 'c+':
//emulate these
if(strrpos($path,'.')!==false) {
- $ext=substr($path,strrpos($path,'.'));
+ $ext=substr($path, strrpos($path,'.'));
}else{
$ext='';
}
@@ -80,7 +80,7 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
public function writeBack($tmpFile) {
if(isset(self::$tempFiles[$tmpFile])) {
- $this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]);
+ $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
unlink($tmpFile);
}
}
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index 9b83dcee537..32d57ed3cef 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -395,7 +395,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
case 'c':
case 'c+':
if (strrpos($path,'.') !== false) {
- $ext = substr($path,strrpos($path,'.'));
+ $ext = substr($path, strrpos($path,'.'));
} else {
$ext = '';
}
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index e5ba7a17743..eed2582dc99 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -59,7 +59,7 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
}
public function filetype($path) {
- return (bool)@$this->opendir($path);//using opendir causes the same amount of requests and caches the content of the folder in one go
+ return (bool)@$this->opendir($path) ? 'dir' : 'file';//using opendir causes the same amount of requests and caches the content of the folder in one go
}
/**
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index c29d28b44c1..632c72c280f 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -39,7 +39,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @return string
*/
private function getContainerName($path) {
- $path=trim($this->root.$path,'/');
+ $path=trim(trim($this->root,'/')."/".$path,'/.');
return str_replace('/','\\',$path);
}
@@ -70,11 +70,11 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @return CF_Container
*/
private function createContainer($path) {
- if($path=='' or $path=='/') {
+ if($path=='' or $path=='/' or $path=='.') {
return $this->conn->create_container($this->getContainerName($path));
}
$parent=dirname($path);
- if($parent=='' or $parent=='/') {
+ if($parent=='' or $parent=='/' or $parent=='.') {
$parentContainer=$this->rootContainer;
}else{
if(!$this->containerExists($parent)) {
@@ -83,7 +83,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$parentContainer=$this->getContainer($parent);
}
}
- $this->addSubContainer($parentContainer,basename($path));
+ $this->addSubContainer($parentContainer, basename($path));
return $this->conn->create_container($this->getContainerName($path));
}
@@ -100,6 +100,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
if(is_null($container)) {
return null;
}else{
+ if ($path=="/" or $path=='') {
+ return null;
+ }
try{
$obj=$container->get_object(basename($path));
$this->objects[$path]=$obj;
@@ -135,7 +138,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
private function createObject($path) {
$container=$this->getContainer(dirname($path));
if(!is_null($container)) {
- $container=$this->createContainer($path);
+ $container=$this->createContainer(dirname($path));
}
return $container->create_object(basename($path));
}
@@ -242,7 +245,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
return false;
}else{
unset($containers[$i]);
- file_put_contents($tmpFile,implode("\n",$containers)."\n");
+ file_put_contents($tmpFile, implode("\n",$containers)."\n");
}
$obj->load_from_filename($tmpFile);
@@ -277,7 +280,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$this->conn = new CF_Connection($this->auth);
- if(!$this->containerExists($this->root)) {
+ if(!$this->containerExists('/')) {
$this->rootContainer=$this->createContainer('/');
}else{
$this->rootContainer=$this->getContainer('/');
@@ -301,7 +304,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$this->emptyContainer($path);
if($path!='' and $path!='/') {
$parentContainer=$this->getContainer(dirname($path));
- $this->removeSubContainer($parentContainer,basename($path));
+ $this->removeSubContainer($parentContainer, basename($path));
}
$this->conn->delete_container($this->getContainerName($path));
@@ -391,6 +394,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function unlink($path) {
+ if($this->containerExists($path)) {
+ return $this->rmdir($path);
+ }
if($this->objectExists($path)) {
$container=$this->getContainer(dirname($path));
$container->delete_object(basename($path));
@@ -401,13 +407,13 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function fopen($path,$mode) {
- $obj=$this->getObject($path);
- if(is_null($obj)) {
- return false;
- }
switch($mode) {
case 'r':
case 'rb':
+ $obj=$this->getObject($path);
+ if (is_null($obj)) {
+ return false;
+ }
$fp = fopen('php://temp', 'r+');
$obj->stream($fp);
@@ -434,13 +440,13 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
public function writeBack($tmpFile) {
if(isset(self::$tempFiles[$tmpFile])) {
- $this->fromTmpFile($tmpFile,self::$tempFiles[$tmpFile]);
+ $this->fromTmpFile($tmpFile, self::$tempFiles[$tmpFile]);
unlink($tmpFile);
}
}
public function free_space($path) {
- return 0;
+ return 1024*1024*1024*8;
}
public function touch($path,$mtime=null) {
@@ -460,7 +466,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
public function rename($path1,$path2) {
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
- $result=$sourceContainer->move_object_to(basename($path1),$targetContainer,basename($path2));
+ $result=$sourceContainer->move_object_to(basename($path1),$targetContainer, basename($path2));
unset($this->objects[$path1]);
if($result) {
$targetObj=$this->getObject($path2);
@@ -472,7 +478,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
public function copy($path1,$path2) {
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
- $result=$sourceContainer->copy_object_to(basename($path1),$targetContainer,basename($path2));
+ $result=$sourceContainer->copy_object_to(basename($path1),$targetContainer, basename($path2));
if($result) {
$targetObj=$this->getObject($path2);
$this->resetMTime($targetObj);
@@ -481,7 +487,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function stat($path) {
+ $container=$this->getContainer($path);
+ if (!is_null($container)) {
+ return array(
+ 'mtime'=>-1,
+ 'size'=>$container->bytes_used,
+ 'ctime'=>-1
+ );
+ }
+
$obj=$this->getObject($path);
+
if(is_null($obj)) {
return false;
}
@@ -505,7 +521,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$obj->save_to_filename($tmpFile);
return $tmpFile;
}else{
- return false;
+ return OCP\Files::tmpFile();
}
}
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 3c18b227fa6..74e468a2838 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -65,12 +65,12 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
public function mkdir($path) {
$path=$this->cleanPath($path);
- return $this->simpleResponse('MKCOL',$path,null,201);
+ return $this->simpleResponse('MKCOL',$path, null,201);
}
public function rmdir($path) {
$path=$this->cleanPath($path);
- return $this->simpleResponse('DELETE',$path,null,204);
+ return $this->simpleResponse('DELETE',$path, null,204);
}
public function opendir($path) {
@@ -123,7 +123,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
public function unlink($path) {
- return $this->simpleResponse('DELETE',$path,null,204);
+ return $this->simpleResponse('DELETE',$path, null,204);
}
public function fopen($path,$mode) {
@@ -131,6 +131,9 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
switch($mode) {
case 'r':
case 'rb':
+ if(!$this->file_exists($path)) {
+ return false;
+ }
//straight up curl instead of sabredav here, sabredav put's the entire get result in memory
$curl = curl_init();
$fp = fopen('php://temp', 'r+');
@@ -156,7 +159,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
case 'c+':
//emulate these
if(strrpos($path,'.')!==false) {
- $ext=substr($path,strrpos($path,'.'));
+ $ext=substr($path, strrpos($path,'.'));
}else{
$ext='';
}
@@ -172,7 +175,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
public function writeBack($tmpFile) {
if(isset(self::$tempFiles[$tmpFile])) {
- $this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]);
+ $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
unlink($tmpFile);
}
}
@@ -222,7 +225,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try{
- $response=$this->client->request('MOVE',$path1,null,array('Destination'=>$path2));
+ $response=$this->client->request('MOVE', $path1, null, array('Destination'=>$path2));
return true;
}catch(Exception $e) {
echo $e;
@@ -236,7 +239,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try{
- $response=$this->client->request('COPY',$path1,null,array('Destination'=>$path2));
+ $response=$this->client->request('COPY', $path1, null, array('Destination'=>$path2));
return true;
}catch(Exception $e) {
echo $e;
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
index c44b09b180f..367ce2bc03e 100644
--- a/apps/files_external/templates/settings.php
+++ b/apps/files_external/templates/settings.php
@@ -1,4 +1,4 @@
-<form id="files_external" method="post" enctype="multipart/form-data" action="<?php echo OCP\Util::linkTo('files_external', 'ajax/addRootCertificate.php'); ?>">
+<form id="files_external">
<fieldset class="personalblock">
<legend><strong><?php echo $l->t('External Storage'); ?></strong></legend>
<table id="externalStorage" data-admin='<?php echo json_encode($_['isAdminPage']); ?>'>
@@ -81,7 +81,18 @@
</table>
<br />
- <?php if (!$_['isAdminPage']): ?>
+ <?php if ($_['isAdminPage']): ?>
+ <br />
+ <input type="checkbox" name="allowUserMounting" id="allowUserMounting" value="1" <?php if ($_['allowUserMounting'] == 'yes') echo ' checked="checked"'; ?> />
+ <label for="allowUserMounting"><?php echo $l->t('Enable User External Storage'); ?></label><br/>
+ <em><?php echo $l->t('Allow users to mount their own external storage'); ?></em>
+ <?php endif; ?>
+ </fieldset>
+</form>
+
+<form id="files_external" method="post" enctype="multipart/form-data" action="<?php echo OCP\Util::linkTo('files_external', 'ajax/addRootCertificate.php'); ?>">
+<fieldset class="personalblock">
+<?php if (!$_['isAdminPage']): ?>
<table id="sslCertificate" data-admin='<?php echo json_encode($_['isAdminPage']); ?>'>
<thead>
<tr>
@@ -101,12 +112,5 @@
<input type="file" id="rootcert_import" name="rootcert_import" style="width:230px;">
<input type="submit" name="cert_import" value="<?php echo $l->t('Import Root Certificate'); ?>" />
<?php endif; ?>
-
- <?php if ($_['isAdminPage']): ?>
- <br />
- <input type="checkbox" name="allowUserMounting" id="allowUserMounting" value="1" <?php if ($_['allowUserMounting'] == 'yes') echo ' checked="checked"'; ?> />
- <label for="allowUserMounting"><?php echo $l->t('Enable User External Storage'); ?></label><br/>
- <em><?php echo $l->t('Allow users to mount their own external storage'); ?></em>
- <?php endif; ?>
- </fieldset>
-</form>
+</fieldset>
+</form> \ No newline at end of file
diff --git a/apps/files_external/tests/amazons3.php b/apps/files_external/tests/amazons3.php
index b9b4cf65bd6..725f4ba05da 100644
--- a/apps/files_external/tests/amazons3.php
+++ b/apps/files_external/tests/amazons3.php
@@ -1,43 +1,42 @@
<?php
/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@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/>.
-*/
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@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/>.
+ */
-$config = include('apps/files_external/tests/config.php');
-if (!is_array($config) or !isset($config['amazons3']) or !$config['amazons3']['run']) {
- abstract class Test_Filestorage_AmazonS3 extends Test_FileStorage{}
- return;
-} else {
- class Test_Filestorage_AmazonS3 extends Test_FileStorage {
+class Test_Filestorage_AmazonS3 extends Test_FileStorage {
- private $config;
- private $id;
+ private $config;
+ private $id;
- public function setUp() {
- $id = uniqid();
- $this->config = include('apps/files_external/tests/config.php');
- $this->config['amazons3']['bucket'] = $id; // Make sure we have a new empty bucket to work in
- $this->instance = new OC_Filestorage_AmazonS3($this->config['amazons3']);
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if (!is_array($this->config) or !isset($this->config['amazons3']) or !$this->config['amazons3']['run']) {
+ $this->markTestSkipped('AmazonS3 backend not configured');
}
+ $this->config['amazons3']['bucket'] = $id; // Make sure we have a new empty bucket to work in
+ $this->instance = new OC_Filestorage_AmazonS3($this->config['amazons3']);
+ }
- public function tearDown() {
+ public function tearDown() {
+ if ($this->instance) {
$s3 = new AmazonS3(array('key' => $this->config['amazons3']['key'], 'secret' => $this->config['amazons3']['secret']));
if ($s3->delete_all_objects($this->id)) {
$s3->delete_bucket($this->id);
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index e58a87fabdf..ff16b1c1d8a 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -26,7 +26,7 @@ return array(
'run'=>false,
'user'=>'test:tester',
'token'=>'testing',
- 'host'=>'localhost:8080/auth',
+ 'host'=>'localhost.local:8080/auth',
'root'=>'/',
),
'smb'=>array(
@@ -43,4 +43,13 @@ return array(
'secret'=>'test',
'bucket'=>'bucket',
),
+ 'dropbox' => array (
+ 'run'=>false,
+ 'root'=>'owncloud',
+ 'configured' => 'true',
+ 'app_key' => '',
+ 'app_secret' => '',
+ 'token' => '',
+ 'token_secret' => ''
+ )
);
diff --git a/apps/files_external/tests/dropbox.php b/apps/files_external/tests/dropbox.php
new file mode 100644
index 00000000000..56319b9f5d7
--- /dev/null
+++ b/apps/files_external/tests/dropbox.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Test_Filestorage_Dropbox extends Test_FileStorage {
+ private $config;
+
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if (!is_array($this->config) or !isset($this->config['dropbox']) or !$this->config['dropbox']['run']) {
+ $this->markTestSkipped('Dropbox backend not configured');
+ }
+ $this->config['dropbox']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new OC_Filestorage_Dropbox($this->config['dropbox']);
+ }
+
+ public function tearDown() {
+ if ($this->instance) {
+ $this->instance->unlink('/');
+ }
+ }
+}
diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/ftp.php
index 12f3ec3908d..4549c420410 100644
--- a/apps/files_external/tests/ftp.php
+++ b/apps/files_external/tests/ftp.php
@@ -6,22 +6,21 @@
* See the COPYING-README file.
*/
-$config=include('apps/files_external/tests/config.php');
-if(!is_array($config) or !isset($config['ftp']) or !$config['ftp']['run']) {
- abstract class Test_Filestorage_FTP extends Test_FileStorage{}
- return;
-}else{
- class Test_Filestorage_FTP extends Test_FileStorage {
- private $config;
+class Test_Filestorage_FTP extends Test_FileStorage {
+ private $config;
- public function setUp() {
- $id=uniqid();
- $this->config=include('apps/files_external/tests/config.php');
- $this->config['ftp']['root'].='/'.$id;//make sure we have an new empty folder to work in
- $this->instance=new OC_Filestorage_FTP($this->config['ftp']);
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if (!is_array($this->config) or !isset($this->config['ftp']) or !$this->config['ftp']['run']) {
+ $this->markTestSkipped('FTP backend not configured');
}
+ $this->config['ftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new OC_Filestorage_FTP($this->config['ftp']);
+ }
- public function tearDown() {
+ public function tearDown() {
+ if ($this->instance) {
OCP\Files::rmdirr($this->instance->constructUrl(''));
}
}
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php
index d2a6358ade4..46e622cc180 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/google.php
@@ -1,42 +1,41 @@
<?php
/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@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/>.
-*/
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@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/>.
+ */
-$config=include('apps/files_external/tests/config.php');
-if(!is_array($config) or !isset($config['google']) or !$config['google']['run']) {
- abstract class Test_Filestorage_Google extends Test_FileStorage{}
- return;
-}else{
- class Test_Filestorage_Google extends Test_FileStorage {
+class Test_Filestorage_Google extends Test_FileStorage {
- private $config;
+ private $config;
- public function setUp() {
- $id=uniqid();
- $this->config=include('apps/files_external/tests/config.php');
- $this->config['google']['root'].='/'.$id;//make sure we have an new empty folder to work in
- $this->instance=new OC_Filestorage_Google($this->config['google']);
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if (!is_array($this->config) or !isset($this->config['google']) or !$this->config['google']['run']) {
+ $this->markTestSkipped('Google backend not configured');
}
+ $this->config['google']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new OC_Filestorage_Google($this->config['google']);
+ }
- public function tearDown() {
+ public function tearDown() {
+ if ($this->instance) {
$this->instance->rmdir('/');
}
}
diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/smb.php
index 7de4fddbb34..2c03ef5dbd0 100644
--- a/apps/files_external/tests/smb.php
+++ b/apps/files_external/tests/smb.php
@@ -6,23 +6,21 @@
* See the COPYING-README file.
*/
-$config=include('apps/files_external/tests/config.php');
+class Test_Filestorage_SMB extends Test_FileStorage {
+ private $config;
-if(!is_array($config) or !isset($config['smb']) or !$config['smb']['run']) {
- abstract class Test_Filestorage_SMB extends Test_FileStorage{}
- return;
-}else{
- class Test_Filestorage_SMB extends Test_FileStorage {
- private $config;
-
- public function setUp() {
- $id=uniqid();
- $this->config=include('apps/files_external/tests/config.php');
- $this->config['smb']['root'].=$id;//make sure we have an new empty folder to work in
- $this->instance=new OC_Filestorage_SMB($this->config['smb']);
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if (!is_array($this->config) or !isset($this->config['smb']) or !$this->config['smb']['run']) {
+ $this->markTestSkipped('Samba backend not configured');
}
+ $this->config['smb']['root'] .= $id; //make sure we have an new empty folder to work in
+ $this->instance = new OC_Filestorage_SMB($this->config['smb']);
+ }
- public function tearDown() {
+ public function tearDown() {
+ if ($this->instance) {
OCP\Files::rmdirr($this->instance->constructUrl(''));
}
}
diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php
index a6f5eace1c8..8cf2a3abc76 100644
--- a/apps/files_external/tests/swift.php
+++ b/apps/files_external/tests/swift.php
@@ -6,25 +6,23 @@
* See the COPYING-README file.
*/
-$config=include('apps/files_external/tests/config.php');
-if(!is_array($config) or !isset($config['swift']) or !$config['swift']['run']) {
- abstract class Test_Filestorage_SWIFT extends Test_FileStorage{}
- return;
-}else{
- class Test_Filestorage_SWIFT extends Test_FileStorage {
- private $config;
+class Test_Filestorage_SWIFT extends Test_FileStorage {
+ private $config;
- public function setUp() {
- $id=uniqid();
- $this->config=include('apps/files_external/tests/config.php');
- $this->config['swift']['root'].='/'.$id;//make sure we have an new empty folder to work in
- $this->instance=new OC_Filestorage_SWIFT($this->config['swift']);
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if (!is_array($this->config) or !isset($this->config['swift']) or !$this->config['swift']['run']) {
+ $this->markTestSkipped('OpenStack SWIFT backend not configured');
}
+ $this->config['swift']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new OC_Filestorage_SWIFT($this->config['swift']);
+ }
- public function tearDown() {
- $this->instance->rmdir('');
+ public function tearDown() {
+ if ($this->instance) {
+ $this->instance->rmdir('');
}
-
}
}
diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php
index 74d980aa3f1..2da88f63edd 100644
--- a/apps/files_external/tests/webdav.php
+++ b/apps/files_external/tests/webdav.php
@@ -6,22 +6,21 @@
* See the COPYING-README file.
*/
-$config=include('apps/files_external/tests/config.php');
-if(!is_array($config) or !isset($config['webdav']) or !$config['webdav']['run']) {
- abstract class Test_Filestorage_DAV extends Test_FileStorage{}
- return;
-}else{
- class Test_Filestorage_DAV extends Test_FileStorage {
- private $config;
+class Test_Filestorage_DAV extends Test_FileStorage {
+ private $config;
- public function setUp() {
- $id=uniqid();
- $this->config=include('apps/files_external/tests/config.php');
- $this->config['webdav']['root'].='/'.$id;//make sure we have an new empty folder to work in
- $this->instance=new OC_Filestorage_DAV($this->config['webdav']);
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if (!is_array($this->config) or !isset($this->config['webdav']) or !$this->config['webdav']['run']) {
+ $this->markTestSkipped('WebDAV backend not configured');
}
+ $this->config['webdav']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new OC_Filestorage_DAV($this->config['webdav']);
+ }
- public function tearDown() {
+ public function tearDown() {
+ if ($this->instance) {
$this->instance->rmdir('/');
}
}
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index 6a8fc89adae..a44d0338bb6 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>File sharing between users</description>
<licence>AGPL</licence>
<author>Michael Gapczynski</author>
- <require>4</require>
+ <require>4.9</require>
<shipped>true</shipped>
<default_enable/>
<types>
diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php
index eabd1167c97..e75c538b150 100644
--- a/apps/files_sharing/appinfo/update.php
+++ b/apps/files_sharing/appinfo/update.php
@@ -1,9 +1,14 @@
<?php
$installedVersion = OCP\Config::getAppValue('files_sharing', 'installed_version');
if (version_compare($installedVersion, '0.3', '<')) {
+ $update_error = false;
$query = OCP\DB::prepare('SELECT * FROM `*PREFIX*sharing`');
$result = $query->execute();
$groupShares = array();
+ //we need to set up user backends, otherwise creating the shares will fail with "because user does not exist"
+ OC_User::useBackend(new OC_User_Database());
+ OC_Group::useBackend(new OC_Group_Database());
+ OC_App::loadApps(array('authentication'));
while ($row = $result->fetchRow()) {
$itemSource = OC_FileCache::getId($row['source'], '');
if ($itemSource != -1) {
@@ -14,9 +19,9 @@ if (version_compare($installedVersion, '0.3', '<')) {
$itemType = 'file';
}
if ($row['permissions'] == 0) {
- $permissions = OCP\Share::PERMISSION_READ;
+ $permissions = OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE;
} else {
- $permissions = OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE;
+ $permissions = OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_SHARE;
if ($itemType == 'folder') {
$permissions |= OCP\Share::PERMISSION_CREATE;
}
@@ -38,10 +43,31 @@ if (version_compare($installedVersion, '0.3', '<')) {
$shareWith = $row['uid_shared_with'];
}
OC_User::setUserId($row['uid_owner']);
- OCP\Share::shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions);
+ //we need to setup the filesystem for the user, otherwise OC_FileSystem::getRoot will fail and break
+ OC_Util::setupFS($row['uid_owner']);
+ try {
+ OCP\Share::shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions);
+ }
+ catch (Exception $e) {
+ $update_error = true;
+ OCP\Util::writeLog('files_sharing', 'Upgrade Routine: Skipping sharing "'.$row['source'].'" to "'.$shareWith.'" (error is "'.$e->getMessage().'")', OCP\Util::WARN);
+ }
+ OC_Util::tearDownFS();
}
}
+ OC_User::setUserId(null);
+ if ($update_error) {
+ OCP\Util::writeLog('files_sharing', 'There were some problems upgrading the sharing of files', OCP\Util::ERROR);
+ }
// NOTE: Let's drop the table after more testing
// $query = OCP\DB::prepare('DROP TABLE `*PREFIX*sharing`');
// $query->execute();
+}
+if (version_compare($installedVersion, '0.3.3', '<')) {
+ OC_User::useBackend(new OC_User_Database());
+ OC_App::loadApps(array('authentication'));
+ $users = OC_User::getUsers();
+ foreach ($users as $user) {
+ OC_FileCache::delete('Shared', '/'.$user.'/files/');
+ }
} \ No newline at end of file
diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version
index 9fc80f937fa..87a0871112f 100644
--- a/apps/files_sharing/appinfo/version
+++ b/apps/files_sharing/appinfo/version
@@ -1 +1 @@
-0.3.2 \ No newline at end of file
+0.3.3 \ No newline at end of file
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
index a700cc2169b..492014344f7 100644
--- a/apps/files_sharing/css/public.css
+++ b/apps/files_sharing/css/public.css
@@ -1,8 +1,70 @@
-body { background:#ddd; }
-#header { position:fixed; top:0; left:0; right:0; z-index:100; height:2.5em; line-height:2.5em; padding:.5em; background:#1d2d44; -moz-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; }
-#details { color:#fff; }
-#header #download { margin-left:2em; font-weight:bold; color:#fff; }
-#preview { min-height:30em; margin:50px auto; padding-top:2em; border-bottom:1px solid #f8f8f8; background:#eee; text-align:center; }
-#noPreview { display:none; padding-top:5em; }
-p.info { width:22em; text-align: center; margin:2em auto; color:#777; text-shadow:#fff 0 1px 0; }
-p.info a { font-weight:bold; color:#777; } \ No newline at end of file
+body {
+ background:#ddd;
+}
+
+#header {
+ background:#1d2d44;
+ box-shadow:0 0 10px rgba(0,0,0,.5), inset 0 -2px 10px #222;
+ height:2.5em;
+ left:0;
+ line-height:2.5em;
+ position:fixed;
+ right:0;
+ top:0;
+ z-index:100;
+ padding:.5em;
+}
+
+#details {
+ color:#fff;
+}
+
+#header #download {
+ font-weight:700;
+ margin-left:2em;
+}
+
+#header #download img {
+ padding-left:.1em;
+ padding-right:.3em;
+ vertical-align:text-bottom;
+}
+
+#preview {
+ background:#eee;
+ border-bottom:1px solid #f8f8f8;
+ min-height:30em;
+ padding-top:2em;
+ text-align:center;
+ margin:50px auto;
+}
+
+#noPreview {
+ display:none;
+ padding-top:5em;
+}
+
+p.info {
+ color:#777;
+ text-align:center;
+ text-shadow:#fff 0 1px 0;
+ width:22em;
+ margin:2em auto;
+}
+
+p.info a {
+ color:#777;
+ font-weight:700;
+}
+
+#imgframe {
+ height:75%;
+ padding-bottom:2em;
+ width:80%;
+ margin:0 auto;
+}
+
+#imgframe img {
+ max-height:100%;
+ max-width:100%;
+} \ No newline at end of file
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 92b626bba18..916e35419c1 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -1,6 +1,10 @@
// Override download path to files_sharing/public.php
function fileDownloadPath(dir, file) {
- return $('#downloadURL').val();
+ var url = $('#downloadURL').val();
+ if (url.indexOf('&path=') != -1) {
+ url += '/'+file;
+ }
+ return url;
}
$(document).ready(function() {
@@ -13,10 +17,33 @@ $(document).ready(function() {
var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ);
if (typeof action === 'undefined') {
$('#noPreview').show();
+ if (mimetype != 'httpd/unix-directory') {
+ // NOTE: Remove when a better file previewer solution exists
+ $('#content').remove();
+ $('table').remove();
+ }
} else {
action($('#filename').val());
}
}
+ FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename) {
+ var tr = $('tr').filterAttr('data-file', filename)
+ if (tr.length > 0) {
+ window.location = $(tr).find('a.name').attr('href');
+ }
+ });
+ FileActions.register('file', 'Download', OC.PERMISSION_READ, '', function(filename) {
+ var tr = $('tr').filterAttr('data-file', filename)
+ if (tr.length > 0) {
+ window.location = $(tr).find('a.name').attr('href');
+ }
+ });
+ FileActions.register('dir', 'Download', OC.PERMISSION_READ, '', function(filename) {
+ var tr = $('tr').filterAttr('data-file', filename)
+ if (tr.length > 0) {
+ window.location = $(tr).find('a.name').attr('href')+'&download';
+ }
+ });
}
}); \ No newline at end of file
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index 9d0e2c90f88..72663c068c9 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -1,6 +1,6 @@
$(document).ready(function() {
- if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined') {
+ if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined' && !publicListView) {
OC.Share.loadIcons('file');
FileActions.register('all', 'Share', OC.PERMISSION_READ, function(filename) {
// Return the correct sharing icon
@@ -39,26 +39,24 @@ $(document).ready(function() {
var tr = $('tr').filterAttr('data-file', filename);
if ($(tr).data('type') == 'dir') {
var itemType = 'folder';
- var link = false;
} else {
var itemType = 'file';
- var link = true;
}
var possiblePermissions = $(tr).data('permissions');
var appendTo = $(tr).find('td.filename');
// Check if drop down is already visible for a different file
if (OC.Share.droppedDown) {
- if (item != $('#dropdown').data('item')) {
+ if ($(tr).data('id') != $('#dropdown').attr('data-item-source')) {
OC.Share.hideDropDown(function () {
$(tr).addClass('mouseOver');
- OC.Share.showDropDown(itemType, $(tr).data('id'), appendTo, link, possiblePermissions);
+ OC.Share.showDropDown(itemType, $(tr).data('id'), appendTo, true, possiblePermissions);
});
} else {
OC.Share.hideDropDown();
}
} else {
$(tr).addClass('mouseOver');
- OC.Share.showDropDown(itemType, $(tr).data('id'), appendTo, link, possiblePermissions);
+ OC.Share.showDropDown(itemType, $(tr).data('id'), appendTo, true, possiblePermissions);
}
});
}
diff --git a/apps/files_sharing/l10n/ca.php b/apps/files_sharing/l10n/ca.php
index f00d0d72632..223495455f0 100644
--- a/apps/files_sharing/l10n/ca.php
+++ b/apps/files_sharing/l10n/ca.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Contrasenya",
"Submit" => "Envia",
+"%s shared the folder %s with you" => "%s ha compartit la carpeta %s amb vós",
+"%s shared the file %s with you" => "%s ha compartit el fitxer %s amb vós",
"Download" => "Baixa",
"No preview available for" => "No hi ha vista prèvia disponible per a",
"web services under your control" => "controleu els vostres serveis web"
diff --git a/apps/files_sharing/l10n/cs_CZ.php b/apps/files_sharing/l10n/cs_CZ.php
index e9185e979cd..9889fae488a 100644
--- a/apps/files_sharing/l10n/cs_CZ.php
+++ b/apps/files_sharing/l10n/cs_CZ.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Heslo",
"Submit" => "Odeslat",
+"%s shared the folder %s with you" => "%s s Vámi sdílí složku %s",
+"%s shared the file %s with you" => "%s s Vámi sdílí soubor %s",
"Download" => "Stáhnout",
"No preview available for" => "Náhled není dostupný pro",
"web services under your control" => "služby webu pod Vaší kontrolou"
diff --git a/apps/files_sharing/l10n/da.php b/apps/files_sharing/l10n/da.php
index 1fd9f774a96..75fbdabe16f 100644
--- a/apps/files_sharing/l10n/da.php
+++ b/apps/files_sharing/l10n/da.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Kodeord",
"Submit" => "Send",
+"%s shared the folder %s with you" => "%s delte mappen %s med dig",
+"%s shared the file %s with you" => "%s delte filen %s med dig",
"Download" => "Download",
"No preview available for" => "Forhåndsvisning ikke tilgængelig for",
"web services under your control" => "Webtjenester under din kontrol"
diff --git a/apps/files_sharing/l10n/de.php b/apps/files_sharing/l10n/de.php
index 90dce8ec623..7f4cbb1adad 100644
--- a/apps/files_sharing/l10n/de.php
+++ b/apps/files_sharing/l10n/de.php
@@ -1,7 +1,9 @@
<?php $TRANSLATIONS = array(
"Password" => "Passwort",
"Submit" => "Absenden",
+"%s shared the folder %s with you" => "%s hat den Ordner %s mit Dir geteilt",
+"%s shared the file %s with you" => "%s hat die Datei %s mit Dir geteilt",
"Download" => "Download",
"No preview available for" => "Es ist keine Vorschau verfügbar für",
-"web services under your control" => "Web-Services unter Ihrer Kontrolle"
+"web services under your control" => "Web-Services unter Deiner Kontrolle"
);
diff --git a/apps/files_sharing/l10n/de_DE.php b/apps/files_sharing/l10n/de_DE.php
new file mode 100644
index 00000000000..b92d6d478c9
--- /dev/null
+++ b/apps/files_sharing/l10n/de_DE.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Passwort",
+"Submit" => "Absenden",
+"%s shared the folder %s with you" => "%s hat den Ordner %s mit Ihnen geteilt",
+"%s shared the file %s with you" => "%s hat die Datei %s mit Ihnen geteilt",
+"Download" => "Download",
+"No preview available for" => "Es ist keine Vorschau verfügbar für",
+"web services under your control" => "Web-Services unter Ihrer Kontrolle"
+);
diff --git a/apps/files_sharing/l10n/el.php b/apps/files_sharing/l10n/el.php
index 123a008e554..5305eedd484 100644
--- a/apps/files_sharing/l10n/el.php
+++ b/apps/files_sharing/l10n/el.php
@@ -1,4 +1,9 @@
<?php $TRANSLATIONS = array(
"Password" => "Συνθηματικό",
-"Submit" => "Καταχώρηση"
+"Submit" => "Καταχώρηση",
+"%s shared the folder %s with you" => "%s μοιράστηκε τον φάκελο %s μαζί σας",
+"%s shared the file %s with you" => "%s μοιράστηκε το αρχείο %s μαζί σας",
+"Download" => "Λήψη",
+"No preview available for" => "Δεν υπάρχει διαθέσιμη προεπισκόπηση για",
+"web services under your control" => "υπηρεσίες δικτύου υπό τον έλεγχό σας"
);
diff --git a/apps/files_sharing/l10n/eo.php b/apps/files_sharing/l10n/eo.php
index e71715f0f1f..c598d3aa2c4 100644
--- a/apps/files_sharing/l10n/eo.php
+++ b/apps/files_sharing/l10n/eo.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Pasvorto",
"Submit" => "Sendi",
+"%s shared the folder %s with you" => "%s kunhavigis la dosierujon %s kun vi",
+"%s shared the file %s with you" => "%s kunhavigis la dosieron %s kun vi",
"Download" => "Elŝuti",
"No preview available for" => "Ne haveblas antaŭvido por",
"web services under your control" => "TTT-servoj regataj de vi"
diff --git a/apps/files_sharing/l10n/es.php b/apps/files_sharing/l10n/es.php
index b1d44e5485e..2023d35903e 100644
--- a/apps/files_sharing/l10n/es.php
+++ b/apps/files_sharing/l10n/es.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Contraseña",
"Submit" => "Enviar",
+"%s shared the folder %s with you" => "%s compartió la carpeta %s contigo",
+"%s shared the file %s with you" => "%s compartió el fichero %s contigo",
"Download" => "Descargar",
"No preview available for" => "No hay vista previa disponible para",
"web services under your control" => "Servicios web bajo su control"
diff --git a/apps/files_sharing/l10n/es_AR.php b/apps/files_sharing/l10n/es_AR.php
new file mode 100644
index 00000000000..a2d6e232f20
--- /dev/null
+++ b/apps/files_sharing/l10n/es_AR.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Contraseña",
+"Submit" => "Enviar",
+"%s shared the folder %s with you" => "%s compartió la carpeta %s con vos",
+"%s shared the file %s with you" => "%s compartió el archivo %s con vos",
+"Download" => "Descargar",
+"No preview available for" => "La vista preliminar no está disponible para",
+"web services under your control" => "servicios web controlados por vos"
+);
diff --git a/apps/files_sharing/l10n/eu.php b/apps/files_sharing/l10n/eu.php
index 70ff2e8876c..ebef0f445ed 100644
--- a/apps/files_sharing/l10n/eu.php
+++ b/apps/files_sharing/l10n/eu.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Pasahitza",
"Submit" => "Bidali",
+"%s shared the folder %s with you" => "%sk zurekin %s karpeta elkarbanatu du",
+"%s shared the file %s with you" => "%sk zurekin %s fitxategia elkarbanatu du",
"Download" => "Deskargatu",
"No preview available for" => "Ez dago aurrebista eskuragarririk hauentzat ",
"web services under your control" => "web zerbitzuak zure kontrolpean"
diff --git a/apps/files_sharing/l10n/fi_FI.php b/apps/files_sharing/l10n/fi_FI.php
index 85c6c7a7132..6c441342133 100644
--- a/apps/files_sharing/l10n/fi_FI.php
+++ b/apps/files_sharing/l10n/fi_FI.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Salasana",
"Submit" => "Lähetä",
+"%s shared the folder %s with you" => "%s jakoi kansion %s kanssasi",
+"%s shared the file %s with you" => "%s jakoi tiedoston %s kanssasi",
"Download" => "Lataa",
"No preview available for" => "Ei esikatselua kohteelle",
"web services under your control" => "verkkopalvelut hallinnassasi"
diff --git a/apps/files_sharing/l10n/fr.php b/apps/files_sharing/l10n/fr.php
index 54d9e9ec567..1038d819330 100644
--- a/apps/files_sharing/l10n/fr.php
+++ b/apps/files_sharing/l10n/fr.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Mot de passe",
"Submit" => "Envoyer",
+"%s shared the folder %s with you" => "%s a partagé le répertoire %s avec vous",
+"%s shared the file %s with you" => "%s a partagé le fichier %s avec vous",
"Download" => "Télécharger",
"No preview available for" => "Pas d'aperçu disponible pour",
"web services under your control" => "services web sous votre contrôle"
diff --git a/apps/files_sharing/l10n/gl.php b/apps/files_sharing/l10n/gl.php
new file mode 100644
index 00000000000..c9644d720e3
--- /dev/null
+++ b/apps/files_sharing/l10n/gl.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Contrasinal",
+"Submit" => "Enviar",
+"Download" => "Baixar",
+"No preview available for" => "Sen vista previa dispoñible para ",
+"web services under your control" => "servizos web baixo o seu control"
+);
diff --git a/apps/files_sharing/l10n/he.php b/apps/files_sharing/l10n/he.php
index 68a337241da..ff7be88af87 100644
--- a/apps/files_sharing/l10n/he.php
+++ b/apps/files_sharing/l10n/he.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "ססמה",
"Submit" => "שליחה",
+"%s shared the folder %s with you" => "%s שיתף עמך את התיקייה %s",
+"%s shared the file %s with you" => "%s שיתף עמך את הקובץ %s",
"Download" => "הורדה",
"No preview available for" => "אין תצוגה מקדימה זמינה עבור",
"web services under your control" => "שירותי רשת תחת השליטה שלך"
diff --git a/apps/files_sharing/l10n/id.php b/apps/files_sharing/l10n/id.php
new file mode 100644
index 00000000000..8897269d989
--- /dev/null
+++ b/apps/files_sharing/l10n/id.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "kata kunci",
+"Submit" => "kirim",
+"%s shared the folder %s with you" => "%s membagikan folder %s dengan anda",
+"%s shared the file %s with you" => "%s membagikan file %s dengan anda",
+"Download" => "unduh",
+"No preview available for" => "tidak ada pratinjau tersedia untuk",
+"web services under your control" => "servis web dibawah kendali anda"
+);
diff --git a/apps/files_sharing/l10n/it.php b/apps/files_sharing/l10n/it.php
index 5bedabde9bb..f83ca1446d6 100644
--- a/apps/files_sharing/l10n/it.php
+++ b/apps/files_sharing/l10n/it.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Password",
"Submit" => "Invia",
+"%s shared the folder %s with you" => "%s ha condiviso la cartella %s con te",
+"%s shared the file %s with you" => "%s ha condiviso il file %s con te",
"Download" => "Scarica",
"No preview available for" => "Nessuna anteprima disponibile per",
"web services under your control" => "servizi web nelle tue mani"
diff --git a/apps/files_sharing/l10n/ja_JP.php b/apps/files_sharing/l10n/ja_JP.php
index 5d63f371d56..02142e2879a 100644
--- a/apps/files_sharing/l10n/ja_JP.php
+++ b/apps/files_sharing/l10n/ja_JP.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "パスワード",
"Submit" => "送信",
+"%s shared the folder %s with you" => "%s はフォルダー %s をあなたと共有中です",
+"%s shared the file %s with you" => "%s はファイル %s をあなたと共有中です",
"Download" => "ダウンロード",
"No preview available for" => "プレビューはありません",
"web services under your control" => "管理下のウェブサービス"
diff --git a/apps/files_sharing/l10n/ka_GE.php b/apps/files_sharing/l10n/ka_GE.php
new file mode 100644
index 00000000000..ef42196d2cb
--- /dev/null
+++ b/apps/files_sharing/l10n/ka_GE.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Password" => "პაროლი",
+"Submit" => "გაგზავნა",
+"Download" => "ჩამოტვირთვა",
+"web services under your control" => "web services under your control"
+);
diff --git a/apps/files_sharing/l10n/ku_IQ.php b/apps/files_sharing/l10n/ku_IQ.php
new file mode 100644
index 00000000000..f139b0a0643
--- /dev/null
+++ b/apps/files_sharing/l10n/ku_IQ.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "تێپه‌ڕه‌وشه",
+"Submit" => "ناردن",
+"%s shared the folder %s with you" => "%s دابه‌شی کردووه‌ بوخچه‌ی %s له‌گه‌ڵ تۆ",
+"%s shared the file %s with you" => "%s دابه‌شی کردووه‌ په‌ڕگه‌یی %s له‌گه‌ڵ تۆ",
+"Download" => "داگرتن",
+"No preview available for" => "هیچ پێشبینیه‌ك ئاماده‌ نیه بۆ",
+"web services under your control" => "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه"
+);
diff --git a/apps/files_sharing/l10n/nl.php b/apps/files_sharing/l10n/nl.php
index 2f732ed662f..2cef0254398 100644
--- a/apps/files_sharing/l10n/nl.php
+++ b/apps/files_sharing/l10n/nl.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Wachtwoord",
"Submit" => "Verzenden",
+"%s shared the folder %s with you" => "%s deelt de map %s met u",
+"%s shared the file %s with you" => "%s deelt het bestand %s met u",
"Download" => "Downloaden",
"No preview available for" => "Geen voorbeeldweergave beschikbaar voor",
"web services under your control" => "Webdiensten in eigen beheer"
diff --git a/apps/files_sharing/l10n/pl.php b/apps/files_sharing/l10n/pl.php
index 1d5e6261ef0..9db5e87c9ba 100644
--- a/apps/files_sharing/l10n/pl.php
+++ b/apps/files_sharing/l10n/pl.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Hasło",
"Submit" => "Wyślij",
+"%s shared the folder %s with you" => "%s współdzieli folder z tobą %s",
+"%s shared the file %s with you" => "%s współdzieli z tobą plik %s",
"Download" => "Pobierz",
"No preview available for" => "Podgląd nie jest dostępny dla",
"web services under your control" => "Kontrolowane serwisy"
diff --git a/apps/files_sharing/l10n/pt_BR.php b/apps/files_sharing/l10n/pt_BR.php
new file mode 100644
index 00000000000..4dde4bb5ad5
--- /dev/null
+++ b/apps/files_sharing/l10n/pt_BR.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Senha",
+"Submit" => "Submeter",
+"%s shared the folder %s with you" => "%s compartilhou a pasta %s com você",
+"%s shared the file %s with you" => "%s compartilhou o arquivo %s com você",
+"Download" => "Baixar",
+"No preview available for" => "Nenhuma visualização disponível para",
+"web services under your control" => "web services sob seu controle"
+);
diff --git a/apps/files_sharing/l10n/pt_PT.php b/apps/files_sharing/l10n/pt_PT.php
new file mode 100644
index 00000000000..b8e700e3802
--- /dev/null
+++ b/apps/files_sharing/l10n/pt_PT.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Palavra-Passe",
+"Submit" => "Submeter",
+"%s shared the folder %s with you" => "%s partilhou a pasta %s consigo",
+"%s shared the file %s with you" => "%s partilhou o ficheiro %s consigo",
+"Download" => "Descarregar",
+"No preview available for" => "Não há pré-visualização para",
+"web services under your control" => "serviços web sob o seu controlo"
+);
diff --git a/apps/files_sharing/l10n/ro.php b/apps/files_sharing/l10n/ro.php
new file mode 100644
index 00000000000..eb9977dc585
--- /dev/null
+++ b/apps/files_sharing/l10n/ro.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Parolă",
+"Submit" => "Trimite",
+"%s shared the folder %s with you" => "%s a partajat directorul %s cu tine",
+"%s shared the file %s with you" => "%s a partajat fișierul %s cu tine",
+"Download" => "Descarcă",
+"No preview available for" => "Nici o previzualizare disponibilă pentru ",
+"web services under your control" => "servicii web controlate de tine"
+);
diff --git a/apps/files_sharing/l10n/ru.php b/apps/files_sharing/l10n/ru.php
index 398d9a8bbc3..7fd116e0aae 100644
--- a/apps/files_sharing/l10n/ru.php
+++ b/apps/files_sharing/l10n/ru.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Пароль",
"Submit" => "Отправить",
+"%s shared the folder %s with you" => "%s открыл доступ к папке %s для Вас",
+"%s shared the file %s with you" => "%s открыл доступ к файлу %s для Вас",
"Download" => "Скачать",
"No preview available for" => "Предпросмотр недоступен для",
"web services under your control" => "веб-сервисы под вашим управлением"
diff --git a/apps/files_sharing/l10n/ru_RU.php b/apps/files_sharing/l10n/ru_RU.php
new file mode 100644
index 00000000000..36e4b2fd0e1
--- /dev/null
+++ b/apps/files_sharing/l10n/ru_RU.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Пароль",
+"Submit" => "Передать",
+"%s shared the folder %s with you" => "%s имеет общий с Вами доступ к папке %s ",
+"%s shared the file %s with you" => "%s имеет общий с Вами доступ к файлу %s ",
+"Download" => "Загрузка",
+"No preview available for" => "Предварительный просмотр недоступен",
+"web services under your control" => "веб-сервисы под Вашим контролем"
+);
diff --git a/apps/files_sharing/l10n/si_LK.php b/apps/files_sharing/l10n/si_LK.php
new file mode 100644
index 00000000000..1c69c608178
--- /dev/null
+++ b/apps/files_sharing/l10n/si_LK.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "මුරපදය",
+"Submit" => "යොමු කරන්න",
+"%s shared the folder %s with you" => "%s ඔබව %s ෆෝල්ඩරයට හවුල් කරගත්තේය",
+"%s shared the file %s with you" => "%s ඔබ සමඟ %s ගොනුව බෙදාහදාගත්තේය",
+"Download" => "භාගත කරන්න",
+"No preview available for" => "පූර්වදර්ශනයක් නොමැත",
+"web services under your control" => "ඔබට පාලනය කළ හැකි වෙබ් සේවාවන්"
+);
diff --git a/apps/files_sharing/l10n/sk_SK.php b/apps/files_sharing/l10n/sk_SK.php
index ec9fc31c878..2e781f76f38 100644
--- a/apps/files_sharing/l10n/sk_SK.php
+++ b/apps/files_sharing/l10n/sk_SK.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Heslo",
"Submit" => "Odoslať",
+"%s shared the folder %s with you" => "%s zdieľa s vami priečinok %s",
+"%s shared the file %s with you" => "%s zdieľa s vami súbor %s",
"Download" => "Stiahnuť",
"No preview available for" => "Žiaden náhľad k dispozícii pre",
"web services under your control" => "webové služby pod Vašou kontrolou"
diff --git a/apps/files_sharing/l10n/sl.php b/apps/files_sharing/l10n/sl.php
index 5e7d2d5004b..6bcbb0070b3 100644
--- a/apps/files_sharing/l10n/sl.php
+++ b/apps/files_sharing/l10n/sl.php
@@ -1,7 +1,9 @@
<?php $TRANSLATIONS = array(
"Password" => "Geslo",
"Submit" => "Pošlji",
-"Download" => "Prenesi",
+"%s shared the folder %s with you" => "Oseba %s je določila mapo %s za souporabo",
+"%s shared the file %s with you" => "Oseba %s je določila datoteko %s za souporabo",
+"Download" => "Prejmi",
"No preview available for" => "Predogled ni na voljo za",
"web services under your control" => "spletne storitve pod vašim nadzorom"
);
diff --git a/apps/files_sharing/l10n/sv.php b/apps/files_sharing/l10n/sv.php
index 78b19836497..d1c9afff07c 100644
--- a/apps/files_sharing/l10n/sv.php
+++ b/apps/files_sharing/l10n/sv.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Lösenord",
"Submit" => "Skicka",
+"%s shared the folder %s with you" => "%s delade mappen %s med dig",
+"%s shared the file %s with you" => "%s delade filen %s med dig",
"Download" => "Ladda ner",
"No preview available for" => "Ingen förhandsgranskning tillgänglig för",
"web services under your control" => "webbtjänster under din kontroll"
diff --git a/apps/files_sharing/l10n/th_TH.php b/apps/files_sharing/l10n/th_TH.php
index 8a3f1207db4..9d53d65f8ab 100644
--- a/apps/files_sharing/l10n/th_TH.php
+++ b/apps/files_sharing/l10n/th_TH.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "รหัสผ่าน",
"Submit" => "ส่ง",
+"%s shared the folder %s with you" => "%s ได้แชร์โฟลเดอร์ %s ให้กับคุณ",
+"%s shared the file %s with you" => "%s ได้แชร์ไฟล์ %s ให้กับคุณ",
"Download" => "ดาวน์โหลด",
"No preview available for" => "ไม่สามารถดูตัวอย่างได้สำหรับ",
"web services under your control" => "เว็บเซอร์วิสที่คุณควบคุมการใช้งานได้"
diff --git a/apps/files_sharing/l10n/vi.php b/apps/files_sharing/l10n/vi.php
index d4faee06bf2..6a36f11899e 100644
--- a/apps/files_sharing/l10n/vi.php
+++ b/apps/files_sharing/l10n/vi.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Password" => "Mật khẩu",
"Submit" => "Xác nhận",
+"%s shared the folder %s with you" => "%s đã chia sẽ thư mục %s với bạn",
+"%s shared the file %s with you" => "%s đã chia sẽ tập tin %s với bạn",
"Download" => "Tải về",
"No preview available for" => "Không có xem trước cho",
"web services under your control" => "dịch vụ web dưới sự kiểm soát của bạn"
diff --git a/apps/files_sharing/l10n/zh_CN.GB2312.php b/apps/files_sharing/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..117ec8f4065
--- /dev/null
+++ b/apps/files_sharing/l10n/zh_CN.GB2312.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "密码",
+"Submit" => "提交",
+"%s shared the folder %s with you" => "%s 与您分享了文件夹 %s",
+"%s shared the file %s with you" => "%s 与您分享了文件 %s",
+"Download" => "下载",
+"No preview available for" => "没有预览可用于",
+"web services under your control" => "您控制的网络服务"
+);
diff --git a/apps/files_sharing/l10n/zh_CN.php b/apps/files_sharing/l10n/zh_CN.php
new file mode 100644
index 00000000000..64e7af3e0cd
--- /dev/null
+++ b/apps/files_sharing/l10n/zh_CN.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "密码",
+"Submit" => "提交",
+"%s shared the folder %s with you" => "%s与您共享了%s文件夹",
+"%s shared the file %s with you" => "%s与您共享了%s文件",
+"Download" => "下载",
+"No preview available for" => "没有预览",
+"web services under your control" => "您控制的web服务"
+);
diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php
index 2149da1d731..9a880505926 100644
--- a/apps/files_sharing/lib/share/file.php
+++ b/apps/files_sharing/lib/share/file.php
@@ -47,13 +47,13 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
}
public function generateTarget($filePath, $shareWith, $exclude = null) {
- $target = $filePath;
+ $target = '/'.basename($filePath);
if (isset($exclude)) {
if ($pos = strrpos($target, '.')) {
$name = substr($target, 0, $pos);
$ext = substr($target, $pos);
} else {
- $name = $filePath;
+ $name = $target;
$ext = '';
}
$i = 2;
@@ -72,8 +72,16 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
// Only 1 item should come through for this format call
return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions']);
} else if ($format == self::FORMAT_FILE_APP) {
+ if (isset($parameters['mimetype_filter']) && $parameters['mimetype_filter']) {
+ $mimetype_filter = $parameters['mimetype_filter'];
+ }
$files = array();
foreach ($items as $item) {
+ if (isset($mimetype_filter)
+ && strpos($item['mimetype'], $mimetype_filter) !== 0
+ && $item['mimetype'] != 'httpd/unix-directory') {
+ continue;
+ }
$file = array();
$file['id'] = $item['file_source'];
$file['path'] = $item['file_target'];
@@ -116,4 +124,4 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
return array();
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php
index e29e9b7e002..bddda99f8bb 100644
--- a/apps/files_sharing/lib/share/folder.php
+++ b/apps/files_sharing/lib/share/folder.php
@@ -59,7 +59,7 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share
$parents = array();
while ($file = $result->fetchRow()) {
$children[] = array('source' => $file['id'], 'file_path' => $file['name']);
- // If a child folder is found look inside it
+ // If a child folder is found look inside it
if ($file['mimetype'] == 'httpd/unix-directory') {
$parents[] = $file['id'];
}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 6dba76955a0..7271dcc930b 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -108,6 +108,14 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
return $internalPath;
}
+ public function getOwner($target) {
+ $shared_item = OCP\Share::getItemSharedWith('folder', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ if ($shared_item) {
+ return $shared_item[0]["uid_owner"];
+ }
+ return null;
+ }
+
public function mkdir($path) {
if ($path == '' || $path == '/' || !$this->isCreatable(dirname($path))) {
return false;
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 010f6b9de18..105e94f1140 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -1,74 +1,223 @@
-<?php
-// Load other apps for file previews
-OC_App::loadApps();
-if (isset($_GET['file'])) {
- $pos = strpos($_GET['file'], '/', 1);
- $uidOwner = substr($_GET['file'], 1, $pos - 1);
- if (OCP\User::userExists($uidOwner)) {
- OC_Util::setupFS($uidOwner);
- $fileSource = OC_Filecache::getId($_GET['file'], '');
- if ($fileSource != -1 && ($linkItem = OCP\Share::getItemSharedWithByLink('file', $fileSource, $uidOwner))) {
- if (isset($linkItem['share_with'])) {
- // Check password
- if (isset($_POST['password'])) {
- $password = $_POST['password'];
- $storedHash = $linkItem['share_with'];
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new PasswordHash(8, $forcePortable);
- if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''), $storedHash))) {
- $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
- $tmpl->assign('URL', OCP\Util::linkToPublic('files').'&file='.$_GET['file']);
- $tmpl->assign('error', true);
- $tmpl->printPage();
- exit();
- } else {
- // Save item id in session for future requests
- $_SESSION['public_link_authenticated'] = $linkItem['id'];
- }
- // Check if item id is set in session
- } else if (!isset($_SESSION['public_link_authenticated']) || $_SESSION['public_link_authenticated'] !== $linkItem['id']) {
- // Prompt for password
- $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
- $tmpl->assign('URL', OCP\Util::linkToPublic('files').'&file='.$_GET['file']);
- $tmpl->printPage();
- exit();
- }
- }
- $path = $linkItem['path'];
- // Download the file
- if (isset($_GET['download'])) {
- $mimetype = OC_Filesystem::getMimeType($path);
- header('Content-Transfer-Encoding: binary');
- header('Content-Disposition: attachment; filename="'.basename($path).'"');
- header('Content-Type: '.$mimetype);
- header('Content-Length: '.OC_Filesystem::filesize($path));
- OCP\Response::disableCaching();
- @ob_clean();
- OC_Filesystem::readfile($path);
- } else {
- OCP\Util::addStyle('files_sharing', 'public');
- OCP\Util::addScript('files_sharing', 'public');
- OCP\Util::addScript('files', 'fileactions');
- $tmpl = new OCP\Template('files_sharing', 'public', 'base');
- $tmpl->assign('details', $uidOwner.' shared the file '.basename($path).' with you');
- $tmpl->assign('owner', $uidOwner);
- $tmpl->assign('name', basename($path));
- // Show file list
- if (OC_Filesystem::is_dir($path)) {
- // TODO
- } else {
- // Show file preview if viewer is available
- $tmpl->assign('dir', dirname($path));
- $tmpl->assign('filename', basename($path));
- $tmpl->assign('mimetype', OC_Filesystem::getMimeType($path));
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').'&file='.$_GET['file'].'&download');
- }
- $tmpl->printPage();
- }
- exit();
- }
- }
-}
-header('HTTP/1.0 404 Not Found');
-$tmpl = new OCP\Template('', '404', 'guest');
-$tmpl->printPage();
+<?php
+// Load other apps for file previews
+OC_App::loadApps();
+
+// Compatibility with shared-by-link items from ownCloud 4.0
+// requires old Sharing table !
+// support will be removed in OC 5.0,a
+if (isset($_GET['token'])) {
+ unset($_GET['file']);
+ $qry = \OC_DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ? LIMIT 1');
+ $filepath = $qry->execute(array($_GET['token']))->fetchOne();
+ if(isset($filepath)) {
+ $info = OC_FileCache_Cached::get($filepath, '');
+ if(strtolower($info['mimetype']) == 'httpd/unix-directory') {
+ $_GET['dir'] = $filepath;
+ } else {
+ $_GET['file'] = $filepath;
+ }
+ \OCP\Util::writeLog('files_sharing', 'You have files that are shared by link originating from ownCloud 4.0. Redistribute the new links, because backwards compatibility will be removed in ownCloud 5.', \OCP\Util::WARN);
+ }
+}
+// Enf of backward compatibility
+
+function getID($path) {
+ // use the share table from the db to find the item source if the file was reshared because shared files
+ //are not stored in the file cache.
+ if (substr(OC_Filesystem::getMountPoint($path), -7, 6) == "Shared") {
+ $path_parts = explode('/', $path, 5);
+ $user = $path_parts[1];
+ $intPath = '/'.$path_parts[4];
+ $query = \OC_DB::prepare('SELECT item_source FROM *PREFIX*share WHERE uid_owner = ? AND file_target = ? ');
+ $result = $query->execute(array($user, $intPath));
+ $row = $result->fetchRow();
+ $fileSource = $row['item_source'];
+ } else {
+ $fileSource = OC_Filecache::getId($path, '');
+ }
+
+ return $fileSource;
+}
+
+if (isset($_GET['file']) || isset($_GET['dir'])) {
+ if (isset($_GET['dir'])) {
+ $type = 'folder';
+ $path = $_GET['dir'];
+ if(strlen($path)>1 and substr($path, -1, 1)==='/') {
+ $path=substr($path, 0, -1);
+ }
+ $baseDir = $path;
+ $dir = $baseDir;
+ } else {
+ $type = 'file';
+ $path = $_GET['file'];
+ if(strlen($path)>1 and substr($path, -1, 1)==='/') {
+ $path=substr($path, 0, -1);
+ }
+ }
+ $uidOwner = substr($path, 1, strpos($path, '/', 1) - 1);
+ if (OCP\User::userExists($uidOwner)) {
+ OC_Util::setupFS($uidOwner);
+ $fileSource = getId($path);
+ if ($fileSource != -1 && ($linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $uidOwner))) {
+ // TODO Fix in the getItems
+ if (!isset($linkItem['item_type']) || $linkItem['item_type'] != $type) {
+ header('HTTP/1.0 404 Not Found');
+ $tmpl = new OCP\Template('', '404', 'guest');
+ $tmpl->printPage();
+ exit();
+ }
+ if (isset($linkItem['share_with'])) {
+ // Check password
+ if (isset($_GET['file'])) {
+ $url = OCP\Util::linkToPublic('files').'&file='.$_GET['file'];
+ } else {
+ $url = OCP\Util::linkToPublic('files').'&dir='.$_GET['dir'];
+ }
+ if (isset($_POST['password'])) {
+ $password = $_POST['password'];
+ $storedHash = $linkItem['share_with'];
+ $forcePortable = (CRYPT_BLOWFISH != 1);
+ $hasher = new PasswordHash(8, $forcePortable);
+ if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''), $storedHash))) {
+ $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
+ $tmpl->assign('URL', $url);
+ $tmpl->assign('error', true);
+ $tmpl->printPage();
+ exit();
+ } else {
+ // Save item id in session for future requests
+ $_SESSION['public_link_authenticated'] = $linkItem['id'];
+ }
+ // Check if item id is set in session
+ } else if (!isset($_SESSION['public_link_authenticated']) || $_SESSION['public_link_authenticated'] !== $linkItem['id']) {
+ // Prompt for password
+ $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
+ $tmpl->assign('URL', $url);
+ $tmpl->printPage();
+ exit();
+ }
+ }
+ $path = $linkItem['path'];
+ if (isset($_GET['path'])) {
+ $path .= $_GET['path'];
+ $dir .= $_GET['path'];
+ if (!OC_Filesystem::file_exists($path)) {
+ header('HTTP/1.0 404 Not Found');
+ $tmpl = new OCP\Template('', '404', 'guest');
+ $tmpl->printPage();
+ exit();
+ }
+ }
+ // Download the file
+ if (isset($_GET['download'])) {
+ if (isset($_GET['dir'])) {
+ if ( isset($_GET['files']) ) { // download selected files
+ OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ } else if (isset($_GET['path']) && $_GET['path'] != '' ) { // download a file from a shared directory
+ OC_Files::get('', $path, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ } else { // download the whole shared directory
+ OC_Files::get($path, '', $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ }
+ } else { // download a single shared file
+ OC_Files::get("", $path, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ }
+
+ } else {
+ OCP\Util::addStyle('files_sharing', 'public');
+ OCP\Util::addScript('files_sharing', 'public');
+ OCP\Util::addScript('files', 'fileactions');
+ $tmpl = new OCP\Template('files_sharing', 'public', 'base');
+ $tmpl->assign('owner', $uidOwner);
+ // Show file list
+ if (OC_Filesystem::is_dir($path)) {
+ OCP\Util::addStyle('files', 'files');
+ OCP\Util::addScript('files', 'files');
+ OCP\Util::addScript('files', 'filelist');
+ $files = array();
+ $rootLength = strlen($baseDir) + 1;
+ foreach (OC_Files::getDirectoryContent($path) as $i) {
+ $i['date'] = OCP\Util::formatDate($i['mtime']);
+ if ($i['type'] == 'file') {
+ $fileinfo = pathinfo($i['name']);
+ $i['basename'] = $fileinfo['filename'];
+ $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
+ }
+ $i['directory'] = '/'.substr('/'.$uidOwner.'/files'.$i['directory'], $rootLength);
+ if ($i['directory'] == '/') {
+ $i['directory'] = '';
+ }
+ $i['permissions'] = OCP\Share::PERMISSION_READ;
+ $files[] = $i;
+ }
+ // Make breadcrumb
+ $breadcrumb = array();
+ $pathtohere = '';
+ $count = 1;
+ foreach (explode('/', $dir) as $i) {
+ if ($i != '') {
+ if ($i != $baseDir) {
+ $pathtohere .= '/'.$i;
+ }
+ if ( strlen($pathtohere) < strlen($_GET['dir'])) {
+ continue;
+ }
+ $breadcrumb[] = array('dir' => str_replace($_GET['dir'], "", $pathtohere, $count), 'name' => $i);
+ }
+ }
+ $list = new OCP\Template('files', 'part.list', '');
+ $list->assign('files', $files, false);
+ $list->assign('publicListView', true);
+ $list->assign('baseURL', OCP\Util::linkToPublic('files').'&dir='.urlencode($_GET['dir']).'&path=', false);
+ $list->assign('downloadURL', OCP\Util::linkToPublic('files').'&download&dir='.urlencode($_GET['dir']).'&path=', false);
+ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '' );
+ $breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
+ $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files').'&dir='.urlencode($_GET['dir']).'&path=', false);
+ $folder = new OCP\Template('files', 'index', '');
+ $folder->assign('fileList', $list->fetchPage(), false);
+ $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
+ $folder->assign('dir', basename($dir));
+ $folder->assign('isCreatable', false);
+ $folder->assign('permissions', 0);
+ $folder->assign('files', $files);
+ $folder->assign('uploadMaxFilesize', 0);
+ $folder->assign('uploadMaxHumanFilesize', 0);
+ $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ $tmpl->assign('folder', $folder->fetchPage(), false);
+ $tmpl->assign('uidOwner', $uidOwner);
+ $tmpl->assign('dir', basename($dir));
+ $tmpl->assign('filename', basename($path));
+ $tmpl->assign('mimetype', OC_Filesystem::getMimeType($path));
+ $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ if (isset($_GET['path'])) {
+ $getPath = $_GET['path'];
+ } else {
+ $getPath = '';
+ }
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').'&download&dir='.urlencode($_GET['dir']).'&path='.urlencode($getPath), false);
+ } else {
+ // Show file preview if viewer is available
+ $tmpl->assign('uidOwner', $uidOwner);
+ $tmpl->assign('dir', dirname($path));
+ $tmpl->assign('filename', basename($path));
+ $tmpl->assign('mimetype', OC_Filesystem::getMimeType($path));
+ if ($type == 'file') {
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').'&file='.urlencode($_GET['file']).'&download', false);
+ } else {
+ if (isset($_GET['path'])) {
+ $getPath = $_GET['path'];
+ } else {
+ $getPath = '';
+ }
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').'&download&dir='.urlencode($_GET['dir']).'&path='.urlencode($getPath), false);
+ }
+ }
+ $tmpl->printPage();
+ }
+ exit();
+ }
+ }
+}
+header('HTTP/1.0 404 Not Found');
+$tmpl = new OCP\Template('', '404', 'guest');
+$tmpl->printPage();
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index ca48a35575e..35cca7c42dc 100755..100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -5,21 +5,31 @@
<header><div id="header">
<a href="<?php echo link_to('', 'index.php'); ?>" title="" id="owncloud"><img class="svg" src="<?php echo image_path('', 'logo-wide.svg'); ?>" alt="ownCloud" /></a>
<div class="header-right">
- <span id="details"><?php echo $_['details']; ?></span>
- <a href="<?php echo $_['downloadURL']; ?>" id="download"><img class="svg" alt="Download" src="<?php echo OCP\image_path("core", "actions/download.svg"); ?>" /><?php echo $l->t('Download')?></a>
+ <?php if (isset($_['folder'])): ?>
+ <span id="details"><?php echo $l->t('%s shared the folder %s with you', array($_['uidOwner'], $_['filename'])) ?></span>
+ <?php else: ?>
+ <span id="details"><?php echo $l->t('%s shared the file %s with you', array($_['uidOwner'], $_['filename'])) ?></span>
+ <?php endif; ?>
+ <?php if (!isset($_['folder']) || $_['allowZipDownload']): ?>
+ <a href="<?php echo $_['downloadURL']; ?>" class="button" id="download"><img class="svg" alt="Download" src="<?php echo OCP\image_path("core", "actions/download.svg"); ?>" /><?php echo $l->t('Download')?></a>
+ <?php endif; ?>
</div>
</div></header>
<div id="preview">
- <?php if (substr($_['mimetype'], 0 , strpos($_['mimetype'], '/')) == 'image'): ?>
- <img src="<?php echo $_['downloadURL']; ?>" />
+ <?php if (isset($_['folder'])): ?>
+ <?php echo $_['folder']; ?>
+ <?php else: ?>
+ <?php if (substr($_['mimetype'], 0, strpos($_['mimetype'], '/')) == 'image'): ?>
+ <div id="imgframe">
+ <img src="<?php echo $_['downloadURL']; ?>" />
+ </div>
+ <?php endif; ?>
+ <ul id="noPreview">
+ <li class="error">
+ <?php echo $l->t('No preview available for').' '.$_['filename']; ?><br />
+ <a href="<?php echo $_['downloadURL']; ?>" id="download"><img class="svg" alt="Download" src="<?php echo OCP\image_path("core", "actions/download.svg"); ?>" /><?php echo $l->t('Download')?></a>
+ </li>
+ </ul>
<?php endif; ?>
- <ul id="noPreview">
- <li class="error">
- <?php echo $l->t('No preview available for').' '.$_['filename']; ?><br />
- <a href="<?php echo $_['downloadURL']; ?>" id="download"><img class="svg" alt="Download" src="<?php echo OCP\image_path("core", "actions/download.svg"); ?>" /><?php echo $l->t('Download')?></a>
- </li>
- </ul>
- <div id="content"></div>
- <table></table>
</div>
-<footer><p class="info"><a href="http://owncloud.org/">ownCloud</a> &ndash; <?php echo $l->t('web services under your control'); ?></p></footer> \ No newline at end of file
+<footer><p class="info"><a href="http://owncloud.org/">ownCloud</a> &ndash; <?php echo $l->t('web services under your control'); ?></p></footer>
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index d806291ed1d..e4e5a365d51 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -4,7 +4,7 @@
<name>Versions</name>
<licence>AGPL</licence>
<author>Frank Karlitschek</author>
- <require>4</require>
+ <require>4.9</require>
<shipped>true</shipped>
<description>Versioning of files</description>
<types>
diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js
index 495848b8226..426d521df82 100644
--- a/apps/files_versions/js/versions.js
+++ b/apps/files_versions/js/versions.js
@@ -10,10 +10,10 @@ $(document).ready(function() {
$(document).ready(function(){
if (typeof FileActions !== 'undefined') {
- // Add history button to files/index.php
+ // Add history button to 'files/index.php'
FileActions.register(
'file'
- ,'History'
+ , t('files_versions', 'History')
, OC.PERMISSION_UPDATE
, function() {
// Specify icon for hitory button
@@ -25,7 +25,7 @@ $(document).ready(function(){
var file = $('#dir').val()+'/'+filename;
// Check if drop down is already visible for a different file
- if (($('#dropdown').length > 0)) {
+ if (($('#dropdown').length > 0) && $('#dropdown').hasClass('drop-versions') ) {
if (file != $('#dropdown').data('file')) {
$('#dropdown').hide('blind', function() {
$('#dropdown').remove();
@@ -45,7 +45,7 @@ function createVersionsDropdown(filename, files) {
var historyUrl = OC.linkTo('files_versions', 'history.php') + '?path='+encodeURIComponent( $( '#dir' ).val() ).replace( /%2F/g, '/' )+'/'+encodeURIComponent( filename );
- var html = '<div id="dropdown" class="drop" data-file="'+files+'">';
+ var html = '<div id="dropdown" class="drop drop-versions" data-file="'+escapeHTML(files)+'">';
html += '<div id="private">';
html += '<select data-placeholder="Saved versions" id="found_versions" class="chzen-select" style="width:16em;">';
html += '<option value=""></option>';
@@ -68,7 +68,7 @@ function createVersionsDropdown(filename, files) {
data: { source: files },
async: false,
success: function( versions ) {
-
+
if (versions) {
$.each( versions, function(index, row ) {
addVersion( row );
@@ -128,7 +128,7 @@ function createVersionsDropdown(filename, files) {
version.appendTo('#found_versions');
}
-
+
$('tr').filterAttr('data-file',filename).addClass('mouseOver');
$('#dropdown').show('blind');
@@ -137,14 +137,13 @@ function createVersionsDropdown(filename, files) {
$(this).click(
function(event) {
-
- if ($('#dropdown').has(event.target).length === 0) {
+ if ($('#dropdown').has(event.target).length === 0 && $('#dropdown').hasClass('drop-versions')) {
$('#dropdown').hide('blind', function() {
$('#dropdown').remove();
$('tr').removeClass('mouseOver');
});
}
-
+
}
-); \ No newline at end of file
+);
diff --git a/apps/files_versions/l10n/ca.php b/apps/files_versions/l10n/ca.php
index 51ff7aba1dd..0076d02992f 100644
--- a/apps/files_versions/l10n/ca.php
+++ b/apps/files_versions/l10n/ca.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Expira totes les versions",
+"History" => "Historial",
"Versions" => "Versions",
-"This will delete all existing backup versions of your files" => "Això eliminarà totes les versions de còpia de seguretat dels vostres fitxers"
+"This will delete all existing backup versions of your files" => "Això eliminarà totes les versions de còpia de seguretat dels vostres fitxers",
+"Files Versioning" => "Fitxers de Versions",
+"Enable" => "Habilita"
);
diff --git a/apps/files_versions/l10n/cs_CZ.php b/apps/files_versions/l10n/cs_CZ.php
index 5d19f59d706..3995334d9ee 100644
--- a/apps/files_versions/l10n/cs_CZ.php
+++ b/apps/files_versions/l10n/cs_CZ.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Vypršet všechny verze",
+"History" => "Historie",
"Versions" => "Verze",
-"This will delete all existing backup versions of your files" => "Odstraní všechny existující zálohované verze Vašich souborů"
+"This will delete all existing backup versions of your files" => "Odstraní všechny existující zálohované verze Vašich souborů",
+"Files Versioning" => "Verzování souborů",
+"Enable" => "Povolit"
);
diff --git a/apps/files_versions/l10n/da.php b/apps/files_versions/l10n/da.php
index 6a69fdbe4cc..bc02b47f2ad 100644
--- a/apps/files_versions/l10n/da.php
+++ b/apps/files_versions/l10n/da.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Lad alle versioner udløbe",
+"History" => "Historik",
"Versions" => "Versioner",
-"This will delete all existing backup versions of your files" => "Dette vil slette alle eksisterende backupversioner af dine filer"
+"This will delete all existing backup versions of your files" => "Dette vil slette alle eksisterende backupversioner af dine filer",
+"Files Versioning" => "Versionering af filer",
+"Enable" => "Aktiver"
);
diff --git a/apps/files_versions/l10n/de.php b/apps/files_versions/l10n/de.php
index 079d96e679e..092bbfbff70 100644
--- a/apps/files_versions/l10n/de.php
+++ b/apps/files_versions/l10n/de.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Alle Versionen löschen",
+"History" => "Historie",
"Versions" => "Versionen",
-"This will delete all existing backup versions of your files" => "Dies löscht alle vorhandenen Sicherungsversionen Ihrer Dateien."
+"This will delete all existing backup versions of your files" => "Dies löscht alle vorhandenen Sicherungsversionen Deiner Dateien.",
+"Files Versioning" => "Dateiversionierung",
+"Enable" => "Aktivieren"
);
diff --git a/apps/files_versions/l10n/de_DE.php b/apps/files_versions/l10n/de_DE.php
new file mode 100644
index 00000000000..a568112d02d
--- /dev/null
+++ b/apps/files_versions/l10n/de_DE.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Alle Versionen löschen",
+"History" => "Historie",
+"Versions" => "Versionen",
+"This will delete all existing backup versions of your files" => "Dies löscht alle vorhandenen Sicherungsversionen Ihrer Dateien.",
+"Files Versioning" => "Dateiversionierung",
+"Enable" => "Aktivieren"
+);
diff --git a/apps/files_versions/l10n/el.php b/apps/files_versions/l10n/el.php
index c26ad806bbd..f6b9a5b2998 100644
--- a/apps/files_versions/l10n/el.php
+++ b/apps/files_versions/l10n/el.php
@@ -1,3 +1,8 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Λήξη όλων των εκδόσεων"
+"Expire all versions" => "Λήξη όλων των εκδόσεων",
+"History" => "Ιστορικό",
+"Versions" => "Εκδόσεις",
+"This will delete all existing backup versions of your files" => "Αυτό θα διαγράψει όλες τις υπάρχουσες εκδόσεις των αντιγράφων ασφαλείας των αρχείων σας",
+"Files Versioning" => "Εκδόσεις Αρχείων",
+"Enable" => "Ενεργοποίηση"
);
diff --git a/apps/files_versions/l10n/eo.php b/apps/files_versions/l10n/eo.php
index d0f89c576d4..0c3835373ef 100644
--- a/apps/files_versions/l10n/eo.php
+++ b/apps/files_versions/l10n/eo.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Eksvalidigi ĉiujn eldonojn",
+"History" => "Historio",
"Versions" => "Eldonoj",
-"This will delete all existing backup versions of your files" => "Ĉi tio forigos ĉiujn estantajn sekurkopiajn eldonojn de viaj dosieroj"
+"This will delete all existing backup versions of your files" => "Ĉi tio forigos ĉiujn estantajn sekurkopiajn eldonojn de viaj dosieroj",
+"Files Versioning" => "Dosiereldonigo",
+"Enable" => "Kapabligi"
);
diff --git a/apps/files_versions/l10n/es.php b/apps/files_versions/l10n/es.php
index 1acab15299f..f6b63df7c2b 100644
--- a/apps/files_versions/l10n/es.php
+++ b/apps/files_versions/l10n/es.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Expirar todas las versiones",
+"History" => "Historial",
"Versions" => "Versiones",
-"This will delete all existing backup versions of your files" => "Esto eliminará todas las versiones guardadas como copia de seguridad de tus archivos"
+"This will delete all existing backup versions of your files" => "Esto eliminará todas las versiones guardadas como copia de seguridad de tus archivos",
+"Files Versioning" => "Versionado de archivos",
+"Enable" => "Habilitar"
);
diff --git a/apps/files_versions/l10n/es_AR.php b/apps/files_versions/l10n/es_AR.php
new file mode 100644
index 00000000000..a78264de03f
--- /dev/null
+++ b/apps/files_versions/l10n/es_AR.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Expirar todas las versiones",
+"History" => "Historia",
+"Versions" => "Versiones",
+"This will delete all existing backup versions of your files" => "Hacer estom borrará todas las versiones guardadas como copia de seguridad de tus archivos",
+"Files Versioning" => "Versionado de archivos",
+"Enable" => "Activar"
+);
diff --git a/apps/files_versions/l10n/et_EE.php b/apps/files_versions/l10n/et_EE.php
index f1ebd082ad5..f1296f23fcd 100644
--- a/apps/files_versions/l10n/et_EE.php
+++ b/apps/files_versions/l10n/et_EE.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Kõikide versioonide aegumine",
+"History" => "Ajalugu",
"Versions" => "Versioonid",
-"This will delete all existing backup versions of your files" => "See kustutab kõik sinu failidest tehtud varuversiooni"
+"This will delete all existing backup versions of your files" => "See kustutab kõik sinu failidest tehtud varuversiooni",
+"Files Versioning" => "Failide versioonihaldus",
+"Enable" => "Luba"
);
diff --git a/apps/files_versions/l10n/eu.php b/apps/files_versions/l10n/eu.php
index 889e762c6b9..d84d9011707 100644
--- a/apps/files_versions/l10n/eu.php
+++ b/apps/files_versions/l10n/eu.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Iraungi bertsio guztiak",
+"History" => "Historia",
"Versions" => "Bertsioak",
-"This will delete all existing backup versions of your files" => "Honek zure fitxategien bertsio guztiak ezabatuko ditu"
+"This will delete all existing backup versions of your files" => "Honek zure fitxategien bertsio guztiak ezabatuko ditu",
+"Files Versioning" => "Fitxategien Bertsioak",
+"Enable" => "Gaitu"
);
diff --git a/apps/files_versions/l10n/fi_FI.php b/apps/files_versions/l10n/fi_FI.php
index bc8aa67dc79..3cec4c04bfe 100644
--- a/apps/files_versions/l10n/fi_FI.php
+++ b/apps/files_versions/l10n/fi_FI.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Vanhenna kaikki versiot",
+"History" => "Historia",
"Versions" => "Versiot",
-"This will delete all existing backup versions of your files" => "Tämä poistaa kaikki tiedostojesi olemassa olevat varmuuskopioversiot"
+"This will delete all existing backup versions of your files" => "Tämä poistaa kaikki tiedostojesi olemassa olevat varmuuskopioversiot",
+"Files Versioning" => "Tiedostojen versiointi",
+"Enable" => "Käytä"
);
diff --git a/apps/files_versions/l10n/fr.php b/apps/files_versions/l10n/fr.php
index b0e658e8df0..e6dbc274456 100644
--- a/apps/files_versions/l10n/fr.php
+++ b/apps/files_versions/l10n/fr.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Supprimer les versions intermédiaires",
+"History" => "Historique",
"Versions" => "Versions",
-"This will delete all existing backup versions of your files" => "Cette opération va effacer toutes les versions intermédiaires de vos fichiers (et ne garder que la dernière version en date)."
+"This will delete all existing backup versions of your files" => "Cette opération va effacer toutes les versions intermédiaires de vos fichiers (et ne garder que la dernière version en date).",
+"Files Versioning" => "Versionnage des fichiers",
+"Enable" => "Activer"
);
diff --git a/apps/files_versions/l10n/gl.php b/apps/files_versions/l10n/gl.php
new file mode 100644
index 00000000000..c0d5937e1b1
--- /dev/null
+++ b/apps/files_versions/l10n/gl.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Caducar todas as versións",
+"Versions" => "Versións",
+"This will delete all existing backup versions of your files" => "Esto eliminará todas as copias de respaldo existentes dos seus ficheiros",
+"Files Versioning" => "Versionado de ficheiros",
+"Enable" => "Habilitar"
+);
diff --git a/apps/files_versions/l10n/id.php b/apps/files_versions/l10n/id.php
new file mode 100644
index 00000000000..d8ac66c9763
--- /dev/null
+++ b/apps/files_versions/l10n/id.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "kadaluarsakan semua versi",
+"History" => "riwayat",
+"Versions" => "versi",
+"This will delete all existing backup versions of your files" => "ini akan menghapus semua versi backup yang ada dari file anda",
+"Files Versioning" => "pembuatan versi file",
+"Enable" => "aktifkan"
+);
diff --git a/apps/files_versions/l10n/it.php b/apps/files_versions/l10n/it.php
index 2b7d2b5c139..0b1e70823d5 100644
--- a/apps/files_versions/l10n/it.php
+++ b/apps/files_versions/l10n/it.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Scadenza di tutte le versioni",
+"History" => "Cronologia",
"Versions" => "Versioni",
-"This will delete all existing backup versions of your files" => "Ciò eliminerà tutte le versioni esistenti dei tuoi file"
+"This will delete all existing backup versions of your files" => "Ciò eliminerà tutte le versioni esistenti dei tuoi file",
+"Files Versioning" => "Controllo di versione dei file",
+"Enable" => "Abilita"
);
diff --git a/apps/files_versions/l10n/ja_JP.php b/apps/files_versions/l10n/ja_JP.php
index 7a00d0b4dad..367152c0743 100644
--- a/apps/files_versions/l10n/ja_JP.php
+++ b/apps/files_versions/l10n/ja_JP.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "すべてのバージョンを削除する",
+"History" => "履歴",
"Versions" => "バージョン",
-"This will delete all existing backup versions of your files" => "これは、あなたのファイルのすべてのバックアップバージョンを削除します"
+"This will delete all existing backup versions of your files" => "これは、あなたのファイルのすべてのバックアップバージョンを削除します",
+"Files Versioning" => "ファイルのバージョン管理",
+"Enable" => "有効化"
);
diff --git a/apps/files_versions/l10n/ku_IQ.php b/apps/files_versions/l10n/ku_IQ.php
new file mode 100644
index 00000000000..5fa3b9080d7
--- /dev/null
+++ b/apps/files_versions/l10n/ku_IQ.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "وه‌شانه‌کان گشتیان به‌سه‌رده‌چن",
+"History" => "مێژوو",
+"Versions" => "وه‌شان",
+"This will delete all existing backup versions of your files" => "ئه‌مه‌ سه‌رجه‌م پاڵپشتی وه‌شانه‌ هه‌بووه‌کانی په‌ڕگه‌کانت ده‌سڕینته‌وه",
+"Files Versioning" => "وه‌شانی په‌ڕگه",
+"Enable" => "چالاککردن"
+);
diff --git a/apps/files_versions/l10n/lt_LT.php b/apps/files_versions/l10n/lt_LT.php
index b3810d06ec7..3250ddc7c3c 100644
--- a/apps/files_versions/l10n/lt_LT.php
+++ b/apps/files_versions/l10n/lt_LT.php
@@ -1,3 +1,8 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Panaikinti visų versijų galiojimą"
+"Expire all versions" => "Panaikinti visų versijų galiojimą",
+"History" => "Istorija",
+"Versions" => "Versijos",
+"This will delete all existing backup versions of your files" => "Tai ištrins visas esamas failo versijas",
+"Files Versioning" => "Failų versijos",
+"Enable" => "Įjungti"
);
diff --git a/apps/files_versions/l10n/nl.php b/apps/files_versions/l10n/nl.php
index 486b4ed45cf..1cf875048d7 100644
--- a/apps/files_versions/l10n/nl.php
+++ b/apps/files_versions/l10n/nl.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Alle versies laten verlopen",
+"History" => "Geschiedenis",
"Versions" => "Versies",
-"This will delete all existing backup versions of your files" => "Dit zal alle bestaande backup versies van uw bestanden verwijderen"
+"This will delete all existing backup versions of your files" => "Dit zal alle bestaande backup versies van uw bestanden verwijderen",
+"Files Versioning" => "Bestand versies",
+"Enable" => "Zet aan"
);
diff --git a/apps/files_versions/l10n/pl.php b/apps/files_versions/l10n/pl.php
index a198792a5bc..46c28d4590a 100644
--- a/apps/files_versions/l10n/pl.php
+++ b/apps/files_versions/l10n/pl.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Wygasają wszystkie wersje",
+"History" => "Historia",
"Versions" => "Wersje",
-"This will delete all existing backup versions of your files" => "Spowoduje to usunięcie wszystkich istniejących wersji kopii zapasowych plików"
+"This will delete all existing backup versions of your files" => "Spowoduje to usunięcie wszystkich istniejących wersji kopii zapasowych plików",
+"Files Versioning" => "Wersjonowanie plików",
+"Enable" => "Włącz"
);
diff --git a/apps/files_versions/l10n/pt_BR.php b/apps/files_versions/l10n/pt_BR.php
index 102b6d62743..3d39a533d65 100644
--- a/apps/files_versions/l10n/pt_BR.php
+++ b/apps/files_versions/l10n/pt_BR.php
@@ -1,3 +1,8 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expirar todas as versões"
+"Expire all versions" => "Expirar todas as versões",
+"History" => "Histórico",
+"Versions" => "Versões",
+"This will delete all existing backup versions of your files" => "Isso removerá todas as versões de backup existentes dos seus arquivos",
+"Files Versioning" => "Versionamento de Arquivos",
+"Enable" => "Habilitar"
);
diff --git a/apps/files_versions/l10n/pt_PT.php b/apps/files_versions/l10n/pt_PT.php
new file mode 100644
index 00000000000..2ddf70cc6c5
--- /dev/null
+++ b/apps/files_versions/l10n/pt_PT.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Expirar todas as versões",
+"History" => "Histórico",
+"Versions" => "Versões",
+"This will delete all existing backup versions of your files" => "Isto irá apagar todas as versões de backup do seus ficheiros",
+"Files Versioning" => "Versionamento de Ficheiros",
+"Enable" => "Activar"
+);
diff --git a/apps/files_versions/l10n/ro.php b/apps/files_versions/l10n/ro.php
new file mode 100644
index 00000000000..e23e771e392
--- /dev/null
+++ b/apps/files_versions/l10n/ro.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Expiră toate versiunile",
+"History" => "Istoric",
+"Versions" => "Versiuni",
+"This will delete all existing backup versions of your files" => "Această acțiune va șterge toate versiunile salvate ale fișierelor tale",
+"Files Versioning" => "Versionare fișiere",
+"Enable" => "Activare"
+);
diff --git a/apps/files_versions/l10n/ru.php b/apps/files_versions/l10n/ru.php
index f91cae90a14..d698e90b8b8 100644
--- a/apps/files_versions/l10n/ru.php
+++ b/apps/files_versions/l10n/ru.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Просрочить все версии",
+"History" => "История",
"Versions" => "Версии",
-"This will delete all existing backup versions of your files" => "Очистить список версий ваших файлов"
+"This will delete all existing backup versions of your files" => "Очистить список версий ваших файлов",
+"Files Versioning" => "Версии файлов",
+"Enable" => "Включить"
);
diff --git a/apps/files_versions/l10n/ru_RU.php b/apps/files_versions/l10n/ru_RU.php
new file mode 100644
index 00000000000..a14258eea87
--- /dev/null
+++ b/apps/files_versions/l10n/ru_RU.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Срок действия всех версий истекает",
+"History" => "История",
+"Versions" => "Версии",
+"This will delete all existing backup versions of your files" => "Это приведет к удалению всех существующих версий резервной копии ваших файлов",
+"Files Versioning" => "Файлы управления версиями",
+"Enable" => "Включить"
+);
diff --git a/apps/files_versions/l10n/si_LK.php b/apps/files_versions/l10n/si_LK.php
new file mode 100644
index 00000000000..dbddf6dc2e9
--- /dev/null
+++ b/apps/files_versions/l10n/si_LK.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "සියලු අනුවාද අවලංගු කරන්න",
+"History" => "ඉතිහාසය",
+"Versions" => "අනුවාද",
+"This will delete all existing backup versions of your files" => "මෙයින් ඔබගේ ගොනුවේ රක්ශිත කරනු ලැබු අනුවාද සියල්ල මකා දමනු ලැබේ",
+"Files Versioning" => "ගොනු අනුවාදයන්",
+"Enable" => "සක්‍රිය කරන්න"
+);
diff --git a/apps/files_versions/l10n/sk_SK.php b/apps/files_versions/l10n/sk_SK.php
new file mode 100644
index 00000000000..132c6c09682
--- /dev/null
+++ b/apps/files_versions/l10n/sk_SK.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Expirovať všetky verzie",
+"History" => "História",
+"Versions" => "Verzie",
+"This will delete all existing backup versions of your files" => "Budú zmazané všetky zálohované verzie vašich súborov",
+"Files Versioning" => "Vytváranie verzií súborov",
+"Enable" => "Zapnúť"
+);
diff --git a/apps/files_versions/l10n/sl.php b/apps/files_versions/l10n/sl.php
index 8c67b568834..22b890a042d 100644
--- a/apps/files_versions/l10n/sl.php
+++ b/apps/files_versions/l10n/sl.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Zastaraj vse različice",
+"History" => "Zgodovina",
"Versions" => "Različice",
-"This will delete all existing backup versions of your files" => "To bo izbrisalo vse obstoječe različice varnostnih kopij vaših datotek"
+"This will delete all existing backup versions of your files" => "S tem bodo izbrisane vse obstoječe različice varnostnih kopij vaših datotek",
+"Files Versioning" => "Sledenje različicam",
+"Enable" => "Omogoči"
);
diff --git a/apps/files_versions/l10n/sv.php b/apps/files_versions/l10n/sv.php
index 16fd9890bf9..e36164e30ab 100644
--- a/apps/files_versions/l10n/sv.php
+++ b/apps/files_versions/l10n/sv.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Upphör alla versioner",
+"History" => "Historik",
"Versions" => "Versioner",
-"This will delete all existing backup versions of your files" => "Detta kommer att radera alla befintliga säkerhetskopior av dina filer"
+"This will delete all existing backup versions of your files" => "Detta kommer att radera alla befintliga säkerhetskopior av dina filer",
+"Files Versioning" => "Versionshantering av filer",
+"Enable" => "Aktivera"
);
diff --git a/apps/files_versions/l10n/th_TH.php b/apps/files_versions/l10n/th_TH.php
index 5e075d54a75..89b9f626911 100644
--- a/apps/files_versions/l10n/th_TH.php
+++ b/apps/files_versions/l10n/th_TH.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "หมดอายุทุกรุ่น",
+"History" => "ประวัติ",
"Versions" => "รุ่น",
-"This will delete all existing backup versions of your files" => "นี่จะเป็นลบทิ้งไฟล์รุ่นที่ทำการสำรองข้อมูลทั้งหมดที่มีอยู่ของคุณทิ้งไป"
+"This will delete all existing backup versions of your files" => "นี่จะเป็นลบทิ้งไฟล์รุ่นที่ทำการสำรองข้อมูลทั้งหมดที่มีอยู่ของคุณทิ้งไป",
+"Files Versioning" => "การกำหนดเวอร์ชั่นของไฟล์",
+"Enable" => "เปิดใช้งาน"
);
diff --git a/apps/files_versions/l10n/uk.php b/apps/files_versions/l10n/uk.php
new file mode 100644
index 00000000000..7532f755c88
--- /dev/null
+++ b/apps/files_versions/l10n/uk.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Термін дії всіх версій",
+"History" => "Історія",
+"Versions" => "Версії",
+"This will delete all existing backup versions of your files" => "Це призведе до знищення всіх існуючих збережених версій Ваших файлів",
+"Files Versioning" => "Версії файлів",
+"Enable" => "Включити"
+);
diff --git a/apps/files_versions/l10n/vi.php b/apps/files_versions/l10n/vi.php
index 992c0751d0a..a92e85a017a 100644
--- a/apps/files_versions/l10n/vi.php
+++ b/apps/files_versions/l10n/vi.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "Hết hạn tất cả các phiên bản",
+"History" => "Lịch sử",
"Versions" => "Phiên bản",
-"This will delete all existing backup versions of your files" => "Điều này sẽ xóa tất cả các phiên bản sao lưu hiện có "
+"This will delete all existing backup versions of your files" => "Điều này sẽ xóa tất cả các phiên bản sao lưu hiện có ",
+"Files Versioning" => "Phiên bản tệp tin",
+"Enable" => "Kích hoạtLịch sử"
);
diff --git a/apps/files_versions/l10n/zh_CN.GB2312.php b/apps/files_versions/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..107805221b8
--- /dev/null
+++ b/apps/files_versions/l10n/zh_CN.GB2312.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "作废所有版本",
+"History" => "历史",
+"Versions" => "版本",
+"This will delete all existing backup versions of your files" => "这将删除所有您现有文件的备份版本",
+"Files Versioning" => "文件版本",
+"Enable" => "启用"
+);
diff --git a/apps/files_versions/l10n/zh_CN.php b/apps/files_versions/l10n/zh_CN.php
index ba2ea40df96..48e7157c98f 100644
--- a/apps/files_versions/l10n/zh_CN.php
+++ b/apps/files_versions/l10n/zh_CN.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
"Expire all versions" => "过期所有版本",
+"History" => "历史",
"Versions" => "版本",
-"This will delete all existing backup versions of your files" => "将会删除您的文件的所有备份版本"
+"This will delete all existing backup versions of your files" => "将会删除您的文件的所有备份版本",
+"Files Versioning" => "文件版本",
+"Enable" => "开启"
);
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index 9ec0b01a7f9..822103ebc32 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -64,7 +64,7 @@ class Hooks {
$abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$params['newpath'].'.v';
if(Storage::isversioned($rel_oldpath)) {
$info=pathinfo($abs_newpath);
- if(!file_exists($info['dirname'])) mkdir($info['dirname'],0700,true);
+ if(!file_exists($info['dirname'])) mkdir($info['dirname'],0750, true);
$versions = Storage::getVersions($rel_oldpath);
foreach ($versions as $v) {
rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']);
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index e429782aed1..56878b470d1 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -35,48 +35,35 @@ class Storage {
const DEFAULTMININTERVAL=60; // 1 min
const DEFAULTMAXVERSIONS=50;
- private $view;
-
- function __construct() {
-
- $this->view = \OCP\Files::getStorage('files_versions');
-
- }
-
- /**
- * listen to write event.
- */
- public static function write_hook($params) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $path = $params[\OC_Filesystem::signal_param_path];
- if($path<>'') $this->store($path);
+ private static function getUidAndFilename($filename)
+ {
+ if (\OCP\App::isEnabled('files_sharing')
+ && substr($filename, 0, 7) == '/Shared'
+ && $source = \OCP\Share::getItemSharedWith('file',
+ substr($filename, 7),
+ \OC_Share_Backend_File::FORMAT_SHARED_STORAGE)) {
+ $filename = $source['path'];
+ $pos = strpos($filename, '/files', 1);
+ $uid = substr($filename, 1, $pos - 1);
+ $filename = substr($filename, $pos + 6);
+ } else {
+ $uid = \OCP\User::getUser();
}
+ return array($uid, $filename);
}
-
-
/**
* store a new version of a file.
*/
public function store($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
- $files_view = \OCP\Files::getStorage("files");
- $users_view = \OCP\Files::getStorage("files_versions");
- $users_view->chroot(\OCP\User::getUser().'/');
-
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
-
- $versionsFolderName=\OCP\Config::getSystemValue('datadirectory') . $this->view->getAbsolutePath('');
+ list($uid, $filename) = self::getUidAndFilename($filename);
+ $userHome = \OC_User::getHome($uid);
+ $files_view = new \OC_FilesystemView($userHome.'/files');
+ $users_view = new \OC_FilesystemView($userHome);
//check if source file already exist as version to avoid recursions.
+ // todo does this check work?
if ($users_view->file_exists($filename)) {
return false;
}
@@ -95,6 +82,10 @@ class Storage {
return false;
}
}
+ // we should have a source file to work with
+ if (!$files_view->file_exists($filename)) {
+ return false;
+ }
// check filesize
if($files_view->filesize($filename)>\OCP\Config::getSystemValue('files_versionsmaxfilesize', Storage::DEFAULTMAXFILESIZE)) {
@@ -104,9 +95,11 @@ class Storage {
// check mininterval if the file is being modified by the owner (all shared files should be versioned despite mininterval)
if ($uid == \OCP\User::getUser()) {
+ $versions_fileview = new \OC_FilesystemView($userHome.'/files_versions');
+ $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
$matches=glob($versionsFolderName.'/'.$filename.'.v*');
sort($matches);
- $parts=explode('.v',end($matches));
+ $parts=explode('.v', end($matches));
if((end($parts)+Storage::DEFAULTMININTERVAL)>time()) {
return false;
}
@@ -115,7 +108,9 @@ class Storage {
// create all parent folders
$info=pathinfo($filename);
- if(!file_exists($versionsFolderName.'/'.$info['dirname'])) mkdir($versionsFolderName.'/'.$info['dirname'],0700,true);
+ if(!file_exists($versionsFolderName.'/'.$info['dirname'])) {
+ mkdir($versionsFolderName.'/'.$info['dirname'],0750, true);
+ }
// store a new version of a file
$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time());
@@ -132,17 +127,8 @@ class Storage {
public static function rollback($filename,$revision) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $users_view = \OCP\Files::getStorage("files_versions");
- $users_view->chroot(\OCP\User::getUser().'/');
-
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
+ list($uid, $filename) = self::getUidAndFilename($filename);
+ $users_view = new \OC_FilesystemView(\OC_User::getHome($uid));
// rollback
if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
@@ -164,12 +150,8 @@ class Storage {
*/
public static function isversioned($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $versions_fileview = \OCP\Files::getStorage("files_versions");
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $filename = substr($source, $pos + 6);
- //}
+ list($uid, $filename) = self::getUidAndFilename($filename);
+ $versions_fileview = new \OC_FilesystemView(\OC_User::getHome($uid).'/files_versions');
$versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
@@ -196,16 +178,9 @@ class Storage {
public static function getVersions( $filename, $count = 0 ) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
+ list($uid, $filename) = self::getUidAndFilename($filename);
+ $versions_fileview = new \OC_FilesystemView(\OC_User::getHome($uid).'/files_versions');
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
- $versions_fileview = \OCP\Files::getStorage('files_versions');
$versionsFolderName = \OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
$versions = array();
@@ -216,7 +191,7 @@ class Storage {
$i = 0;
- $files_view = \OCP\Files::getStorage('files');
+ $files_view = new \OC_FilesystemView(\OC_User::getHome($uid).'/files');
$local_file = $files_view->getLocalFile($filename);
foreach( $matches as $ma ) {
@@ -270,16 +245,9 @@ class Storage {
*/
public static function expire($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+ list($uid, $filename) = self::getUidAndFilename($filename);
+ $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
- //FIXME OC_Share no longer exists
- //if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- // $pos = strpos($source, '/files', 1);
- // $uid = substr($source, 1, $pos - 1);
- // $filename = substr($source, $pos + 6);
- //} else {
- $uid = \OCP\User::getUser();
- //}
- $versions_fileview = \OCP\Files::getStorage("files_versions");
$versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
// check for old versions
@@ -287,7 +255,7 @@ class Storage {
if( count( $matches ) > \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) ) {
- $numberToDelete = count( $matches-\OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) );
+ $numberToDelete = count($matches) - \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS );
// delete old versions of a file
$deleteItems = array_slice( $matches, 0, $numberToDelete );
@@ -306,6 +274,7 @@ class Storage {
* @return true/false
*/
public function expireAll() {
- return $this->view->deleteAll('', true);
+ $view = \OCP\Files::getStorage('files_versions');
+ return $view->deleteAll('', true);
}
}
diff --git a/apps/files_versions/templates/history.php b/apps/files_versions/templates/history.php
index 99bc153a816..854d032da62 100644
--- a/apps/files_versions/templates/history.php
+++ b/apps/files_versions/templates/history.php
@@ -22,7 +22,7 @@ if( isset( $_['message'] ) ) {
foreach ( $_['versions'] as $v ) {
echo ' ';
echo OCP\Util::formatDate( doubleval($v['version']) );
- echo ' <a href="'.OCP\Util::linkTo('files_versions', 'history.php', array('path' => urlencode( $_['path'] ), 'revert' => $v['version'])) .'" class="button">Revert</a><br /><br />';
+ echo ' <a href="'.OCP\Util::linkTo('files_versions', 'history.php', array('path' => $_['path'], 'revert' => $v['version'])) .'" class="button">Revert</a><br /><br />';
if ( $v['cur'] ) { echo ' (<b>Current</b>)'; }
echo '<br /><br />';
}
diff --git a/apps/user_ldap/appinfo/database.xml b/apps/user_ldap/appinfo/database.xml
index a785bbf4221..812e450dde7 100644
--- a/apps/user_ldap/appinfo/database.xml
+++ b/apps/user_ldap/appinfo/database.xml
@@ -130,7 +130,7 @@
</field>
<index>
- <name>ldap_group_members</name>
+ <name>ldap_group_members_index</name>
<unique>true</unique>
<field>
<name>owncloudname</name>
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index de0daf146e3..30fbf687dbe 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>Authenticate Users by LDAP</description>
<licence>AGPL</licence>
<author>Dominik Schmidt and Arthur Schiwon</author>
- <require>4</require>
+ <require>4.9</require>
<shipped>true</shipped>
<types>
<authentication/>
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index f23285a0dc6..e6e25cec734 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -34,7 +34,7 @@ $groupBE = new \OCA\user_ldap\GROUP_LDAP();
$groupBE->setConnector($connector);
foreach($objects as $object) {
- $fetchDNSql = 'SELECT `ldap_dn`, `owncloud_name` FROM `*PREFIX*ldap_'.$object.'_mapping` WHERE `directory_uuid` = ""';
+ $fetchDNSql = 'SELECT `ldap_dn`, `owncloud_name` FROM `*PREFIX*ldap_'.$object.'_mapping` WHERE `directory_uuid` = \'\'';
$updateSql = 'UPDATE `*PREFIX*ldap_'.$object.'_mapping` SET `ldap_DN` = ?, `directory_uuid` = ? WHERE `ldap_dn` = ?';
$query = OCP\DB::prepare($fetchDNSql);
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index 444b3e8a75a..73082a89b35 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.2.0.30 \ No newline at end of file
+0.3.0.0 \ No newline at end of file
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index 5ec259f6c47..f1411782ad6 100644
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -28,10 +28,9 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
public function setConnector(lib\Connection &$connection) {
parent::setConnector($connection);
- if(empty($this->connection->ldapGroupFilter) || empty($this->connection->ldapGroupMemberAssocAttr)) {
- $this->enabled = false;
+ if(!empty($this->connection->ldapGroupFilter) && !empty($this->connection->ldapGroupMemberAssocAttr)) {
+ $this->enabled = true;
}
- $this->enabled = true;
}
/**
@@ -96,12 +95,13 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!$this->enabled) {
return array();
}
- if($this->connection->isCached('getUserGroups'.$uid)) {
- return $this->connection->getFromCache('getUserGroups'.$uid);
+ $cacheKey = 'getUserGroups'.$uid;
+ if($this->connection->isCached($cacheKey)) {
+ return $this->connection->getFromCache($cacheKey);
}
$userDN = $this->username2dn($uid);
if(!$userDN) {
- $this->connection->writeToCache('getUserGroups'.$uid, array());
+ $this->connection->writeToCache($cacheKey, array());
return array();
}
@@ -124,7 +124,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
));
$groups = $this->fetchListOfGroups($filter, array($this->connection->ldapGroupDisplayName,'dn'));
$groups = array_unique($this->ownCloudGroupNames($groups), SORT_LOCALE_STRING);
- $this->connection->writeToCache('getUserGroups'.$uid, $groups);
+ $this->connection->writeToCache($cacheKey, $groups);
return $groups;
}
@@ -143,7 +143,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!empty($this->groupSearch)) {
$groupUsers = array_filter($groupUsers, array($this, 'groupMatchesFilter'));
}
- if($limit = -1) {
+ if($limit == -1) {
$limit = null;
}
return array_slice($groupUsers, $offset, $limit);
@@ -187,7 +187,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!empty($this->groupSearch)) {
$groupUsers = array_filter($groupUsers, array($this, 'groupMatchesFilter'));
}
- if($limit = -1) {
+ if($limit == -1) {
$limit = null;
}
return array_slice($groupUsers, $offset, $limit);
@@ -237,7 +237,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
}
//getting dn, if false the group does not exist. If dn, it may be mapped only, requires more checking.
- $dn = $this->username2dn($gid);
+ $dn = $this->groupname2dn($gid);
if(!$dn) {
$this->connection->writeToCache('groupExists'.$gid, false);
return false;
diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php
index f01c7b71108..cce3de085d2 100644
--- a/apps/user_ldap/l10n/da.php
+++ b/apps/user_ldap/l10n/da.php
@@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array(
"Host" => "Host",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://",
"Base DN" => "Base DN",
+"User DN" => "Bruger DN",
"Password" => "Kodeord",
"Port" => "Port",
"Use TLS" => "Brug TLS",
diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php
index 2c178d0b4fd..97debcbab60 100644
--- a/apps/user_ldap/l10n/de.php
+++ b/apps/user_ldap/l10n/de.php
@@ -1,12 +1,12 @@
<?php $TRANSLATIONS = array(
"Host" => "Host",
-"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Du kannst das Protokoll auslassen, außer wenn Du SSL benötigst. Beginne dann mit ldaps://",
"Base DN" => "Basis-DN",
-"You can specify Base DN for users and groups in the Advanced tab" => "Sie können Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren",
+"You can specify Base DN for users and groups in the Advanced tab" => "Du kannst Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren",
"User DN" => "Benutzer-DN",
-"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lassen Sie DN und Passwort leer.",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer.",
"Password" => "Passwort",
-"For anonymous access, leave DN and Password empty." => "Lassen Sie die Felder von DN und Passwort für anonymen Zugang leer.",
+"For anonymous access, leave DN and Password empty." => "Lasse die Felder von DN und Passwort für anonymen Zugang leer.",
"User Login Filter" => "Benutzer-Login-Filter",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen bei dem Anmeldeversuch.",
"use %%uid placeholder, e.g. \"uid=%%uid\"" => "verwende %%uid Platzhalter, z. B. \"uid=%%uid\"",
@@ -21,10 +21,10 @@
"Base Group Tree" => "Basis-Gruppenbaum",
"Group-Member association" => "Assoziation zwischen Gruppe und Benutzer",
"Use TLS" => "Nutze TLS",
-"Do not use it for SSL connections, it will fail." => "Verwenden Sie es nicht für SSL-Verbindungen, es wird fehlschlagen.",
+"Do not use it for SSL connections, it will fail." => "Verwende dies nicht für SSL-Verbindungen, es wird fehlschlagen.",
"Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)",
"Turn off SSL certificate validation." => "Schalte die SSL-Zertifikatsprüfung aus.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, wird das SSL-Zertifikat des LDAP-Server importiert werden.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.",
"Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.",
"User Display Name Field" => "Feld für den Anzeigenamen des Benutzers",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. ",
@@ -32,6 +32,6 @@
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. ",
"in bytes" => "in Bytes",
"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls geben Sie ein LDAP/AD-Attribut an.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein.",
"Help" => "Hilfe"
);
diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php
new file mode 100644
index 00000000000..e6288c78af4
--- /dev/null
+++ b/apps/user_ldap/l10n/de_DE.php
@@ -0,0 +1,37 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Host",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://",
+"Base DN" => "Basis-DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "Sie können Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren",
+"User DN" => "Benutzer-DN",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lassen Sie DN und Passwort leer.",
+"Password" => "Passwort",
+"For anonymous access, leave DN and Password empty." => "Lassen Sie die Felder von DN und Passwort für anonymen Zugang leer.",
+"User Login Filter" => "Benutzer-Login-Filter",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen bei dem Anmeldeversuch.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "verwenden Sie %%uid Platzhalter, z. B. \"uid=%%uid\"",
+"User List Filter" => "Benutzer-Filter-Liste",
+"Defines the filter to apply, when retrieving users." => "Definiert den Filter für die Anfrage der Benutzer.",
+"without any placeholder, e.g. \"objectClass=person\"." => "ohne Platzhalter, z.B.: \"objectClass=person\"",
+"Group Filter" => "Gruppen-Filter",
+"Defines the filter to apply, when retrieving groups." => "Definiert den Filter für die Anfrage der Gruppen.",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"",
+"Port" => "Port",
+"Base User Tree" => "Basis-Benutzerbaum",
+"Base Group Tree" => "Basis-Gruppenbaum",
+"Group-Member association" => "Assoziation zwischen Gruppe und Benutzer",
+"Use TLS" => "Nutze TLS",
+"Do not use it for SSL connections, it will fail." => "Verwenden Sie dies nicht für SSL-Verbindungen, es wird fehlschlagen.",
+"Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)",
+"Turn off SSL certificate validation." => "Schalten Sie die SSL-Zertifikatsprüfung aus.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.",
+"Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.",
+"User Display Name Field" => "Feld für den Anzeigenamen des Benutzers",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. ",
+"Group Display Name Field" => "Feld für den Anzeigenamen der Gruppe",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. ",
+"in bytes" => "in Bytes",
+"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein.",
+"Help" => "Hilfe"
+);
diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php
index 1bb72f163a7..e973eaac0a9 100644
--- a/apps/user_ldap/l10n/el.php
+++ b/apps/user_ldap/l10n/el.php
@@ -10,7 +10,8 @@
"Base Group Tree" => "Base Group Tree",
"Group-Member association" => "Group-Member association",
"Use TLS" => "Χρήση TLS",
-"User Display Name Field" => "User Display Name Field",
+"Not recommended, use for testing only." => "Δεν προτείνεται, χρήση μόνο για δοκιμές.",
+"User Display Name Field" => "Πεδίο Ονόματος Χρήστη",
"Group Display Name Field" => "Group Display Name Field",
"in bytes" => "σε bytes",
"Help" => "Βοήθεια"
diff --git a/apps/user_ldap/l10n/eo.php b/apps/user_ldap/l10n/eo.php
index 683c60ef840..ef8aff8a390 100644
--- a/apps/user_ldap/l10n/eo.php
+++ b/apps/user_ldap/l10n/eo.php
@@ -22,6 +22,7 @@
"Do not use it for SSL connections, it will fail." => "Ne uzu ĝin por SSL-konektoj, ĝi malsukcesos.",
"Case insensitve LDAP server (Windows)" => "LDAP-servilo blinda je litergrandeco (Vindozo)",
"Turn off SSL certificate validation." => "Malkapabligi validkontrolon de SSL-atestiloj.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se la konekto nur funkcias kun ĉi tiu malnepro, enportu la SSL-atestilo de la LDAP-servilo en via ownCloud-servilo.",
"Not recommended, use for testing only." => "Ne rekomendata, uzu ĝin nur por testoj.",
"User Display Name Field" => "Kampo de vidignomo de uzanto",
"The LDAP attribute to use to generate the user`s ownCloud name." => "La atributo de LDAP uzota por generi la ownCloud-an nomon de la uzanto.",
diff --git a/apps/user_ldap/l10n/es_AR.php b/apps/user_ldap/l10n/es_AR.php
new file mode 100644
index 00000000000..6bd452e9d90
--- /dev/null
+++ b/apps/user_ldap/l10n/es_AR.php
@@ -0,0 +1,37 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Servidor",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Podés omitir el protocolo, excepto si SSL es requerido. En ese caso, empezá con ldaps://",
+"Base DN" => "DN base",
+"You can specify Base DN for users and groups in the Advanced tab" => "Podés especificar el DN base para usuarios y grupos en la pestaña \"Avanzado\"",
+"User DN" => "DN usuario",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, dejá DN y contraseña vacíos.",
+"Password" => "Contraseña",
+"For anonymous access, leave DN and Password empty." => "Para acceso anónimo, dejá DN y contraseña vacíos.",
+"User Login Filter" => "Filtro de inicio de sesión de usuario",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define el filtro a aplicar cuando se ha realizado un login. %%uid remplazará el nombre de usuario en el proceso de inicio de sesión.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "usar %%uid como plantilla, p. ej.: \"uid=%%uid\"",
+"User List Filter" => "Lista de filtros de usuario",
+"Defines the filter to apply, when retrieving users." => "Define el filtro a aplicar, cuando se obtienen usuarios.",
+"without any placeholder, e.g. \"objectClass=person\"." => "Sin plantilla, p. ej.: \"objectClass=person\".",
+"Group Filter" => "Filtro de grupo",
+"Defines the filter to apply, when retrieving groups." => "Define el filtro a aplicar cuando se obtienen grupos.",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Sin ninguna plantilla, p. ej.: \"objectClass=posixGroup\".",
+"Port" => "Puerto",
+"Base User Tree" => "Árbol base de usuario",
+"Base Group Tree" => "Árbol base de grupo",
+"Group-Member association" => "Asociación Grupo-Miembro",
+"Use TLS" => "Usar TLS",
+"Do not use it for SSL connections, it will fail." => "No usarlo para SSL, dará error.",
+"Case insensitve LDAP server (Windows)" => "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)",
+"Turn off SSL certificate validation." => "Desactivar la validación por certificado SSL.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Si la conexión sólo funciona con esta opción, importá el certificado SSL del servidor LDAP en tu servidor ownCloud.",
+"Not recommended, use for testing only." => "No recomendado, sólo para pruebas.",
+"User Display Name Field" => "Campo de nombre de usuario a mostrar",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de usuario de ownCloud.",
+"Group Display Name Field" => "Campo de nombre de grupo a mostrar",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de los grupos de ownCloud.",
+"in bytes" => "en bytes",
+"in seconds. A change empties the cache." => "en segundos. Cambiarlo vacía la cache.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Vacío para el nombre de usuario (por defecto). En otro caso, especificá un atributo LDAP/AD.",
+"Help" => "Ayuda"
+);
diff --git a/apps/user_ldap/l10n/id.php b/apps/user_ldap/l10n/id.php
new file mode 100644
index 00000000000..56619634bab
--- /dev/null
+++ b/apps/user_ldap/l10n/id.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Host" => "host",
+"Password" => "kata kunci",
+"User Login Filter" => "gunakan saringan login",
+"Group Filter" => "saringan grup",
+"Port" => "port",
+"Use TLS" => "gunakan TLS",
+"Do not use it for SSL connections, it will fail." => "jangan gunakan untuk koneksi SSL, itu akan gagal.",
+"Turn off SSL certificate validation." => "matikan validasi sertivikat SSL",
+"Not recommended, use for testing only." => "tidak disarankan, gunakan hanya untuk pengujian.",
+"in bytes" => "dalam bytes",
+"in seconds. A change empties the cache." => "dalam detik. perubahan mengosongkan cache",
+"Help" => "bantuan"
+);
diff --git a/apps/user_ldap/l10n/ja_JP.php b/apps/user_ldap/l10n/ja_JP.php
index c8599f56362..ffaae4e9bd2 100644
--- a/apps/user_ldap/l10n/ja_JP.php
+++ b/apps/user_ldap/l10n/ja_JP.php
@@ -32,6 +32,6 @@
"The LDAP attribute to use to generate the groups`s ownCloud name." => "グループのownCloud名の生成に利用するLDAP属性。",
"in bytes" => "バイト",
"in seconds. A change empties the cache." => "秒。変更後にキャッシュがクリアされます。",
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ユーザ名を空のままにしてください(デフォルト)。そうでない場合は、LDAPもしくはADの属性を指定してください.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ユーザ名を空のままにしてください(デフォルト)。そうでない場合は、LDAPもしくはADの属性を指定してください。",
"Help" => "ヘルプ"
);
diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php
new file mode 100644
index 00000000000..18eed6d0142
--- /dev/null
+++ b/apps/user_ldap/l10n/pt_BR.php
@@ -0,0 +1,37 @@
+<?php $TRANSLATIONS = array(
+"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://",
+"Base DN" => "DN Base",
+"You can specify Base DN for users and groups in the Advanced tab" => "Você pode especificar DN Base para usuários e grupos na guia Avançada",
+"User DN" => "DN Usuário",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "O DN do cliente usuário com qual a ligação deverá ser feita, ex. uid=agent,dc=example,dc=com. Para acesso anônimo, deixe DN e Senha vazios.",
+"Password" => "Senha",
+"For anonymous access, leave DN and Password empty." => "Para acesso anônimo, deixe DN e Senha vazios.",
+"User Login Filter" => "Filtro de Login de Usuário",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define o filtro pra aplicar ao efetuar uma tentativa de login. %%uuid substitui o nome de usuário na ação de login.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "use %%uid placeholder, ex. \"uid=%%uid\"",
+"User List Filter" => "Filtro de Lista de Usuário",
+"Defines the filter to apply, when retrieving users." => "Define filtro a aplicar ao obter usuários.",
+"without any placeholder, e.g. \"objectClass=person\"." => "sem nenhum espaço reservado, ex. \"objectClass=person\".",
+"Group Filter" => "Filtro de Grupo",
+"Defines the filter to apply, when retrieving groups." => "Define o filtro a aplicar ao obter grupos.",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sem nenhum espaço reservado, ex. \"objectClass=posixGroup\"",
+"Port" => "Porta",
+"Base User Tree" => "Árvore de Usuário Base",
+"Base Group Tree" => "Árvore de Grupo Base",
+"Group-Member association" => "Associação Grupo-Membro",
+"Use TLS" => "Usar TLS",
+"Do not use it for SSL connections, it will fail." => "Não use-o para conexões SSL, pois falhará.",
+"Case insensitve LDAP server (Windows)" => "Servidor LDAP sensível à caixa alta (Windows)",
+"Turn off SSL certificate validation." => "Desligar validação de certificado SSL.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a conexão só funciona com essa opção, importe o certificado SSL do servidor LDAP no seu servidor ownCloud.",
+"Not recommended, use for testing only." => "Não recomendado, use somente para testes.",
+"User Display Name Field" => "Campo Nome de Exibição de Usuário",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "O atributo LDAP para usar para gerar nome ownCloud do usuário.",
+"Group Display Name Field" => "Campo Nome de Exibição de Grupo",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "O atributo LDAP para usar para gerar nome ownCloud do grupo.",
+"in bytes" => "em bytes",
+"in seconds. A change empties the cache." => "em segundos. Uma mudança esvaziará o cache.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixe vazio para nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD.",
+"Help" => "Ajuda"
+);
diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php
new file mode 100644
index 00000000000..c517949de50
--- /dev/null
+++ b/apps/user_ldap/l10n/pt_PT.php
@@ -0,0 +1,20 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Anfitrião",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Pode omitir o protocolo, excepto se necessitar de SSL. Neste caso, comece com ldaps://",
+"Base DN" => "DN base",
+"You can specify Base DN for users and groups in the Advanced tab" => "Pode especificar o ND Base para utilizadores e grupos no separador Avançado",
+"User DN" => "DN do utilizador",
+"Password" => "Palavra-passe",
+"For anonymous access, leave DN and Password empty." => "Para acesso anónimo, deixe DN e a Palavra-passe vazios.",
+"Defines the filter to apply, when retrieving users." => "Defina o filtro a aplicar, ao recuperar utilizadores.",
+"Group Filter" => "Filtrar por grupo",
+"Defines the filter to apply, when retrieving groups." => "Defina o filtro a aplicar, ao recuperar grupos.",
+"Port" => "Porto",
+"Use TLS" => "Usar TLS",
+"Do not use it for SSL connections, it will fail." => "Não use para ligações SSL, irá falhar.",
+"Turn off SSL certificate validation." => "Desligar a validação de certificado SSL.",
+"in bytes" => "em bytes",
+"in seconds. A change empties the cache." => "em segundos. Uma alteração esvazia a cache.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixe vazio para nome de utilizador (padrão). De outro modo, especifique um atributo LDAP/AD.",
+"Help" => "Ajuda"
+);
diff --git a/apps/user_ldap/l10n/ru_RU.php b/apps/user_ldap/l10n/ru_RU.php
new file mode 100644
index 00000000000..d5adb9fffd3
--- /dev/null
+++ b/apps/user_ldap/l10n/ru_RU.php
@@ -0,0 +1,37 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Хост",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Вы можете пропустить протокол, если Вам не требуется SSL. Затем начните с ldaps://",
+"Base DN" => "База DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "Вы можете задать Base DN для пользователей и групп во вкладке «Дополнительно»",
+"User DN" => "DN пользователя",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN клиентского пользователя, с которого должна осуществляться привязка, например, uid=agent,dc=example,dc=com. Для анонимного доступа оставьте поля DN и Пароль пустыми.",
+"Password" => "Пароль",
+"For anonymous access, leave DN and Password empty." => "Для анонимного доступа оставьте поля DN и пароль пустыми.",
+"User Login Filter" => "Фильтр имен пользователей",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Задает фильтр, применяемый при загрузке пользователя. %%uid заменяет имя пользователя при входе.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "используйте %%uid заполнитель, например, \"uid=%%uid\"",
+"User List Filter" => "Фильтр списка пользователей",
+"Defines the filter to apply, when retrieving users." => "Задает фильтр, применяемый при получении пользователей.",
+"without any placeholder, e.g. \"objectClass=person\"." => "без каких-либо заполнителей, например, \"objectClass=person\".",
+"Group Filter" => "Групповой фильтр",
+"Defines the filter to apply, when retrieving groups." => "Задает фильтр, применяемый при получении групп.",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без каких-либо заполнителей, например, \"objectClass=posixGroup\".",
+"Port" => "Порт",
+"Base User Tree" => "Базовое дерево пользователей",
+"Base Group Tree" => "Базовое дерево групп",
+"Group-Member association" => "Связь член-группа",
+"Use TLS" => "Использовать TLS",
+"Do not use it for SSL connections, it will fail." => "Не используйте это SSL-соединений, это не будет выполнено.",
+"Case insensitve LDAP server (Windows)" => "Нечувствительный к регистру LDAP-сервер (Windows)",
+"Turn off SSL certificate validation." => "Выключить проверку сертификата SSL.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Если соединение работает только с этой опцией, импортируйте SSL-сертификат LDAP сервера в ваш ownCloud сервер.",
+"Not recommended, use for testing only." => "Не рекомендовано, используйте только для тестирования.",
+"User Display Name Field" => "Поле, отображаемое как имя пользователя",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "Атрибут LDAP, используемый для создания имени пользователя в ownCloud.",
+"Group Display Name Field" => "Поле, отображаемое как имя группы",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "Атрибут LDAP, используемый для создания группового имени в ownCloud.",
+"in bytes" => "в байтах",
+"in seconds. A change empties the cache." => "в секундах. Изменение очищает кэш.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Оставьте пустым под имя пользователя (по умолчанию). В противном случае задайте LDAP/AD атрибут.",
+"Help" => "Помощь"
+);
diff --git a/apps/user_ldap/l10n/si_LK.php b/apps/user_ldap/l10n/si_LK.php
new file mode 100644
index 00000000000..fc8099e25e5
--- /dev/null
+++ b/apps/user_ldap/l10n/si_LK.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Host" => "සත්කාරකය",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL අවශ්‍යය වන විට පමණක් හැර, අන් අවස්ථාවන්හිදී ප්‍රොටොකෝලය අත් හැරිය හැක. භාවිතා කරන විට ldaps:// ලෙස ආරම්භ කරන්න",
+"Password" => "මුර පදය",
+"User Login Filter" => "පරිශීලක පිවිසුම් පෙරහන",
+"User List Filter" => "පරිශීලක ලැයිස්තු පෙරහන",
+"Group Filter" => "කණ්ඩායම් පෙරහන",
+"Defines the filter to apply, when retrieving groups." => "කණ්ඩායම් සොයා ලබාගන්නා විට, යොදන පෙරහන නියම කරයි",
+"Port" => "තොට",
+"Use TLS" => "TLS භාවිතා කරන්න",
+"Not recommended, use for testing only." => "නිර්දේශ කළ නොහැක. පරීක්ෂණ සඳහා පමණක් භාවිත කරන්න",
+"Help" => "උදව්"
+);
diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php
new file mode 100644
index 00000000000..2b340c8573d
--- /dev/null
+++ b/apps/user_ldap/l10n/sk_SK.php
@@ -0,0 +1,37 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Hostiteľ",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Môžete vynechať protokol, s výnimkou požadovania SSL. Vtedy začnite s ldaps://",
+"Base DN" => "Základné DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "V rozšírenom nastavení môžete zadať základné DN pre používateľov a skupiny",
+"User DN" => "Používateľské DN",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN klientského používateľa, ku ktorému tvoríte väzbu, napr. uid=agent,dc=example,dc=com. Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.",
+"Password" => "Heslo",
+"For anonymous access, leave DN and Password empty." => "Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.",
+"User Login Filter" => "Filter prihlásenia používateľov",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Určuje použitý filter, pri pokuse o prihlásenie. %%uid nahradzuje používateľské meno v činnosti prihlásenia.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "použite zástupný vzor %%uid, napr. \\\"uid=%%uid\\\"",
+"User List Filter" => "Filter zoznamov používateľov",
+"Defines the filter to apply, when retrieving users." => "Definuje použitý filter, pre získanie používateľov.",
+"without any placeholder, e.g. \"objectClass=person\"." => "bez zástupných znakov, napr. \"objectClass=person\"",
+"Group Filter" => "Filter skupiny",
+"Defines the filter to apply, when retrieving groups." => "Definuje použitý filter, pre získanie skupín.",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znakov, napr. \"objectClass=posixGroup\"",
+"Port" => "Port",
+"Base User Tree" => "Základný používateľský strom",
+"Base Group Tree" => "Základný skupinový strom",
+"Group-Member association" => "Asociácia člena skupiny",
+"Use TLS" => "Použi TLS",
+"Do not use it for SSL connections, it will fail." => "Nepoužívajte pre pripojenie SSL, pripojenie zlyhá.",
+"Case insensitve LDAP server (Windows)" => "LDAP server nerozlišuje veľkosť znakov (Windows)",
+"Turn off SSL certificate validation." => "Vypnúť overovanie SSL certifikátu.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Ak pripojenie pracuje len s touto možnosťou, tak importujte SSL certifikát LDAP serveru do vášho servera ownCloud.",
+"Not recommended, use for testing only." => "Nie je doporučované, len pre testovacie účely.",
+"User Display Name Field" => "Pole pre zobrazenia mena používateľa",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "Atribút LDAP použitý na vygenerovanie mena používateľa ownCloud ",
+"Group Display Name Field" => "Pole pre zobrazenie mena skupiny",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribút LDAP použitý na vygenerovanie mena skupiny ownCloud ",
+"in bytes" => "v bajtoch",
+"in seconds. A change empties the cache." => "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Nechajte prázdne pre používateľské meno (predvolené). Inak uveďte atribút LDAP/AD.",
+"Help" => "Pomoc"
+);
diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php
index fd28b640156..098224bb319 100644
--- a/apps/user_ldap/l10n/sl.php
+++ b/apps/user_ldap/l10n/sl.php
@@ -1,37 +1,37 @@
<?php $TRANSLATIONS = array(
"Host" => "Gostitelj",
-"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokol lahko izpustite, razen če zahtevate SSL. V tem primeru začnite z ldaps://",
+"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://",
"Base DN" => "Osnovni DN",
"You can specify Base DN for users and groups in the Advanced tab" => "Osnovni DN za uporabnike in skupine lahko določite v zavihku Napredno",
"User DN" => "Uporabnik DN",
-"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN uporabnikovega odjemalca, s katerim naj se opravi vezava, npr. uid=agent,dc=example,dc=com. Za anonimni dostop pustite polji DN in geslo prazni.",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN uporabnikovega odjemalca, s katerim naj se opravi vezava, npr. uid=agent,dc=example,dc=com. Za anonimni dostop sta polji DN in geslo prazni.",
"Password" => "Geslo",
-"For anonymous access, leave DN and Password empty." => "Za anonimni dostop pustite polji DN in geslo prazni.",
+"For anonymous access, leave DN and Password empty." => "Za anonimni dostop sta polji DN in geslo prazni.",
"User Login Filter" => "Filter prijav uporabnikov",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Določi filter uporabljen pri prijavi. %%uid nadomesti uporaniško ime pri prijavi.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "Uporabite ogrado %%uid, npr. \"uid=%%uid\".",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Določi filter, uporabljen pri prijavi. %%uid nadomesti uporabniško ime za prijavo.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "Uporabite vsebnik %%uid, npr. \"uid=%%uid\".",
"User List Filter" => "Filter seznama uporabnikov",
"Defines the filter to apply, when retrieving users." => "Določi filter za uporabo med pridobivanjem uporabnikov.",
-"without any placeholder, e.g. \"objectClass=person\"." => "Brez katerekoli ograde, npr. \"objectClass=person\".",
+"without any placeholder, e.g. \"objectClass=person\"." => "Brez kateregakoli vsebnika, npr. \"objectClass=person\".",
"Group Filter" => "Filter skupin",
"Defines the filter to apply, when retrieving groups." => "Določi filter za uporabo med pridobivanjem skupin.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Brez katerekoli ograde, npr. \"objectClass=posixGroup\".",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Brez katerekoli vsebnika, npr. \"objectClass=posixGroup\".",
"Port" => "Vrata",
"Base User Tree" => "Osnovno uporabniško drevo",
"Base Group Tree" => "Osnovno drevo skupine",
"Group-Member association" => "Povezava člana skupine",
"Use TLS" => "Uporabi TLS",
-"Do not use it for SSL connections, it will fail." => "Ne uporabljajte ga za SSL povezave, saj ne bo delovalo.",
-"Case insensitve LDAP server (Windows)" => "LDAP strežnik je neobčutljiv na velikost črk (Windows)",
-"Turn off SSL certificate validation." => "Onemogoči potrditev veljavnosti SSL certifikata.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Če povezava deluje samo s to možnostjo, uvozite SSL potrdilo iz LDAP strežnika v vaš ownCloud strežnik.",
-"Not recommended, use for testing only." => "Odsvetovano, uporabite le v namene preizkušanja.",
+"Do not use it for SSL connections, it will fail." => "Uporaba SSL za povezave bo spodletela.",
+"Case insensitve LDAP server (Windows)" => "Strežnik LDAP ne upošteva velikosti črk (Windows)",
+"Turn off SSL certificate validation." => "Onemogoči potrditev veljavnosti potrdila SSL.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "V primeru, da povezava deluje le s to možnostjo, uvozite potrdilo SSL iz strežnika LDAP na vaš strežnik ownCloud.",
+"Not recommended, use for testing only." => "Dejanje ni priporočeno; uporabljeno naj bo le za preizkušanje delovanja.",
"User Display Name Field" => "Polje za uporabnikovo prikazano ime",
-"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP atribut uporabljen pri ustvarjanju ownCloud uporabniških imen.",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "Atribut LDAP, uporabljen pri ustvarjanju uporabniških imen ownCloud.",
"Group Display Name Field" => "Polje za prikazano ime skupine",
-"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP atribut uporabljen pri ustvarjanju ownCloud imen skupin.",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribut LDAP, uporabljen pri ustvarjanju imen skupin ownCloud.",
"in bytes" => "v bajtih",
"in seconds. A change empties the cache." => "v sekundah. Sprememba izprazni predpomnilnik.",
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Pustite prazno za uporabniško ime (privzeto). V nasprotnem primeru navedite LDAP/AD atribut.",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Pustite prazno za uporabniško ime (privzeto). V nasprotnem primeru navedite atribut LDAP/AD.",
"Help" => "Pomoč"
);
diff --git a/apps/user_ldap/l10n/zh_CN.GB2312.php b/apps/user_ldap/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..8b906aea5ce
--- /dev/null
+++ b/apps/user_ldap/l10n/zh_CN.GB2312.php
@@ -0,0 +1,37 @@
+<?php $TRANSLATIONS = array(
+"Host" => "主机",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "您可以忽略协议,除非您需要 SSL。然后用 ldaps:// 开头",
+"Base DN" => "基本判别名",
+"You can specify Base DN for users and groups in the Advanced tab" => "您可以在高级选项卡中为用户和群组指定基本判别名",
+"User DN" => "用户判别名",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "客户机用户的判别名,将用于绑定,例如 uid=agent, dc=example, dc=com。匿名访问请留空判别名和密码。",
+"Password" => "密码",
+"For anonymous access, leave DN and Password empty." => "匿名访问请留空判别名和密码。",
+"User Login Filter" => "用户登录过滤器",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "定义尝试登录时要应用的过滤器。用 %%uid 替换登录操作中使用的用户名。",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "使用 %%uid 占位符,例如 \"uid=%%uid\"",
+"User List Filter" => "用户列表过滤器",
+"Defines the filter to apply, when retrieving users." => "定义撷取用户时要应用的过滤器。",
+"without any placeholder, e.g. \"objectClass=person\"." => "不能使用占位符,例如 \"objectClass=person\"。",
+"Group Filter" => "群组过滤器",
+"Defines the filter to apply, when retrieving groups." => "定义撷取群组时要应用的过滤器",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "不能使用占位符,例如 \"objectClass=posixGroup\"。",
+"Port" => "端口",
+"Base User Tree" => "基本用户树",
+"Base Group Tree" => "基本群组树",
+"Group-Member association" => "群组-成员组合",
+"Use TLS" => "使用 TLS",
+"Do not use it for SSL connections, it will fail." => "不要使用它进行 SSL 连接,会失败的。",
+"Case insensitve LDAP server (Windows)" => "大小写不敏感的 LDAP 服务器 (Windows)",
+"Turn off SSL certificate validation." => "关闭 SSL 证书校验。",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "如果只有使用此选项才能连接,请导入 LDAP 服务器的 SSL 证书到您的 ownCloud 服务器。",
+"Not recommended, use for testing only." => "不推荐,仅供测试",
+"User Display Name Field" => "用户显示名称字段",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "用于生成用户的 ownCloud 名称的 LDAP 属性。",
+"Group Display Name Field" => "群组显示名称字段",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "用于生成群组的 ownCloud 名称的 LDAP 属性。",
+"in bytes" => "以字节计",
+"in seconds. A change empties the cache." => "以秒计。修改会清空缓存。",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "用户名请留空 (默认)。否则,请指定一个 LDAP/AD 属性。",
+"Help" => "帮助"
+);
diff --git a/apps/user_ldap/l10n/zh_CN.php b/apps/user_ldap/l10n/zh_CN.php
new file mode 100644
index 00000000000..bb961d534b7
--- /dev/null
+++ b/apps/user_ldap/l10n/zh_CN.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"Host" => "主机",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "可以忽略协议,但如要使用SSL,则需以ldaps://开头",
+"Base DN" => "Base DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "您可以在高级选项卡里为用户和组指定Base DN",
+"User DN" => "User DN",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "客户端使用的DN必须与绑定的相同,比如uid=agent,dc=example,dc=com\n如需匿名访问,将DN和密码保留为空",
+"Password" => "密码",
+"For anonymous access, leave DN and Password empty." => "启用匿名访问,将DN和密码保留为空",
+"User Login Filter" => "用户登录过滤",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "定义当尝试登录时的过滤器。 在登录过程中,%%uid将会被用户名替换",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "使用 %%uid作为占位符,例如“uid=%%uid”",
+"User List Filter" => "用户列表过滤",
+"Defines the filter to apply, when retrieving users." => "定义拉取用户时的过滤器",
+"without any placeholder, e.g. \"objectClass=person\"." => "没有任何占位符,如 \"objectClass=person\".",
+"Group Filter" => "组过滤",
+"Defines the filter to apply, when retrieving groups." => "定义拉取组信息时的过滤器",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "无需占位符,例如\"objectClass=posixGroup\"",
+"Port" => "端口",
+"Base User Tree" => "基础用户树",
+"Base Group Tree" => "基础组树",
+"Group-Member association" => "组成员关联",
+"Use TLS" => "使用TLS",
+"Do not use it for SSL connections, it will fail." => "不要在SSL链接中使用此选项,会导致失败。",
+"Case insensitve LDAP server (Windows)" => "大小写敏感LDAP服务器(Windows)",
+"Turn off SSL certificate validation." => "关闭SSL证书验证",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "如果链接仅在此选项时可用,在您的ownCloud服务器中导入LDAP服务器的SSL证书。",
+"Not recommended, use for testing only." => "暂不推荐,仅供测试",
+"User Display Name Field" => "用户显示名称字段",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "用来生成用户的ownCloud名称的 LDAP属性",
+"Group Display Name Field" => "组显示名称字段",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "用来生成组的ownCloud名称的LDAP属性",
+"in bytes" => "字节数",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "将用户名称留空(默认)。否则指定一个LDAP/AD属性",
+"Help" => "帮助"
+);
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 089548a69ba..aa108f9840e 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -26,6 +26,9 @@ namespace OCA\user_ldap\lib;
abstract class Access {
protected $connection;
+ //never ever check this var directly, always use getPagedSearchResultState
+ protected $pagedSearchedSuccessful;
+
public function setConnector(Connection &$connection) {
$this->connection = $connection;
}
@@ -123,7 +126,13 @@ abstract class Access {
* returns the LDAP DN for the given internal ownCloud name of the group
*/
public function groupname2dn($name) {
- return $this->ocname2dn($name, false);
+ $dn = $this->ocname2dn($name, false);
+
+ if($dn) {
+ return $dn;
+ }
+
+ return false;
}
/**
@@ -206,21 +215,17 @@ abstract class Access {
$dn = $this->sanitizeDN($dn);
$table = $this->getMapTable($isUser);
if($isUser) {
+ $fncFindMappedName = 'findMappedUser';
$nameAttribute = $this->connection->ldapUserDisplayName;
} else {
+ $fncFindMappedName = 'findMappedGroup';
$nameAttribute = $this->connection->ldapGroupDisplayName;
}
- $query = \OCP\DB::prepare('
- SELECT `owncloud_name`
- FROM `'.$table.'`
- WHERE `ldap_dn` = ?
- ');
-
//let's try to retrieve the ownCloud name from the mappings table
- $component = $query->execute(array($dn))->fetchOne();
- if($component) {
- return $component;
+ $ocname = $this->$fncFindMappedName($dn);
+ if($ocname) {
+ return $ocname;
}
//second try: get the UUID and check if it is known. Then, update the DN and return the name.
@@ -295,26 +300,50 @@ abstract class Access {
return $this->ldap2ownCloudNames($ldapGroups, false);
}
+ private function findMappedUser($dn) {
+ static $query = null;
+ if(is_null($query)) {
+ $query = \OCP\DB::prepare('
+ SELECT `owncloud_name`
+ FROM `'.$this->getMapTable(true).'`
+ WHERE `ldap_dn` = ?'
+ );
+ }
+ $res = $query->execute(array($dn))->fetchOne();
+ if($res) {
+ return $res;
+ }
+ return false;
+ }
+
+ private function findMappedGroup($dn) {
+ static $query = null;
+ if(is_null($query)) {
+ $query = \OCP\DB::prepare('
+ SELECT `owncloud_name`
+ FROM `'.$this->getMapTable(false).'`
+ WHERE `ldap_dn` = ?'
+ );
+ }
+ $res = $query->execute(array($dn))->fetchOne();
+ if($res) {
+ return $res;
+ }
+ return false;
+ }
+
+
private function ldap2ownCloudNames($ldapObjects, $isUsers) {
if($isUsers) {
- $knownObjects = $this->mappedUsers();
$nameAttribute = $this->connection->ldapUserDisplayName;
} else {
- $knownObjects = $this->mappedGroups();
$nameAttribute = $this->connection->ldapGroupDisplayName;
}
$ownCloudNames = array();
foreach($ldapObjects as $ldapObject) {
- $key = \OCP\Util::recursiveArraySearch($knownObjects, $ldapObject['dn']);
-
- //everything is fine when we know the group
- if($key !== false) {
- $ownCloudNames[] = $knownObjects[$key]['owncloud_name'];
- continue;
- }
-
- $ocname = $this->dn2ocname($ldapObject['dn'], $ldapObject[$nameAttribute], $isUsers);
+ $nameByLDAP = isset($ldapObject[$nameAttribute]) ? $ldapObject[$nameAttribute] : null;
+ $ocname = $this->dn2ocname($ldapObject['dn'], $nameByLDAP, $isUsers);
if($ocname) {
$ownCloudNames[] = $ocname;
}
@@ -385,7 +414,7 @@ abstract class Access {
$sqlAdjustment = '';
$dbtype = \OCP\Config::getSystemValue('dbtype');
if($dbtype == 'mysql') {
- $sqlAdjustment = 'FROM `dual`';
+ $sqlAdjustment = 'FROM DUAL';
}
$insert = \OCP\DB::prepare('
@@ -415,12 +444,12 @@ abstract class Access {
return true;
}
- public function fetchListOfUsers($filter, $attr) {
- return $this->fetchList($this->searchUsers($filter, $attr), (count($attr) > 1));
+ public function fetchListOfUsers($filter, $attr, $limit = null, $offset = null) {
+ return $this->fetchList($this->searchUsers($filter, $attr, $limit, $offset), (count($attr) > 1));
}
- public function fetchListOfGroups($filter, $attr) {
- return $this->fetchList($this->searchGroups($filter, $attr), (count($attr) > 1));
+ public function fetchListOfGroups($filter, $attr, $limit = null, $offset = null) {
+ return $this->fetchList($this->searchGroups($filter, $attr, $limit, $offset), (count($attr) > 1));
}
private function fetchList($list, $manyAttributes) {
@@ -444,8 +473,8 @@ abstract class Access {
*
* Executes an LDAP search
*/
- public function searchUsers($filter, $attr = null) {
- return $this->search($filter, $this->connection->ldapBaseUsers, $attr);
+ public function searchUsers($filter, $attr = null, $limit = null, $offset = null) {
+ return $this->search($filter, $this->connection->ldapBaseUsers, $attr, $limit, $offset);
}
/**
@@ -456,8 +485,8 @@ abstract class Access {
*
* Executes an LDAP search
*/
- public function searchGroups($filter, $attr = null) {
- return $this->search($filter, $this->connection->ldapBaseGroups, $attr);
+ public function searchGroups($filter, $attr = null, $limit = null, $offset = null) {
+ return $this->search($filter, $this->connection->ldapBaseGroups, $attr, $limit, $offset);
}
/**
@@ -469,29 +498,73 @@ abstract class Access {
*
* Executes an LDAP search
*/
- private function search($filter, $base, $attr = null) {
+ private function search($filter, $base, $attr = null, $limit = null, $offset = null, $skipHandling = false) {
if(!is_null($attr) && !is_array($attr)) {
$attr = array(mb_strtolower($attr, 'UTF-8'));
}
- // See if we have a resource
+ // See if we have a resource, in case not cancel with message
$link_resource = $this->connection->getConnectionResource();
- if(is_resource($link_resource)) {
- $sr = ldap_search($link_resource, $base, $filter, $attr);
- $findings = ldap_get_entries($link_resource, $sr );
-
- // if we're here, probably no connection resource is returned.
- // to make ownCloud behave nicely, we simply give back an empty array.
- if(is_null($findings)) {
- return array();
- }
- } else {
+ if(!is_resource($link_resource)) {
// Seems like we didn't find any resource.
// Return an empty array just like before.
\OCP\Util::writeLog('user_ldap', 'Could not search, because resource is missing.', \OCP\Util::DEBUG);
return array();
}
+ //TODO: lines 516:540 into a function of its own. $pagedSearchOK as return
+ //check wether paged query should be attempted
+ $pagedSearchOK = false;
+ if($this->connection->hasPagedResultSupport && !is_null($limit)) {
+ $offset = intval($offset); //can be null
+ //get the cookie from the search for the previous search, required by LDAP
+ $cookie = $this->getPagedResultCookie($filter, $limit, $offset);
+ if(empty($cookie) && ($offset > 0)) {
+ //no cookie known, although the offset is not 0. Maybe cache run out. We need to start all over *sigh* (btw, Dear Reader, did you need LDAP paged searching was designed by MSFT?)
+ $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit;
+ //a bit recursive, $offset of 0 is the exit
+ $this->search($filter, $base, $attr, $limit, $reOffset, true);
+ $cookie = $this->getPagedResultCookie($filter, $limit, $offset);
+ //still no cookie? obviously, the server does not like us. Let's skip paging efforts.
+ //TODO: remember this, probably does not change in the next request...
+ if(empty($cookie)) {
+ $cookie = null;
+ }
+ }
+ if(!is_null($cookie)) {
+ $pagedSearchOK = ldap_control_paged_result($link_resource, $limit, false, $cookie);
+ \OCP\Util::writeLog('user_ldap', 'Ready for a paged search', \OCP\Util::DEBUG);
+ } else {
+ \OCP\Util::writeLog('user_ldap', 'No paged search for us, Cpt., Limit '.$limit.' Offset '.$offset, \OCP\Util::DEBUG);
+ }
+ }
+
+ $sr = ldap_search($link_resource, $base, $filter, $attr);
+ $findings = ldap_get_entries($link_resource, $sr );
+ if($pagedSearchOK) {
+ \OCP\Util::writeLog('user_ldap', 'Paged search successful', \OCP\Util::INFO);
+ ldap_control_paged_result_response($link_resource, $sr, $cookie);
+ \OCP\Util::writeLog('user_ldap', 'Set paged search cookie '.$cookie, \OCP\Util::INFO);
+ $this->setPagedResultCookie($filter, $limit, $offset, $cookie);
+ //browsing through prior pages to get the cookie for the new one
+ if($skipHandling) {
+ return;
+ }
+ //if count is bigger, then the server does not support paged search. Instead, he did a normal search. We set a flag here, so the callee knows how to deal with it.
+ //TODO: Not used, just make a count on the returned values in the callee
+ if($findings['count'] <= $limit) {
+ $this->pagedSearchedSuccessful = true;
+ }
+ } else {
+ \OCP\Util::writeLog('user_ldap', 'Paged search failed :(', \OCP\Util::INFO);
+ }
+
+ // if we're here, probably no connection resource is returned.
+ // to make ownCloud behave nicely, we simply give back an empty array.
+ if(is_null($findings)) {
+ return array();
+ }
+
if(!is_null($attr)) {
$selection = array();
$multiarray = false;
@@ -531,6 +604,7 @@ abstract class Access {
}
}
}
+// die(var_dump($selection));
return $selection;
}
return $findings;
@@ -631,7 +705,7 @@ abstract class Access {
$this->connection->ldapUuidAttribute = $attribute;
return true;
}
- \OCP\Util::writeLog('user_ldap', 'The looked for uuid attr is not '.$attribute.', result was '.print_r($value,true), \OCP\Util::DEBUG);
+ \OCP\Util::writeLog('user_ldap', 'The looked for uuid attr is not '.$attribute.', result was '.print_r($value, true), \OCP\Util::DEBUG);
}
return false;
@@ -654,4 +728,51 @@ abstract class Access {
}
return $uuid;
}
+
+ /**
+ * @brief get a cookie for the next LDAP paged search
+ * @param $filter the search filter to identify the correct search
+ * @param $limit the limit (or 'pageSize'), to identify the correct search well
+ * @param $offset the offset for the new search to identify the correct search really good
+ * @returns string containing the key or empty if none is cached
+ */
+ private function getPagedResultCookie($filter, $limit, $offset) {
+ if($offset == 0) {
+ return '';
+ }
+ $offset -= $limit;
+ //we work with cache here
+ $cachekey = 'lc' . dechex(crc32($filter)) . '-' . $limit . '-' . $offset;
+ $cookie = $this->connection->getFromCache($cachekey);
+ if(is_null($cookie)) {
+ $cookie = '';
+ }
+ return $cookie;
+ }
+
+ /**
+ * @brief set a cookie for LDAP paged search run
+ * @param $filter the search filter to identify the correct search
+ * @param $limit the limit (or 'pageSize'), to identify the correct search well
+ * @param $offset the offset for the run search to identify the correct search really good
+ * @param $cookie string containing the cookie returned by ldap_control_paged_result_response
+ * @return void
+ */
+ private function setPagedResultCookie($filter, $limit, $offset) {
+ if(!empty($cookie)) {
+ $cachekey = 'lc' . dechex(crc32($filter)) . '-' . $limit . '-' . $offset;
+ $cookie = $this->connection->writeToCache($cachekey, $cookie);
+ }
+ }
+
+ /**
+ * @brief check wether the most recent paged search was successful. It flushed the state var. Use it always after a possible paged search.
+ * @return true on success, null or false otherwise
+ */
+ public function getPagedSearchResultState() {
+ $result = $this->pagedSearchedSuccessful;
+ $this->pagedSearchedSuccessful = null;
+ return $result;
+ }
+
} \ No newline at end of file
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index 1922e7ff1f2..a570b29b793 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -56,15 +56,20 @@ class Connection {
'ldapUuidAttribute' => null,
'ldapOverrideUuidAttribute' => null,
'homeFolderNamingRule' => null,
+ 'hasPagedResultSupport' => false,
);
public function __construct($configID = 'user_ldap') {
$this->configID = $configID;
$this->cache = \OC_Cache::getGlobalCache();
+ $this->config['hasPagedResultSupport'] = (function_exists('ldap_control_paged_result') && function_exists('ldap_control_paged_result_response'));
+ \OCP\Util::writeLog('user_ldap', 'PHP supports paged results? '.print_r($this->config['hasPagedResultSupport'], true), \OCP\Util::INFO);
}
public function __destruct() {
- @ldap_unbind($this->ldapConnectionRes);
+ if(is_resource($this->ldapConnectionRes)) {
+ @ldap_unbind($this->ldapConnectionRes);
+ };
}
public function __get($name) {
@@ -258,7 +263,7 @@ class Connection {
if(empty($this->config['ldapGroupFilter']) && empty($this->config['ldapGroupMemberAssocAttr'])) {
\OCP\Util::writeLog('user_ldap', 'No group filter is specified, LDAP group feature will not be used.', \OCP\Util::INFO);
}
- if(!in_array($this->config['ldapUuidAttribute'], array('auto','entryuuid', 'nsuniqueid', 'objectguid'))) {
+ if(!in_array($this->config['ldapUuidAttribute'], array('auto','entryuuid', 'nsuniqueid', 'objectguid')) && (!is_null($this->configID))) {
\OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
\OCP\Util::writeLog('user_ldap', 'Illegal value for the UUID Attribute, reset to autodetect.', \OCP\Util::INFO);
}
@@ -357,4 +362,4 @@ class Connection {
return true;
}
-} \ No newline at end of file
+}
diff --git a/apps/user_ldap/lib/jobs.php b/apps/user_ldap/lib/jobs.php
index aff519226c8..b265a8339ef 100644
--- a/apps/user_ldap/lib/jobs.php
+++ b/apps/user_ldap/lib/jobs.php
@@ -43,7 +43,7 @@ class Jobs {
if(empty($actualGroups) && empty($knownGroups)) {
\OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – groups do not seem to be configured properly, aborting.', \OCP\Util::INFO);
- \OCP\setAppValue('user_ldap', 'bgjUpdateGroupsLastRun', time());
+ \OCP\Config::setAppValue('user_ldap', 'bgjUpdateGroupsLastRun', time());
return;
}
diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php
index b953127d86e..2acb8c35a19 100644
--- a/apps/user_ldap/tests/group_ldap.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -29,18 +29,18 @@ class Test_Group_Ldap extends UnitTestCase {
OC_Group::useBackend(new OCA\user_ldap\GROUP_LDAP());
$group_ldap = new OCA\user_ldap\GROUP_LDAP();
- $this->assertIsA(OC_Group::getGroups(),gettype(array()));
- $this->assertIsA($group_ldap->getGroups(),gettype(array()));
+ $this->assertIsA(OC_Group::getGroups(), gettype(array()));
+ $this->assertIsA($group_ldap->getGroups(), gettype(array()));
- $this->assertFalse(OC_Group::inGroup('john','dosers'),gettype(false));
- $this->assertFalse($group_ldap->inGroup('john','dosers'),gettype(false));
+ $this->assertFalse(OC_Group::inGroup('john','dosers'), gettype(false));
+ $this->assertFalse($group_ldap->inGroup('john','dosers'), gettype(false));
//TODO: check also for expected true result. This backend won't be able to do any modifications, maybe use a dummy for this.
- $this->assertIsA(OC_Group::getUserGroups('john doe'),gettype(array()));
- $this->assertIsA($group_ldap->getUserGroups('john doe'),gettype(array()));
+ $this->assertIsA(OC_Group::getUserGroups('john doe'), gettype(array()));
+ $this->assertIsA($group_ldap->getUserGroups('john doe'), gettype(array()));
- $this->assertIsA(OC_Group::usersInGroup('campers'),gettype(array()));
- $this->assertIsA($group_ldap->usersInGroup('campers'),gettype(array()));
+ $this->assertIsA(OC_Group::usersInGroup('campers'), gettype(array()));
+ $this->assertIsA($group_ldap->usersInGroup('campers'), gettype(array()));
}
}
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index bacdb8b9ae1..e95bd24fbdd 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -29,11 +29,13 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
private function updateQuota($dn) {
$quota = null;
- if(!empty($this->connection->ldapQuotaDefault)) {
- $quota = $this->connection->ldapQuotaDefault;
+ $quotaDefault = $this->connection->ldapQuotaDefault;
+ $quotaAttribute = $this->connection->ldapQuotaAttribute;
+ if(!empty($quotaDefault)) {
+ $quota = $quotaDefault;
}
- if(!empty($this->connection->ldapQuotaAttribute)) {
- $aQuota = $this->readAttribute($dn, $this->connection->ldapQuotaAttribute);
+ if(!empty($quotaAttribute)) {
+ $aQuota = $this->readAttribute($dn, $quotaAttribute);
if($aQuota && (count($aQuota) > 0)) {
$quota = $aQuota[0];
@@ -46,8 +48,9 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
private function updateEmail($dn) {
$email = null;
- if(!empty($this->connection->ldapEmailAttribute)) {
- $aEmail = $this->readAttribute($dn, $this->connection->ldapEmailAttribute);
+ $emailAttribute = $this->connection->ldapEmailAttribute;
+ if(!empty($emailAttribute)) {
+ $aEmail = $this->readAttribute($dn, $emailAttribute);
if($aEmail && (count($aEmail) > 0)) {
$email = $aEmail[0];
}
@@ -101,24 +104,38 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
* Get a list of all users.
*/
public function getUsers($search = '', $limit = 10, $offset = 0) {
- $ldap_users = $this->connection->getFromCache('getUsers');
- if(is_null($ldap_users)) {
- $ldap_users = $this->fetchListOfUsers($this->connection->ldapUserFilter, array($this->connection->ldapUserDisplayName, 'dn'));
- $ldap_users = $this->ownCloudUserNames($ldap_users);
- $this->connection->writeToCache('getUsers', $ldap_users);
- }
- $this->userSearch = $search;
- if(!empty($this->userSearch)) {
- $ldap_users = array_filter($ldap_users, array($this, 'userMatchesFilter'));
+ $cachekey = 'getUsers-'.$search.'-'.$limit.'-'.$offset;
+
+ //check if users are cached, if so return
+ $ldap_users = $this->connection->getFromCache($cachekey);
+ if(!is_null($ldap_users)) {
+ return $ldap_users;
}
- if($limit = -1) {
- $limit = null;
+
+ //prepare search filter
+ $search = empty($search) ? '*' : '*'.$search.'*';
+ $filter = $this->combineFilterWithAnd(array(
+ $this->connection->ldapUserFilter,
+ $this->connection->ldapGroupDisplayName.'='.$search
+ ));
+
+ \OCP\Util::writeLog('user_ldap', 'getUsers: Get users filter '.$filter, \OCP\Util::DEBUG);
+ //do the search and translate results to owncloud names
+ $ldap_users = $this->fetchListOfUsers($filter, array($this->connection->ldapUserDisplayName, 'dn'), $limit, $offset);
+ $ldap_users = $this->ownCloudUserNames($ldap_users);
+
+ if(!$this->getPagedSearchResultState()) {
+ \OCP\Util::writeLog('user_ldap', 'getUsers: We got old-style results', \OCP\Util::DEBUG);
+ //if not supported, a 'normal' search has run automatically, we just need to get our slice of the cake. And we cache the general search, too
+ $this->connection->writeToCache('getUsers-'.$search, $ldap_users);
+ $ldap_users = array_slice($ldap_users, $offset, $limit);
+ } else {
+ //debug message only
+ \OCP\Util::writeLog('user_ldap', 'getUsers: We got paged results', \OCP\Util::DEBUG);
}
- return array_slice($ldap_users, $offset, $limit);
- }
- public function userMatchesFilter($user) {
- return (strripos($user, $this->userSearch) !== false);
+ $this->connection->writeToCache($cachekey, $ldap_users);
+ return $ldap_users;
}
/**
diff --git a/apps/user_webdavauth/appinfo/info.xml b/apps/user_webdavauth/appinfo/info.xml
index dc555739f46..9a8027daee6 100755
--- a/apps/user_webdavauth/appinfo/info.xml
+++ b/apps/user_webdavauth/appinfo/info.xml
@@ -6,6 +6,6 @@
<version>1.0</version>
<licence>AGPL</licence>
<author>Frank Karlitschek</author>
- <require>3</require>
+ <require>4.9</require>
<shipped>true</shipped>
</info>
diff --git a/apps/user_webdavauth/user_webdavauth.php b/apps/user_webdavauth/user_webdavauth.php
index c36d37c1fa2..bd9f45d357b 100755
--- a/apps/user_webdavauth/user_webdavauth.php
+++ b/apps/user_webdavauth/user_webdavauth.php
@@ -51,7 +51,7 @@ class OC_USER_WEBDAVAUTH extends OC_User_Backend {
$url= 'http://'.urlencode($uid).':'.urlencode($password).'@'.$this->webdavauth_url;
$headers = get_headers($url);
if($headers==false) {
- OC_Log::write('OC_USER_WEBDAVAUTH', 'Not possible to connect to WebDAV Url: "'.$this->webdavauth_url.'" ' ,3);
+ OC_Log::write('OC_USER_WEBDAVAUTH', 'Not possible to connect to WebDAV Url: "'.$this->webdavauth_url.'" ', 3);
return false;
}