summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/encryption/l10n/fa.js1
-rw-r--r--apps/encryption/l10n/fa.json1
-rw-r--r--apps/files/css/files.css4
-rw-r--r--apps/files/js/file-upload.js7
-rw-r--r--apps/files/js/fileactions.js3
-rw-r--r--apps/files/js/filelist.js4
-rw-r--r--apps/files/l10n/ar.js44
-rw-r--r--apps/files/l10n/ar.json44
-rw-r--r--apps/files/l10n/fa.js51
-rw-r--r--apps/files/l10n/fa.json51
-rw-r--r--apps/files/l10n/fi_FI.js3
-rw-r--r--apps/files/l10n/fi_FI.json3
-rw-r--r--apps/files/l10n/hy.js11
-rw-r--r--apps/files/l10n/hy.json11
-rw-r--r--apps/files/l10n/it.js3
-rw-r--r--apps/files/l10n/it.json3
-rw-r--r--apps/files/l10n/ko.js3
-rw-r--r--apps/files/l10n/ko.json3
-rw-r--r--apps/files/l10n/nl.js3
-rw-r--r--apps/files/l10n/nl.json3
-rw-r--r--apps/files/l10n/pt_BR.js3
-rw-r--r--apps/files/l10n/pt_BR.json3
-rw-r--r--apps/files/lib/activity.php38
-rw-r--r--apps/files/tests/js/fileactionsSpec.js56
-rw-r--r--apps/files/tests/js/mainfileinfodetailviewSpec.js2
-rw-r--r--apps/files_external/l10n/es_MX.js1
-rw-r--r--apps/files_external/l10n/es_MX.json1
-rw-r--r--apps/files_external/l10n/fa.js26
-rw-r--r--apps/files_external/l10n/fa.json26
-rw-r--r--apps/files_external/l10n/hy.js5
-rw-r--r--apps/files_external/l10n/hy.json5
-rw-r--r--apps/files_external/l10n/ko.js10
-rw-r--r--apps/files_external/l10n/ko.json10
-rw-r--r--apps/files_external/l10n/oc.js15
-rw-r--r--apps/files_external/l10n/oc.json15
-rw-r--r--apps/files_external/l10n/ro.js1
-rw-r--r--apps/files_external/l10n/ro.json1
-rw-r--r--apps/files_external/lib/config.php5
-rw-r--r--apps/files_sharing/api/remote.php101
-rw-r--r--apps/files_sharing/appinfo/app.php3
-rw-r--r--apps/files_sharing/appinfo/routes.php20
-rw-r--r--apps/files_sharing/js/sharedfilelist.js73
-rw-r--r--apps/files_sharing/l10n/ar.js1
-rw-r--r--apps/files_sharing/l10n/ar.json1
-rw-r--r--apps/files_sharing/l10n/de.js5
-rw-r--r--apps/files_sharing/l10n/de.json5
-rw-r--r--apps/files_sharing/l10n/fa.js9
-rw-r--r--apps/files_sharing/l10n/fa.json9
-rw-r--r--apps/files_sharing/l10n/fi_FI.js8
-rw-r--r--apps/files_sharing/l10n/fi_FI.json8
-rw-r--r--apps/files_sharing/l10n/hy.js3
-rw-r--r--apps/files_sharing/l10n/hy.json3
-rw-r--r--apps/files_sharing/l10n/it.js8
-rw-r--r--apps/files_sharing/l10n/it.json8
-rw-r--r--apps/files_sharing/l10n/ko.js12
-rw-r--r--apps/files_sharing/l10n/ko.json12
-rw-r--r--apps/files_sharing/l10n/nl.js8
-rw-r--r--apps/files_sharing/l10n/nl.json8
-rw-r--r--apps/files_sharing/l10n/pt_BR.js8
-rw-r--r--apps/files_sharing/l10n/pt_BR.json8
-rw-r--r--apps/files_sharing/lib/activity.php130
-rw-r--r--apps/files_sharing/lib/external/manager.php17
-rw-r--r--apps/files_sharing/tests/activity.php5
-rw-r--r--apps/files_sharing/tests/js/sharedfilelistSpec.js115
-rw-r--r--apps/files_trashbin/l10n/ar.js6
-rw-r--r--apps/files_trashbin/l10n/ar.json6
-rw-r--r--apps/files_trashbin/l10n/fa.js6
-rw-r--r--apps/files_trashbin/l10n/fa.json6
-rw-r--r--apps/files_trashbin/l10n/hy.js8
-rw-r--r--apps/files_trashbin/l10n/hy.json8
-rw-r--r--apps/files_trashbin/lib/storage.php7
-rw-r--r--apps/files_trashbin/lib/trashbin.php37
-rw-r--r--apps/files_versions/js/versioncollection.js5
-rw-r--r--apps/files_versions/js/versionstabview.js10
-rw-r--r--apps/files_versions/l10n/hy.js7
-rw-r--r--apps/files_versions/l10n/hy.json5
-rw-r--r--apps/files_versions/lib/storage.php9
-rw-r--r--apps/files_versions/tests/js/versionstabviewSpec.js2
-rw-r--r--apps/user_ldap/l10n/fa.js10
-rw-r--r--apps/user_ldap/l10n/fa.json10
-rw-r--r--apps/user_ldap/l10n/hr.js1
-rw-r--r--apps/user_ldap/l10n/hr.json1
-rw-r--r--apps/user_ldap/l10n/hy.js3
-rw-r--r--apps/user_ldap/l10n/hy.json3
-rw-r--r--apps/user_ldap/l10n/ka_GE.js1
-rw-r--r--apps/user_ldap/l10n/ka_GE.json1
-rw-r--r--apps/user_ldap/l10n/lt_LT.js1
-rw-r--r--apps/user_ldap/l10n/lt_LT.json1
-rw-r--r--apps/user_ldap/l10n/pt_PT.js1
-rw-r--r--apps/user_ldap/l10n/pt_PT.json1
-rw-r--r--apps/user_ldap/lib/wizard.php9
91 files changed, 1116 insertions, 116 deletions
diff --git a/apps/encryption/l10n/fa.js b/apps/encryption/l10n/fa.js
index 706491f45a4..1793326a3f9 100644
--- a/apps/encryption/l10n/fa.js
+++ b/apps/encryption/l10n/fa.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "کلید بازیابی نمی تواند فعال شود. لطفا رمزعبور کلید بازیابی خود را بررسی نمایید!",
"Recovery key successfully disabled" : "کلید بازیابی با موفقیت غیر فعال شده است.",
"Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!",
+ "Missing parameters" : "پارامترهای فراموش شده",
"Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.",
"Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
diff --git a/apps/encryption/l10n/fa.json b/apps/encryption/l10n/fa.json
index 1071fd6e110..3b863326db4 100644
--- a/apps/encryption/l10n/fa.json
+++ b/apps/encryption/l10n/fa.json
@@ -3,6 +3,7 @@
"Could not enable recovery key. Please check your recovery key password!" : "کلید بازیابی نمی تواند فعال شود. لطفا رمزعبور کلید بازیابی خود را بررسی نمایید!",
"Recovery key successfully disabled" : "کلید بازیابی با موفقیت غیر فعال شده است.",
"Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!",
+ "Missing parameters" : "پارامترهای فراموش شده",
"Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.",
"Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 2ba1f774d49..d0a2cce1a86 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -570,6 +570,10 @@ a.action > img {
margin-bottom: -1px;
}
+html.ie8 .column-mtime .selectedActions {
+ top: -95px;
+}
+
#fileList a.action {
display: inline;
padding: 17px 8px;
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 03330ad7c5d..8bae8567a05 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -201,8 +201,11 @@ OC.Upload = {
return true;
});
if (conflicts.length) {
- _.each(conflicts, function(conflictData) {
- OC.dialogs.fileexists(conflictData[1], conflictData[0], conflictData[1].files[0], OC.Upload);
+ // wait for template loading
+ OC.dialogs.fileexists(null, null, null, OC.Upload).done(function() {
+ _.each(conflicts, function(conflictData) {
+ OC.dialogs.fileexists(conflictData[1], conflictData[0], conflictData[1].files[0], OC.Upload);
+ });
});
}
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index bde0b094b87..079c5330ec2 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -144,7 +144,8 @@
order: action.order || 0,
icon: action.icon,
permissions: action.permissions,
- type: action.type || FileActions.TYPE_DROPDOWN
+ type: action.type || FileActions.TYPE_DROPDOWN,
+ altText: action.altText || ''
};
if (_.isUndefined(action.displayName)) {
actionSpec.displayName = t('files', name);
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 9c4e43b3b8b..2516dd3e957 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -233,6 +233,7 @@
this.$el.find('thead th .columntitle').click(_.bind(this._onClickHeader, this));
this._onResize = _.debounce(_.bind(this._onResize, this), 100);
+ $('#app-content').on('appresized', this._onResize);
$(window).resize(this._onResize);
this.$el.on('show', this._onResize);
@@ -278,6 +279,7 @@
this.fileActions.off('registerAction', this._onFileActionsUpdated);
this.fileActions.off('setDefault', this._onFileActionsUpdated);
OC.Plugins.detach('OCA.Files.FileList', this);
+ $('#app-content').off('appresized', this._onResize);
},
/**
@@ -437,6 +439,8 @@
this.breadcrumb.setMaxWidth(containerWidth - actionsWidth - 10);
+ this.$table.find('>thead').width($('#app-content').width() - OC.Util.getScrollBarWidth());
+
this.updateSearch();
},
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index f6bc5581b76..0e20f237022 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -1,9 +1,16 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "وحدة التخزين غير متوفرة ",
+ "Storage invalid" : "وحدة تخزين غير صالحه ",
"Unknown error" : "خطأ غير معروف. ",
"Could not move %s - File with this name already exists" : "فشل في نقل الملف %s - يوجد ملف بنفس هذا الاسم",
"Could not move %s" : "فشل في نقل %s",
+ "Permission denied" : "تم رفض الاذن ",
+ "The target folder has been moved or deleted." : "المجلد المطلوب قد تم نقله او حذفه ",
+ "The name %s is already used in the folder %s. Please choose a different name." : "هذا الاسم %s مستخدم مسبقا في المجلد %s . فضلا اختر اسم مختلف .",
+ "Error when creating the file" : "خطأ اثناء انشاء الملف ",
+ "Error when creating the folder" : "خطأ اثناء انشاء المجلد ",
"Unable to set upload directory." : "غير قادر على تحميل المجلد",
"Invalid Token" : "علامة غير صالحة",
"No file was uploaded. Unknown error" : "لم يتم رفع أي ملف , خطأ غير معروف",
@@ -24,34 +31,52 @@ OC.L10N.register(
"Home" : "البيت",
"Close" : "إغلاق",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "تعذر رفع الملف {filename} إما لأنه مجلد أو لان حجم الملف 0 بايت",
+ "Total file size {size1} exceeds upload limit {size2}" : "حجم الملف الكلي {size1} تجاوز الحد المسموح للرفع {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "لا يوجد مساحة تخزين كافية، انت تقوم برفع {size1} ولكن المساحه المتوفره هي {size2}.",
"Upload cancelled." : "تم إلغاء عملية رفع الملفات .",
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"File upload is in progress. Leaving the page now will cancel the upload." : "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.",
"Actions" : "* تطبيقات.\n* أنشطة.",
"Download" : "تحميل",
"Rename" : "إعادة التسمية",
- "Delete" : "إلغاء",
+ "Delete" : "حذف ",
"Details" : "تفاصيل",
+ "Select" : "اختار",
"Pending" : "قيد الانتظار",
+ "Unable to determine date" : "تعذر تحديد التاريخ",
+ "This operation is forbidden" : "هذة العملية ممنوعة ",
+ "Error moving file." : "خطأ اثناء نقل الملف ",
"Error moving file" : "حدث خطأ أثناء نقل الملف",
"Error" : "خطأ",
"{new_name} already exists" : "{new_name} موجود مسبقا",
+ "Could not rename file" : "لا يستطيع اعادة تسمية الملف",
+ "Could not create file" : "لا يستطيع انشاء ملف ",
+ "Could not create folder" : "لا يستطيع انشاء مجلد ",
+ "Error deleting file." : "خطأ اثناء حذف الملف ",
+ "No entries in this folder match '{filter}'" : "لا يوجد مدخلات في هذا المجلد تتوافق مع '{filter}'",
"Name" : "اسم",
"Size" : "حجم",
"Modified" : "معدل",
"_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"],
"_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"],
"{dirs} and {files}" : "{dirs} و {files}",
+ "You don’t have permission to upload or create files here" : "لا تملك الصلاحية لرفع او انشاء ملف هنا ",
"_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"],
"New" : "جديد",
+ "\"{name}\" is an invalid file name." : "\"{name}\" اسم ملف غير صالح للاستخدام .",
"File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا",
- "Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "مساحة تخزين {owner} ممتلئة، لا يمكن تحديث الملفات او مزامنتها بعد الان !",
+ "Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكن تحديث ملفاتك أو مزامنتها بعد الآن !",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "المساحة التخزينية لـ {owner} ممتلئة تقريبا ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
"Favorite" : "المفضلة",
+ "{newname} already exists" : "{newname} موجود مسبقاً",
"Upload" : "رفع",
- "Text file" : "ملف",
+ "Text file" : "ملف نصي",
+ "New text file.txt" : "ملف نصي جديد fille.txt",
"Folder" : "مجلد",
"New folder" : "مجلد جديد",
+ "An error occurred while trying to update the tags" : "حدث خطأ اثناء محاولة تحديث tags",
"A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ",
"A file or folder has been <strong>changed</strong>" : "تم <strong> تغيير</strong> ملف أو مجلد",
"A file or folder has been <strong>deleted</strong>" : "تم <strong>حذف </strong> ملف أو مجلد",
@@ -65,17 +90,28 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s حذف %1$s",
"You restored %1$s" : "لقد قمت باستعادة %1$s",
"%2$s restored %1$s" : "%2$s مستعاد %1$s",
+ "%s could not be renamed as it has been deleted" : "%s لا يمكن اعادة تسميته فقد تم حذفه ",
"%s could not be renamed" : "%s لا يمكن إعادة تسميته. ",
+ "Upload (max. %s)" : "الرفع ( حد اقصى. %s ) ",
"File handling" : "التعامل مع الملف",
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
+ "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "بستخدام PHP-FPM هذه القيمة سوف تحتاج الي 5 دقائق حتي تُتِم عملها بعد الحفظ ",
"Save" : "حفظ",
+ "Can not be edited from here due to insufficient permissions." : "لا يمكن التعديل من هنا نظرا لعدم توفر الصلاحيات الكافيه ",
"Settings" : "إعدادات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا العنوان لـ <a href=\"%s\" target=\"_blank\">الدخول الى ملفاتك عن طريق WebDAV</a>",
"Cancel upload" : "إلغاء الرفع",
+ "No files in here" : "لا يوجد ملفات هنا ",
+ "Upload some content or sync with your devices!" : "ارفع بعض المحتوي او زامن مع اجهزتك !",
+ "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
+ "Select all" : "تحديد الكل ",
"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." : "يرجى الانتظار , جاري فحص الملفات ."
+ "Files are being scanned, please wait." : "يرجى الانتظار , جاري فحص الملفات .",
+ "Currently scanning" : "حالياً يقوم بالفحص",
+ "No favorites" : "لا يوجد مفضلات ",
+ "Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا "
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 2de484b30f2..e1b2eb3af1b 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -1,7 +1,14 @@
{ "translations": {
+ "Storage not available" : "وحدة التخزين غير متوفرة ",
+ "Storage invalid" : "وحدة تخزين غير صالحه ",
"Unknown error" : "خطأ غير معروف. ",
"Could not move %s - File with this name already exists" : "فشل في نقل الملف %s - يوجد ملف بنفس هذا الاسم",
"Could not move %s" : "فشل في نقل %s",
+ "Permission denied" : "تم رفض الاذن ",
+ "The target folder has been moved or deleted." : "المجلد المطلوب قد تم نقله او حذفه ",
+ "The name %s is already used in the folder %s. Please choose a different name." : "هذا الاسم %s مستخدم مسبقا في المجلد %s . فضلا اختر اسم مختلف .",
+ "Error when creating the file" : "خطأ اثناء انشاء الملف ",
+ "Error when creating the folder" : "خطأ اثناء انشاء المجلد ",
"Unable to set upload directory." : "غير قادر على تحميل المجلد",
"Invalid Token" : "علامة غير صالحة",
"No file was uploaded. Unknown error" : "لم يتم رفع أي ملف , خطأ غير معروف",
@@ -22,34 +29,52 @@
"Home" : "البيت",
"Close" : "إغلاق",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "تعذر رفع الملف {filename} إما لأنه مجلد أو لان حجم الملف 0 بايت",
+ "Total file size {size1} exceeds upload limit {size2}" : "حجم الملف الكلي {size1} تجاوز الحد المسموح للرفع {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "لا يوجد مساحة تخزين كافية، انت تقوم برفع {size1} ولكن المساحه المتوفره هي {size2}.",
"Upload cancelled." : "تم إلغاء عملية رفع الملفات .",
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"File upload is in progress. Leaving the page now will cancel the upload." : "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.",
"Actions" : "* تطبيقات.\n* أنشطة.",
"Download" : "تحميل",
"Rename" : "إعادة التسمية",
- "Delete" : "إلغاء",
+ "Delete" : "حذف ",
"Details" : "تفاصيل",
+ "Select" : "اختار",
"Pending" : "قيد الانتظار",
+ "Unable to determine date" : "تعذر تحديد التاريخ",
+ "This operation is forbidden" : "هذة العملية ممنوعة ",
+ "Error moving file." : "خطأ اثناء نقل الملف ",
"Error moving file" : "حدث خطأ أثناء نقل الملف",
"Error" : "خطأ",
"{new_name} already exists" : "{new_name} موجود مسبقا",
+ "Could not rename file" : "لا يستطيع اعادة تسمية الملف",
+ "Could not create file" : "لا يستطيع انشاء ملف ",
+ "Could not create folder" : "لا يستطيع انشاء مجلد ",
+ "Error deleting file." : "خطأ اثناء حذف الملف ",
+ "No entries in this folder match '{filter}'" : "لا يوجد مدخلات في هذا المجلد تتوافق مع '{filter}'",
"Name" : "اسم",
"Size" : "حجم",
"Modified" : "معدل",
"_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"],
"_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"],
"{dirs} and {files}" : "{dirs} و {files}",
+ "You don’t have permission to upload or create files here" : "لا تملك الصلاحية لرفع او انشاء ملف هنا ",
"_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"],
"New" : "جديد",
+ "\"{name}\" is an invalid file name." : "\"{name}\" اسم ملف غير صالح للاستخدام .",
"File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا",
- "Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "مساحة تخزين {owner} ممتلئة، لا يمكن تحديث الملفات او مزامنتها بعد الان !",
+ "Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكن تحديث ملفاتك أو مزامنتها بعد الآن !",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "المساحة التخزينية لـ {owner} ممتلئة تقريبا ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
"Favorite" : "المفضلة",
+ "{newname} already exists" : "{newname} موجود مسبقاً",
"Upload" : "رفع",
- "Text file" : "ملف",
+ "Text file" : "ملف نصي",
+ "New text file.txt" : "ملف نصي جديد fille.txt",
"Folder" : "مجلد",
"New folder" : "مجلد جديد",
+ "An error occurred while trying to update the tags" : "حدث خطأ اثناء محاولة تحديث tags",
"A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ",
"A file or folder has been <strong>changed</strong>" : "تم <strong> تغيير</strong> ملف أو مجلد",
"A file or folder has been <strong>deleted</strong>" : "تم <strong>حذف </strong> ملف أو مجلد",
@@ -63,17 +88,28 @@
"%2$s deleted %1$s" : "%2$s حذف %1$s",
"You restored %1$s" : "لقد قمت باستعادة %1$s",
"%2$s restored %1$s" : "%2$s مستعاد %1$s",
+ "%s could not be renamed as it has been deleted" : "%s لا يمكن اعادة تسميته فقد تم حذفه ",
"%s could not be renamed" : "%s لا يمكن إعادة تسميته. ",
+ "Upload (max. %s)" : "الرفع ( حد اقصى. %s ) ",
"File handling" : "التعامل مع الملف",
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
+ "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "بستخدام PHP-FPM هذه القيمة سوف تحتاج الي 5 دقائق حتي تُتِم عملها بعد الحفظ ",
"Save" : "حفظ",
+ "Can not be edited from here due to insufficient permissions." : "لا يمكن التعديل من هنا نظرا لعدم توفر الصلاحيات الكافيه ",
"Settings" : "إعدادات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا العنوان لـ <a href=\"%s\" target=\"_blank\">الدخول الى ملفاتك عن طريق WebDAV</a>",
"Cancel upload" : "إلغاء الرفع",
+ "No files in here" : "لا يوجد ملفات هنا ",
+ "Upload some content or sync with your devices!" : "ارفع بعض المحتوي او زامن مع اجهزتك !",
+ "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
+ "Select all" : "تحديد الكل ",
"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." : "يرجى الانتظار , جاري فحص الملفات ."
+ "Files are being scanned, please wait." : "يرجى الانتظار , جاري فحص الملفات .",
+ "Currently scanning" : "حالياً يقوم بالفحص",
+ "No favorites" : "لا يوجد مفضلات ",
+ "Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا "
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
} \ No newline at end of file
diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js
index d238f45eb7e..1dc459ab584 100644
--- a/apps/files/l10n/fa.js
+++ b/apps/files/l10n/fa.js
@@ -1,9 +1,16 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "فضای ذخیره سازی موجود نیست",
+ "Storage invalid" : "فضای ذخیره‌سازی نامعتبر",
"Unknown error" : "خطای نامشخص",
"Could not move %s - File with this name already exists" : "%s نمی توان جابجا کرد - در حال حاضر پرونده با این نام وجود دارد. ",
"Could not move %s" : "%s نمی تواند حرکت کند ",
+ "Permission denied" : "رد دسترسی",
+ "The target folder has been moved or deleted." : "پوشه مقصد انتقال یافته یا حذف شده است.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "نام %s هم‌اکنون در پوشه %s مورد استفاده قرار گرفته شده است. لطفا نام دیگری انتخاب کنید.",
+ "Error when creating the file" : "خطا در حین ایجاد فایل",
+ "Error when creating the folder" : "خطا در حین ایجاد پوشه",
"Unable to set upload directory." : "قادر به تنظیم پوشه آپلود نمی باشد.",
"Invalid Token" : "رمز نامعتبر",
"No file was uploaded. Unknown error" : "هیچ فایلی آپلود نشد.خطای ناشناس",
@@ -15,33 +22,65 @@ OC.L10N.register(
"Missing a temporary folder" : "یک پوشه موقت گم شده",
"Failed to write to disk" : "نوشتن بر روی دیسک سخت ناموفق بود",
"Not enough storage available" : "فضای کافی در دسترس نیست",
+ "Upload failed. Could not find uploaded file" : "خطا در آپلود. امکان یافتن فایل‌های آپلود شده وجود ندارد",
+ "Upload failed. Could not get file info." : "خطای آپلود. امکان دریافت جزئیات فایل وجود ندارد.",
"Invalid directory." : "فهرست راهنما نامعتبر می باشد.",
"Files" : "پرونده‌ها",
+ "All files" : "تمامی فایل‌ها",
"Favorites" : "موارد محبوب",
"Home" : "خانه",
"Close" : "بستن",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "امکان آپلود {filename} وجود ندارد، پوشه‌ای با این نام یا فایلی با حجم 0 بایت با این نام وجود دارد",
+ "Total file size {size1} exceeds upload limit {size2}" : "مجموع سایز {size1} بیشتر از محدودیت آپلود {size2} است",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "ظرفیت لازم وجود ندارد، شما آپلودی با حجم {size1} را انجام میدهید اما تنها {size2} فضا باقی مانده است",
"Upload cancelled." : "بار گذاری لغو شد",
+ "Could not get result from server." : "امکان دریافت نتایج از سرور وجود ندارد.",
"File upload is in progress. Leaving the page now will cancel the upload." : "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ",
"Actions" : "فعالیت ها",
"Download" : "دانلود",
"Rename" : "تغییرنام",
"Delete" : "حذف",
"Details" : "جزئیات",
+ "Select" : "انتخاب",
"Pending" : "در انتظار",
+ "Unable to determine date" : "امکان تعیین تاریخ وجود ندارد",
+ "This operation is forbidden" : "این عملیات غیرمجاز است",
+ "This directory is unavailable, please check the logs or contact the administrator" : "پوشه‌ در دسترس نیست، لطفا لاگ‌ها را بررسی کنید یا به مدیر سیستم اطلاع دهید",
+ "Error moving file." : "خطا در انتقال فایل.",
+ "Error moving file" : "خطا در انتقال فایل",
"Error" : "خطا",
"{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.",
+ "Could not rename file" : "امکان تغییر نام وجود ندارد",
+ "Could not create file" : "امکان ایجاد فایل وجود ندارد",
+ "Could not create folder" : "امکان ایجاد پوشه وجود ندارد",
+ "Error deleting file." : "خطا در حذف فایل.",
+ "No entries in this folder match '{filter}'" : "هیچ ورودی‌ای با '{filter}' تطبیق ندارد",
"Name" : "نام",
"Size" : "اندازه",
"Modified" : "تاریخ",
+ "_%n folder_::_%n folders_" : ["%n پوشه"],
+ "_%n file_::_%n files_" : ["%n فایل"],
+ "{dirs} and {files}" : "{dirs} و {files}",
+ "You don’t have permission to upload or create files here" : "شما دسترسی مجاز برای آپلود یا ایجاد فایل در اینجا را ندارید",
"_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"],
"New" : "جدید",
+ "\"{name}\" is an invalid file name." : "\"{name}\" نامی نامعتبر برای فایل است.",
"File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "فضای ذخیر‌سازی {owner} پر شده است، امکان بروزرسانی یا هم‌گام‌سازی بیشتر وجود ندارد!",
"Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "فضای {owner} تقریبا پر شده است ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["تطبیق '{filter}'"],
+ "Path" : "مسیر",
+ "_%n byte_::_%n bytes_" : ["%n بایت"],
+ "Favorited" : "برگزیده شده",
+ "Favorite" : "برگزیده",
+ "{newname} already exists" : "{newname} هم‌اکنون وجود دارد",
"Upload" : "بارگزاری",
"Text file" : "فایل متنی",
"Folder" : "پوشه",
"New folder" : "پوشه جدید",
+ "An error occurred while trying to update the tags" : "یک خطا در حین بروزرسانی برچسب‌ها رخ داده است",
"A new file or folder has been <strong>created</strong>" : "فایل یا پوشه ای <strong>ایجاد</strong> شد",
"A file or folder has been <strong>changed</strong>" : "فایل یا پوشه ای به <strong>تغییر</strong> یافت",
"A file or folder has been <strong>deleted</strong>" : "فایل یا پوشه ای به <strong>حذف</strong> شد",
@@ -55,17 +94,27 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s مورد %1$s را حذف کرد",
"You restored %1$s" : "شما %1$s را بازگردانی کردید",
"%2$s restored %1$s" : "%2$s %1$s را بازگردانی کرد",
+ "%s could not be renamed as it has been deleted" : "امکان تغییر نام %s با توجه به حذف شدن آن وجود ندارد",
"%s could not be renamed" : "%s نمیتواند تغییر نام دهد.",
+ "Upload (max. %s)" : "آپلود (بیشترین سایز %s)",
"File handling" : "اداره پرونده ها",
"Maximum upload size" : "حداکثر اندازه بارگزاری",
"max. possible: " : "حداکثرمقدارممکن:",
"Save" : "ذخیره",
+ "Can not be edited from here due to insufficient permissions." : "با توجه به دسترسی محدود، امکان ویرایش از اینجا وجود ندارد.",
"Settings" : "تنظیمات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "از این آدرس استفاده کنید تا <a href=\"%s\" target=\"_blank\">بتوانید به فایل‌های خود توسط WebDAV دسترسی پیدا کنید</a>",
"Cancel upload" : "متوقف کردن بار گذاری",
+ "No files in here" : "هیچ فایلی اینجا وجود ندارد",
+ "Upload some content or sync with your devices!" : "محتوایی را آپلود کنید یا با دستگاه خود همگام‌سازی کنید!",
+ "No entries found in this folder" : "هیچ ورودی‌ای در این پوشه وجود ندارد",
+ "Select all" : "انتخاب همه",
"Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد",
- "Files are being scanned, please wait." : "پرونده ها در حال بازرسی هستند لطفا صبر کنید"
+ "Files are being scanned, please wait." : "پرونده ها در حال بازرسی هستند لطفا صبر کنید",
+ "Currently scanning" : "در حال اسکن",
+ "No favorites" : "هیچ برگزیده",
+ "Files and folders you mark as favorite will show up here" : "فایل‌ها و پوشه‌های انتخاب شده به عنوان برگزیده توسط شما، در اینجا نمایش داده می‌شود"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json
index 5985202ae8d..4ea1170c288 100644
--- a/apps/files/l10n/fa.json
+++ b/apps/files/l10n/fa.json
@@ -1,7 +1,14 @@
{ "translations": {
+ "Storage not available" : "فضای ذخیره سازی موجود نیست",
+ "Storage invalid" : "فضای ذخیره‌سازی نامعتبر",
"Unknown error" : "خطای نامشخص",
"Could not move %s - File with this name already exists" : "%s نمی توان جابجا کرد - در حال حاضر پرونده با این نام وجود دارد. ",
"Could not move %s" : "%s نمی تواند حرکت کند ",
+ "Permission denied" : "رد دسترسی",
+ "The target folder has been moved or deleted." : "پوشه مقصد انتقال یافته یا حذف شده است.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "نام %s هم‌اکنون در پوشه %s مورد استفاده قرار گرفته شده است. لطفا نام دیگری انتخاب کنید.",
+ "Error when creating the file" : "خطا در حین ایجاد فایل",
+ "Error when creating the folder" : "خطا در حین ایجاد پوشه",
"Unable to set upload directory." : "قادر به تنظیم پوشه آپلود نمی باشد.",
"Invalid Token" : "رمز نامعتبر",
"No file was uploaded. Unknown error" : "هیچ فایلی آپلود نشد.خطای ناشناس",
@@ -13,33 +20,65 @@
"Missing a temporary folder" : "یک پوشه موقت گم شده",
"Failed to write to disk" : "نوشتن بر روی دیسک سخت ناموفق بود",
"Not enough storage available" : "فضای کافی در دسترس نیست",
+ "Upload failed. Could not find uploaded file" : "خطا در آپلود. امکان یافتن فایل‌های آپلود شده وجود ندارد",
+ "Upload failed. Could not get file info." : "خطای آپلود. امکان دریافت جزئیات فایل وجود ندارد.",
"Invalid directory." : "فهرست راهنما نامعتبر می باشد.",
"Files" : "پرونده‌ها",
+ "All files" : "تمامی فایل‌ها",
"Favorites" : "موارد محبوب",
"Home" : "خانه",
"Close" : "بستن",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "امکان آپلود {filename} وجود ندارد، پوشه‌ای با این نام یا فایلی با حجم 0 بایت با این نام وجود دارد",
+ "Total file size {size1} exceeds upload limit {size2}" : "مجموع سایز {size1} بیشتر از محدودیت آپلود {size2} است",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "ظرفیت لازم وجود ندارد، شما آپلودی با حجم {size1} را انجام میدهید اما تنها {size2} فضا باقی مانده است",
"Upload cancelled." : "بار گذاری لغو شد",
+ "Could not get result from server." : "امکان دریافت نتایج از سرور وجود ندارد.",
"File upload is in progress. Leaving the page now will cancel the upload." : "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ",
"Actions" : "فعالیت ها",
"Download" : "دانلود",
"Rename" : "تغییرنام",
"Delete" : "حذف",
"Details" : "جزئیات",
+ "Select" : "انتخاب",
"Pending" : "در انتظار",
+ "Unable to determine date" : "امکان تعیین تاریخ وجود ندارد",
+ "This operation is forbidden" : "این عملیات غیرمجاز است",
+ "This directory is unavailable, please check the logs or contact the administrator" : "پوشه‌ در دسترس نیست، لطفا لاگ‌ها را بررسی کنید یا به مدیر سیستم اطلاع دهید",
+ "Error moving file." : "خطا در انتقال فایل.",
+ "Error moving file" : "خطا در انتقال فایل",
"Error" : "خطا",
"{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.",
+ "Could not rename file" : "امکان تغییر نام وجود ندارد",
+ "Could not create file" : "امکان ایجاد فایل وجود ندارد",
+ "Could not create folder" : "امکان ایجاد پوشه وجود ندارد",
+ "Error deleting file." : "خطا در حذف فایل.",
+ "No entries in this folder match '{filter}'" : "هیچ ورودی‌ای با '{filter}' تطبیق ندارد",
"Name" : "نام",
"Size" : "اندازه",
"Modified" : "تاریخ",
+ "_%n folder_::_%n folders_" : ["%n پوشه"],
+ "_%n file_::_%n files_" : ["%n فایل"],
+ "{dirs} and {files}" : "{dirs} و {files}",
+ "You don’t have permission to upload or create files here" : "شما دسترسی مجاز برای آپلود یا ایجاد فایل در اینجا را ندارید",
"_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"],
"New" : "جدید",
+ "\"{name}\" is an invalid file name." : "\"{name}\" نامی نامعتبر برای فایل است.",
"File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "فضای ذخیر‌سازی {owner} پر شده است، امکان بروزرسانی یا هم‌گام‌سازی بیشتر وجود ندارد!",
"Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "فضای {owner} تقریبا پر شده است ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["تطبیق '{filter}'"],
+ "Path" : "مسیر",
+ "_%n byte_::_%n bytes_" : ["%n بایت"],
+ "Favorited" : "برگزیده شده",
+ "Favorite" : "برگزیده",
+ "{newname} already exists" : "{newname} هم‌اکنون وجود دارد",
"Upload" : "بارگزاری",
"Text file" : "فایل متنی",
"Folder" : "پوشه",
"New folder" : "پوشه جدید",
+ "An error occurred while trying to update the tags" : "یک خطا در حین بروزرسانی برچسب‌ها رخ داده است",
"A new file or folder has been <strong>created</strong>" : "فایل یا پوشه ای <strong>ایجاد</strong> شد",
"A file or folder has been <strong>changed</strong>" : "فایل یا پوشه ای به <strong>تغییر</strong> یافت",
"A file or folder has been <strong>deleted</strong>" : "فایل یا پوشه ای به <strong>حذف</strong> شد",
@@ -53,17 +92,27 @@
"%2$s deleted %1$s" : "%2$s مورد %1$s را حذف کرد",
"You restored %1$s" : "شما %1$s را بازگردانی کردید",
"%2$s restored %1$s" : "%2$s %1$s را بازگردانی کرد",
+ "%s could not be renamed as it has been deleted" : "امکان تغییر نام %s با توجه به حذف شدن آن وجود ندارد",
"%s could not be renamed" : "%s نمیتواند تغییر نام دهد.",
+ "Upload (max. %s)" : "آپلود (بیشترین سایز %s)",
"File handling" : "اداره پرونده ها",
"Maximum upload size" : "حداکثر اندازه بارگزاری",
"max. possible: " : "حداکثرمقدارممکن:",
"Save" : "ذخیره",
+ "Can not be edited from here due to insufficient permissions." : "با توجه به دسترسی محدود، امکان ویرایش از اینجا وجود ندارد.",
"Settings" : "تنظیمات",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "از این آدرس استفاده کنید تا <a href=\"%s\" target=\"_blank\">بتوانید به فایل‌های خود توسط WebDAV دسترسی پیدا کنید</a>",
"Cancel upload" : "متوقف کردن بار گذاری",
+ "No files in here" : "هیچ فایلی اینجا وجود ندارد",
+ "Upload some content or sync with your devices!" : "محتوایی را آپلود کنید یا با دستگاه خود همگام‌سازی کنید!",
+ "No entries found in this folder" : "هیچ ورودی‌ای در این پوشه وجود ندارد",
+ "Select all" : "انتخاب همه",
"Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد",
- "Files are being scanned, please wait." : "پرونده ها در حال بازرسی هستند لطفا صبر کنید"
+ "Files are being scanned, please wait." : "پرونده ها در حال بازرسی هستند لطفا صبر کنید",
+ "Currently scanning" : "در حال اسکن",
+ "No favorites" : "هیچ برگزیده",
+ "Files and folders you mark as favorite will show up here" : "فایل‌ها و پوشه‌های انتخاب شده به عنوان برگزیده توسط شما، در اینجا نمایش داده می‌شود"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js
index a44c9f4fcd9..cf4bb0f5792 100644
--- a/apps/files/l10n/fi_FI.js
+++ b/apps/files/l10n/fi_FI.js
@@ -96,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s poisti kohteen %1$s",
"You restored %1$s" : "Palautit kohteen %1$s",
"%2$s restored %1$s" : "%2$s palautti kohteen %1$s",
+ "Changed by %2$s" : "Muuttanut %2$s",
+ "Deleted by %2$s" : "Poistanut %2$s",
+ "Restored by %2$s" : "Palauttanut %2$s",
"%s could not be renamed as it has been deleted" : "Kohdetta %s ei voitu nimetä uudelleen, koska se on poistettu",
"%s could not be renamed" : "kohteen %s nimeäminen uudelleen epäonnistui",
"Upload (max. %s)" : "Lähetys (enintään %s)",
diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json
index 7528802b94b..56417b3c74d 100644
--- a/apps/files/l10n/fi_FI.json
+++ b/apps/files/l10n/fi_FI.json
@@ -94,6 +94,9 @@
"%2$s deleted %1$s" : "%2$s poisti kohteen %1$s",
"You restored %1$s" : "Palautit kohteen %1$s",
"%2$s restored %1$s" : "%2$s palautti kohteen %1$s",
+ "Changed by %2$s" : "Muuttanut %2$s",
+ "Deleted by %2$s" : "Poistanut %2$s",
+ "Restored by %2$s" : "Palauttanut %2$s",
"%s could not be renamed as it has been deleted" : "Kohdetta %s ei voitu nimetä uudelleen, koska se on poistettu",
"%s could not be renamed" : "kohteen %s nimeäminen uudelleen epäonnistui",
"Upload (max. %s)" : "Lähetys (enintään %s)",
diff --git a/apps/files/l10n/hy.js b/apps/files/l10n/hy.js
index 7c49399856c..62bc84d6c7b 100644
--- a/apps/files/l10n/hy.js
+++ b/apps/files/l10n/hy.js
@@ -1,9 +1,18 @@
OC.L10N.register(
"files",
{
+ "Files" : "Ֆայլեր",
"Close" : "Փակել",
"Download" : "Բեռնել",
+ "Rename" : "Վերանվանել",
"Delete" : "Ջնջել",
- "Save" : "Պահպանել"
+ "Select" : "Նշել",
+ "Name" : "Անուն",
+ "Size" : "Չափս",
+ "New" : "Նոր",
+ "Folder" : "Պանակ",
+ "New folder" : "Նոր պանակ",
+ "Save" : "Պահպանել",
+ "Select all" : "Նշել բոլորը"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/hy.json b/apps/files/l10n/hy.json
index 8501b7eb9b2..c5afd306272 100644
--- a/apps/files/l10n/hy.json
+++ b/apps/files/l10n/hy.json
@@ -1,7 +1,16 @@
{ "translations": {
+ "Files" : "Ֆայլեր",
"Close" : "Փակել",
"Download" : "Բեռնել",
+ "Rename" : "Վերանվանել",
"Delete" : "Ջնջել",
- "Save" : "Պահպանել"
+ "Select" : "Նշել",
+ "Name" : "Անուն",
+ "Size" : "Չափս",
+ "New" : "Նոր",
+ "Folder" : "Պանակ",
+ "New folder" : "Նոր պանակ",
+ "Save" : "Պահպանել",
+ "Select all" : "Նշել բոլորը"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 681940955dc..c8286c66a57 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -96,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s ha eliminato %1$s",
"You restored %1$s" : "Hai ripristinato %1$s",
"%2$s restored %1$s" : "%2$s ha ripristinato %1$s",
+ "Changed by %2$s" : "Modificata da %2$s",
+ "Deleted by %2$s" : "Eliminata da %2$s",
+ "Restored by %2$s" : "Ripristinata da %2$s",
"%s could not be renamed as it has been deleted" : "%s non può essere rinominato poiché è stato eliminato",
"%s could not be renamed" : "%s non può essere rinominato",
"Upload (max. %s)" : "Carica (massimo %s)",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 1075d43e984..6f6092c5c15 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -94,6 +94,9 @@
"%2$s deleted %1$s" : "%2$s ha eliminato %1$s",
"You restored %1$s" : "Hai ripristinato %1$s",
"%2$s restored %1$s" : "%2$s ha ripristinato %1$s",
+ "Changed by %2$s" : "Modificata da %2$s",
+ "Deleted by %2$s" : "Eliminata da %2$s",
+ "Restored by %2$s" : "Ripristinata da %2$s",
"%s could not be renamed as it has been deleted" : "%s non può essere rinominato poiché è stato eliminato",
"%s could not be renamed" : "%s non può essere rinominato",
"Upload (max. %s)" : "Carica (massimo %s)",
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index 87b7d0e655c..d5090d57bde 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -96,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s 님이 %1$s을(를) 삭제함",
"You restored %1$s" : "내가 %1$s을(를) 복원함",
"%2$s restored %1$s" : "%2$s 님이 %1$s을(를) 복원함",
+ "Changed by %2$s" : "%2$s 님이 변경함",
+ "Deleted by %2$s" : "%2$s 님이 삭제함",
+ "Restored by %2$s" : "%2$s 님이 복원함",
"%s could not be renamed as it has been deleted" : "%s이(가) 삭제되었기 때문에 이름을 변경할 수 없습니다",
"%s could not be renamed" : "%s의 이름을 변경할 수 없습니다",
"Upload (max. %s)" : "업로드(최대 %s)",
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index 8a9dc1cf432..92ea053f64f 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -94,6 +94,9 @@
"%2$s deleted %1$s" : "%2$s 님이 %1$s을(를) 삭제함",
"You restored %1$s" : "내가 %1$s을(를) 복원함",
"%2$s restored %1$s" : "%2$s 님이 %1$s을(를) 복원함",
+ "Changed by %2$s" : "%2$s 님이 변경함",
+ "Deleted by %2$s" : "%2$s 님이 삭제함",
+ "Restored by %2$s" : "%2$s 님이 복원함",
"%s could not be renamed as it has been deleted" : "%s이(가) 삭제되었기 때문에 이름을 변경할 수 없습니다",
"%s could not be renamed" : "%s의 이름을 변경할 수 없습니다",
"Upload (max. %s)" : "업로드(최대 %s)",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index c11318c2890..53ec6c1d804 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -95,6 +95,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s verwijderde %1$s",
"You restored %1$s" : "U herstelde %1$s",
"%2$s restored %1$s" : "%2$s herstelde %1$s",
+ "Changed by %2$s" : "Gewijzigd door %2$s",
+ "Deleted by %2$s" : "Verwijderd door %2$s",
+ "Restored by %2$s" : "Hersteld door %2$s",
"%s could not be renamed as it has been deleted" : "%s kon niet worden hernoemd, omdat het verwijderd is",
"%s could not be renamed" : "%s kon niet worden hernoemd",
"Upload (max. %s)" : "Upload (max. %s)",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 1a80d1eb3f1..6a077b1cc1a 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -93,6 +93,9 @@
"%2$s deleted %1$s" : "%2$s verwijderde %1$s",
"You restored %1$s" : "U herstelde %1$s",
"%2$s restored %1$s" : "%2$s herstelde %1$s",
+ "Changed by %2$s" : "Gewijzigd door %2$s",
+ "Deleted by %2$s" : "Verwijderd door %2$s",
+ "Restored by %2$s" : "Hersteld door %2$s",
"%s could not be renamed as it has been deleted" : "%s kon niet worden hernoemd, omdat het verwijderd is",
"%s could not be renamed" : "%s kon niet worden hernoemd",
"Upload (max. %s)" : "Upload (max. %s)",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 61c0f3e2e59..70d38e747ba 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -96,6 +96,9 @@ OC.L10N.register(
"%2$s deleted %1$s" : "%2$s eliminou %1$s",
"You restored %1$s" : "Você restaurou %1$s",
"%2$s restored %1$s" : "%2$s restaurou %1$s",
+ "Changed by %2$s" : "Modificado por %2$s",
+ "Deleted by %2$s" : "Deletado por %2$s",
+ "Restored by %2$s" : "Restaurado por %2$s",
"%s could not be renamed as it has been deleted" : "%s não pode ser renomeado pois foi apagado",
"%s could not be renamed" : "%s não pode ser renomeado",
"Upload (max. %s)" : "Envio (max. %s)",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 395976dbfdf..d0023e7d5be 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -94,6 +94,9 @@
"%2$s deleted %1$s" : "%2$s eliminou %1$s",
"You restored %1$s" : "Você restaurou %1$s",
"%2$s restored %1$s" : "%2$s restaurou %1$s",
+ "Changed by %2$s" : "Modificado por %2$s",
+ "Deleted by %2$s" : "Deletado por %2$s",
+ "Restored by %2$s" : "Restaurado por %2$s",
"%s could not be renamed as it has been deleted" : "%s não pode ser renomeado pois foi apagado",
"%s could not be renamed" : "%s não pode ser renomeado",
"Upload (max. %s)" : "Envio (max. %s)",
diff --git a/apps/files/lib/activity.php b/apps/files/lib/activity.php
index bf80d0cfd7c..f3bbff48640 100644
--- a/apps/files/lib/activity.php
+++ b/apps/files/lib/activity.php
@@ -145,6 +145,24 @@ class Activity implements IExtension {
}
$l = $this->getL10N($languageCode);
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ $translation = $this->translateShort($text, $l, $params);
+ if ($translation !== false) {
+ return $translation;
+ }
+ }
+
+ return $this->translateLong($text, $l, $params);
+ }
+
+ /**
+ * @param string $text
+ * @param IL10N $l
+ * @param array $params
+ * @return bool|string
+ */
+ protected function translateLong($text, IL10N $l, array $params) {
switch ($text) {
case 'created_self':
return (string) $l->t('You created %1$s', $params);
@@ -171,6 +189,26 @@ class Activity implements IExtension {
}
/**
+ * @param string $text
+ * @param IL10N $l
+ * @param array $params
+ * @return bool|string
+ */
+ protected function translateShort($text, IL10N $l, array $params) {
+ switch ($text) {
+ case 'changed_by':
+ return (string) $l->t('Changed by %2$s', $params);
+ case 'deleted_by':
+ return (string) $l->t('Deleted by %2$s', $params);
+ case 'restored_by':
+ return (string) $l->t('Restored by %2$s', $params);
+
+ default:
+ return false;
+ }
+ }
+
+ /**
* The extension can define the type of parameters for translation
*
* Currently known types are:
diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js
index 1254843e66a..6a57c56c3af 100644
--- a/apps/files/tests/js/fileactionsSpec.js
+++ b/apps/files/tests/js/fileactionsSpec.js
@@ -151,6 +151,62 @@ describe('OCA.Files.FileActions tests', function() {
expect($tr.find('.action.action-match').length).toEqual(1);
expect($tr.find('.action.action-nomatch').length).toEqual(0);
});
+ it('display inline icon', function() {
+ fileActions.registerAction({
+ name: 'Icon',
+ displayName: 'IconDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ icon: OC.imagePath('core', 'actions/icon'),
+ permissions: OC.PERMISSION_READ
+ });
+ fileActions.registerAction({
+ name: 'NoIcon',
+ displayName: 'NoIconDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ permissions: OC.PERMISSION_READ
+ });
+
+ fileActions.display($tr.find('td.filename'), true, fileList);
+
+ expect($tr.find('.action.action-icon').length).toEqual(1);
+ expect($tr.find('.action.action-icon').find('img').length).toEqual(1);
+ expect($tr.find('.action.action-icon').find('img').eq(0).attr('src')).toEqual(OC.imagePath('core', 'actions/icon'));
+
+ expect($tr.find('.action.action-noicon').length).toEqual(1);
+ expect($tr.find('.action.action-noicon').find('img').length).toEqual(0);
+ });
+ it('display alt text on inline icon', function() {
+ fileActions.registerAction({
+ name: 'IconAltText',
+ displayName: 'IconAltTextDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ icon: OC.imagePath('core', 'actions/iconAltText'),
+ altText: 'alt icon text',
+ permissions: OC.PERMISSION_READ
+ });
+
+ fileActions.registerAction({
+ name: 'IconNoAltText',
+ displayName: 'IconNoAltTextDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ icon: OC.imagePath('core', 'actions/iconNoAltText'),
+ permissions: OC.PERMISSION_READ
+ });
+
+ fileActions.display($tr.find('td.filename'), true, fileList);
+
+ expect($tr.find('.action.action-iconalttext').length).toEqual(1);
+ expect($tr.find('.action.action-iconalttext').find('img').length).toEqual(1);
+ expect($tr.find('.action.action-iconalttext').find('img').eq(0).attr('alt')).toEqual('alt icon text');
+
+ expect($tr.find('.action.action-iconnoalttext').length).toEqual(1);
+ expect($tr.find('.action.action-iconnoalttext').find('img').length).toEqual(1);
+ expect($tr.find('.action.action-iconnoalttext').find('img').eq(0).attr('alt')).toEqual('');
+ });
});
describe('action handler', function() {
var actionStub, $tr, clock;
diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js
index 2b9e2b23f93..f4403196f2e 100644
--- a/apps/files/tests/js/mainfileinfodetailviewSpec.js
+++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js
@@ -58,7 +58,7 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
expect(view.$el.find('.fileName h3').attr('title')).toEqual('One.txt');
expect(view.$el.find('.size').text()).toEqual('117.7 MB');
expect(view.$el.find('.size').attr('title')).toEqual('123456789 bytes');
- expect(view.$el.find('.date').text()).toEqual('a few seconds ago');
+ expect(view.$el.find('.date').text()).toEqual('seconds ago');
expect(view.$el.find('.date').attr('title')).toEqual(dateExpected);
clock.restore();
});
diff --git a/apps/files_external/l10n/es_MX.js b/apps/files_external/l10n/es_MX.js
index a8d1dea1a09..7e2770e6f52 100644
--- a/apps/files_external/l10n/es_MX.js
+++ b/apps/files_external/l10n/es_MX.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"Personal" : "Personal",
"Grant access" : "Conceder acceso",
"Access granted" : "Acceso concedido",
+ "None" : "Ninguno",
"Username" : "Nombre de usuario",
"Password" : "Contraseña",
"API key" : "clave API",
diff --git a/apps/files_external/l10n/es_MX.json b/apps/files_external/l10n/es_MX.json
index 3fdea60b775..9a9835d9598 100644
--- a/apps/files_external/l10n/es_MX.json
+++ b/apps/files_external/l10n/es_MX.json
@@ -3,6 +3,7 @@
"Personal" : "Personal",
"Grant access" : "Conceder acceso",
"Access granted" : "Acceso concedido",
+ "None" : "Ninguno",
"Username" : "Nombre de usuario",
"Password" : "Contraseña",
"API key" : "clave API",
diff --git a/apps/files_external/l10n/fa.js b/apps/files_external/l10n/fa.js
index 1a3a06ba391..53723eae96e 100644
--- a/apps/files_external/l10n/fa.js
+++ b/apps/files_external/l10n/fa.js
@@ -3,25 +3,51 @@ OC.L10N.register(
{
"External storage" : "حافظه خارجی",
"Personal" : "شخصی",
+ "System" : "سیستم",
"Grant access" : " مجوز اعطا دسترسی",
"Access granted" : "مجوز دسترسی صادر شد",
+ "Generate keys" : "تولید کلید",
+ "Enable encryption" : "فعال کردن رمزگذاری",
+ "Check for changes" : "بررسی برای تغییرات",
+ "Never" : "هرگز",
+ "(group)" : "(گروه)",
"Saved" : "ذخیره شد",
+ "Access key" : "کلید دسترسی",
+ "Secret key" : "کلید مخفی",
"None" : "هیچ‌کدام",
"Username" : "نام کاربری",
"Password" : "گذرواژه",
"API key" : "کلید API ",
+ "Username and password" : "نام کاربری و رمز عبور",
+ "Public key" : "کلید عمومی",
+ "Amazon S3" : "Amazon S3",
"Port" : "درگاه",
"Region" : "ناحیه",
+ "Enable SSL" : "فعال‌سازی SSL",
"WebDAV" : "WebDAV",
"URL" : "آدرس",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "میزبانی",
+ "Google Drive" : "Google Drive",
+ "Local" : "محلی",
"Location" : "محل",
"ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "اشتراک‌گذاری",
+ "Domain" : "دامنه",
+ "Service name" : "نام سرویس",
+ "No external storage configured" : "هیچ فضای ذخیره‌سازی خارجی‌ای تنظیم نشده است",
"Name" : "نام",
+ "Storage type" : "نوع فضای ذخیره‌سازی",
+ "Scope" : "حوزه",
"External Storage" : "حافظه خارجی",
"Folder name" : "نام پوشه",
+ "Authentication" : "احراز هویت",
"Configuration" : "پیکربندی",
+ "Available for" : "در دسترس برای",
+ "Advanced settings" : "تنظیمات پیشرفته",
"Delete" : "حذف",
"Add storage" : "اضافه کردن حافظه",
"Enable User External Storage" : "فعال سازی حافظه خارجی کاربر"
diff --git a/apps/files_external/l10n/fa.json b/apps/files_external/l10n/fa.json
index 79a599d7390..98aa7c58827 100644
--- a/apps/files_external/l10n/fa.json
+++ b/apps/files_external/l10n/fa.json
@@ -1,25 +1,51 @@
{ "translations": {
"External storage" : "حافظه خارجی",
"Personal" : "شخصی",
+ "System" : "سیستم",
"Grant access" : " مجوز اعطا دسترسی",
"Access granted" : "مجوز دسترسی صادر شد",
+ "Generate keys" : "تولید کلید",
+ "Enable encryption" : "فعال کردن رمزگذاری",
+ "Check for changes" : "بررسی برای تغییرات",
+ "Never" : "هرگز",
+ "(group)" : "(گروه)",
"Saved" : "ذخیره شد",
+ "Access key" : "کلید دسترسی",
+ "Secret key" : "کلید مخفی",
"None" : "هیچ‌کدام",
"Username" : "نام کاربری",
"Password" : "گذرواژه",
"API key" : "کلید API ",
+ "Username and password" : "نام کاربری و رمز عبور",
+ "Public key" : "کلید عمومی",
+ "Amazon S3" : "Amazon S3",
"Port" : "درگاه",
"Region" : "ناحیه",
+ "Enable SSL" : "فعال‌سازی SSL",
"WebDAV" : "WebDAV",
"URL" : "آدرس",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "میزبانی",
+ "Google Drive" : "Google Drive",
+ "Local" : "محلی",
"Location" : "محل",
"ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "اشتراک‌گذاری",
+ "Domain" : "دامنه",
+ "Service name" : "نام سرویس",
+ "No external storage configured" : "هیچ فضای ذخیره‌سازی خارجی‌ای تنظیم نشده است",
"Name" : "نام",
+ "Storage type" : "نوع فضای ذخیره‌سازی",
+ "Scope" : "حوزه",
"External Storage" : "حافظه خارجی",
"Folder name" : "نام پوشه",
+ "Authentication" : "احراز هویت",
"Configuration" : "پیکربندی",
+ "Available for" : "در دسترس برای",
+ "Advanced settings" : "تنظیمات پیشرفته",
"Delete" : "حذف",
"Add storage" : "اضافه کردن حافظه",
"Enable User External Storage" : "فعال سازی حافظه خارجی کاربر"
diff --git a/apps/files_external/l10n/hy.js b/apps/files_external/l10n/hy.js
index 2030a284acb..9996681f88b 100644
--- a/apps/files_external/l10n/hy.js
+++ b/apps/files_external/l10n/hy.js
@@ -2,6 +2,11 @@ OC.L10N.register(
"files_external",
{
"Personal" : "Անձնական",
+ "Password" : "Գաղտնաբառ",
+ "URL" : "URL",
+ "Dropbox" : "Dropbox",
+ "Share" : "Կիսվել",
+ "Name" : "Անուն",
"Delete" : "Ջնջել"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/hy.json b/apps/files_external/l10n/hy.json
index fa925e0854d..ac5a0edf013 100644
--- a/apps/files_external/l10n/hy.json
+++ b/apps/files_external/l10n/hy.json
@@ -1,5 +1,10 @@
{ "translations": {
"Personal" : "Անձնական",
+ "Password" : "Գաղտնաբառ",
+ "URL" : "URL",
+ "Dropbox" : "Dropbox",
+ "Share" : "Կիսվել",
+ "Name" : "Անուն",
"Delete" : "Ջնջել"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/ko.js b/apps/files_external/l10n/ko.js
index f27e885772e..3faf53bf1e5 100644
--- a/apps/files_external/l10n/ko.js
+++ b/apps/files_external/l10n/ko.js
@@ -12,6 +12,8 @@ OC.L10N.register(
"Invalid mount point" : "잘못된 마운트 지점",
"Objectstore forbidden" : "Objectstore에 접근 금지됨",
"Invalid storage backend \"%s\"" : "잘못된 저장소 백엔드 \"%s\"",
+ "Not permitted to use backend \"%s\"" : "백엔드 \"%s\" 사용이 허가되지 않았음",
+ "Not permitted to use authentication mechanism \"%s\"" : "인증 방식 \"%s\" 사용이 허가되지 않았음",
"Unsatisfied backend parameters" : "백엔드 인자가 부족함",
"Unsatisfied authentication mechanism parameters" : "인증 방식 인자가 부족함",
"Personal" : "개인",
@@ -41,11 +43,16 @@ OC.L10N.register(
"OAuth2" : "OAuth2",
"Client ID" : "클라이언트 ID",
"Client secret" : "클라이언트 비밀 값",
+ "OpenStack" : "OpenStack",
"Username" : "사용자 이름",
"Password" : "암호",
+ "Tenant name" : "테넌트 이름",
+ "Identity endpoint URL" : "아이덴티티 끝점(Endpoint) URL",
+ "Rackspace" : "Rackspace",
"API key" : "API 키",
"Username and password" : "사용자 이름과 암호",
"Session credentials" : "세션 접근 정보",
+ "RSA public key" : "RSA 공개 키",
"Public key" : "공개 키",
"Amazon S3" : "Amazon S3",
"Bucket" : "버킷",
@@ -71,9 +78,12 @@ OC.L10N.register(
"SFTP with secret key login" : "비밀 키 로그인을 사용하는 SFTP",
"SMB / CIFS" : "SMB/CIFS",
"Share" : "공유",
+ "Domain" : "도메인",
"SMB / CIFS using OC login" : "OC 로그인을 사용하는 SMB/CIFS",
"Username as share" : "사용자 이름으로 공유",
"OpenStack Object Storage" : "OpenStack 객체 저장소",
+ "Service name" : "서비스 이름",
+ "Request timeout (seconds)" : "요청 시간 제한(초)",
"<b>Note:</b> " : "<b>메모:</b>",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
diff --git a/apps/files_external/l10n/ko.json b/apps/files_external/l10n/ko.json
index ab804d58702..039190cf4f9 100644
--- a/apps/files_external/l10n/ko.json
+++ b/apps/files_external/l10n/ko.json
@@ -10,6 +10,8 @@
"Invalid mount point" : "잘못된 마운트 지점",
"Objectstore forbidden" : "Objectstore에 접근 금지됨",
"Invalid storage backend \"%s\"" : "잘못된 저장소 백엔드 \"%s\"",
+ "Not permitted to use backend \"%s\"" : "백엔드 \"%s\" 사용이 허가되지 않았음",
+ "Not permitted to use authentication mechanism \"%s\"" : "인증 방식 \"%s\" 사용이 허가되지 않았음",
"Unsatisfied backend parameters" : "백엔드 인자가 부족함",
"Unsatisfied authentication mechanism parameters" : "인증 방식 인자가 부족함",
"Personal" : "개인",
@@ -39,11 +41,16 @@
"OAuth2" : "OAuth2",
"Client ID" : "클라이언트 ID",
"Client secret" : "클라이언트 비밀 값",
+ "OpenStack" : "OpenStack",
"Username" : "사용자 이름",
"Password" : "암호",
+ "Tenant name" : "테넌트 이름",
+ "Identity endpoint URL" : "아이덴티티 끝점(Endpoint) URL",
+ "Rackspace" : "Rackspace",
"API key" : "API 키",
"Username and password" : "사용자 이름과 암호",
"Session credentials" : "세션 접근 정보",
+ "RSA public key" : "RSA 공개 키",
"Public key" : "공개 키",
"Amazon S3" : "Amazon S3",
"Bucket" : "버킷",
@@ -69,9 +76,12 @@
"SFTP with secret key login" : "비밀 키 로그인을 사용하는 SFTP",
"SMB / CIFS" : "SMB/CIFS",
"Share" : "공유",
+ "Domain" : "도메인",
"SMB / CIFS using OC login" : "OC 로그인을 사용하는 SMB/CIFS",
"Username as share" : "사용자 이름으로 공유",
"OpenStack Object Storage" : "OpenStack 객체 저장소",
+ "Service name" : "서비스 이름",
+ "Request timeout (seconds)" : "요청 시간 제한(초)",
"<b>Note:</b> " : "<b>메모:</b>",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
diff --git a/apps/files_external/l10n/oc.js b/apps/files_external/l10n/oc.js
index 929d14347fc..b7bc419fdd7 100644
--- a/apps/files_external/l10n/oc.js
+++ b/apps/files_external/l10n/oc.js
@@ -14,16 +14,23 @@ OC.L10N.register(
"Generate keys" : "Generar de claus",
"Error generating key pair" : "Error al moment de la generacion de las claus",
"Enable encryption" : "Activar lo chiframent",
+ "Enable previews" : "Activar las previsualizacions",
+ "Never" : "Pas jamai",
"(group)" : "(grop)",
"Saved" : "Salvat",
+ "Access key" : "Clau d'accès",
+ "Secret key" : "Clau secreta",
"None" : "Pas cap",
+ "OAuth1" : "OAuth1",
"App key" : "App key",
"App secret" : "App secret",
+ "OAuth2" : "OAuth2",
"Client ID" : "ID Client",
"Client secret" : "Secret client",
"Username" : "Nom d'utilizaire",
"Password" : "Senhal",
"API key" : "Clau API",
+ "RSA public key" : "Clau publica RSA",
"Public key" : "Clau publica",
"Amazon S3" : "Amazon S3",
"Bucket" : "Bucket",
@@ -36,16 +43,23 @@ OC.L10N.register(
"URL" : "URL",
"Remote subfolder" : "Sosdorsièr distant",
"Secure https://" : "Securizacion https://",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "Òste",
"Secure ftps://" : "Securizacion ftps://",
+ "Google Drive" : "Google Drive",
"Local" : "Local",
"Location" : "Emplaçament",
"ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
"SFTP with secret key login" : "SFTP amb un identificant secret",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "Partejar",
+ "Domain" : "Domeni",
"SMB / CIFS using OC login" : "SMB / CIFS en utilizant los identificants OC",
"Username as share" : "Nom d'utilizaire coma nom de partiment",
"OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nom del servici",
"<b>Note:</b> " : "<b>Atencion :</b>",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Atencion :</b> La presa en carga de cURL per PHP es pas activada o installada. Lo montatge de %s es pas possible. Contactatz vòstre administrator sistèma per l'installar.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Atencion : </b> La presa en carga del FTP per PHP es pas activada o installada. Lo montatge de %s es pas possible. Contactatz vòstre administrator sistèma per l'installar.",
@@ -57,6 +71,7 @@ OC.L10N.register(
"Scope" : "Portada",
"External Storage" : "Emmagazinatge externe",
"Folder name" : "Nom del dorsièr",
+ "Authentication" : "Autentificacion",
"Configuration" : "Configuracion",
"Available for" : "Disponible per",
"Advanced settings" : "Paramètres avançats",
diff --git a/apps/files_external/l10n/oc.json b/apps/files_external/l10n/oc.json
index 84fef9ec53f..05670245634 100644
--- a/apps/files_external/l10n/oc.json
+++ b/apps/files_external/l10n/oc.json
@@ -12,16 +12,23 @@
"Generate keys" : "Generar de claus",
"Error generating key pair" : "Error al moment de la generacion de las claus",
"Enable encryption" : "Activar lo chiframent",
+ "Enable previews" : "Activar las previsualizacions",
+ "Never" : "Pas jamai",
"(group)" : "(grop)",
"Saved" : "Salvat",
+ "Access key" : "Clau d'accès",
+ "Secret key" : "Clau secreta",
"None" : "Pas cap",
+ "OAuth1" : "OAuth1",
"App key" : "App key",
"App secret" : "App secret",
+ "OAuth2" : "OAuth2",
"Client ID" : "ID Client",
"Client secret" : "Secret client",
"Username" : "Nom d'utilizaire",
"Password" : "Senhal",
"API key" : "Clau API",
+ "RSA public key" : "Clau publica RSA",
"Public key" : "Clau publica",
"Amazon S3" : "Amazon S3",
"Bucket" : "Bucket",
@@ -34,16 +41,23 @@
"URL" : "URL",
"Remote subfolder" : "Sosdorsièr distant",
"Secure https://" : "Securizacion https://",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "Òste",
"Secure ftps://" : "Securizacion ftps://",
+ "Google Drive" : "Google Drive",
"Local" : "Local",
"Location" : "Emplaçament",
"ownCloud" : "ownCloud",
+ "SFTP" : "SFTP",
"SFTP with secret key login" : "SFTP amb un identificant secret",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "Partejar",
+ "Domain" : "Domeni",
"SMB / CIFS using OC login" : "SMB / CIFS en utilizant los identificants OC",
"Username as share" : "Nom d'utilizaire coma nom de partiment",
"OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nom del servici",
"<b>Note:</b> " : "<b>Atencion :</b>",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Atencion :</b> La presa en carga de cURL per PHP es pas activada o installada. Lo montatge de %s es pas possible. Contactatz vòstre administrator sistèma per l'installar.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Atencion : </b> La presa en carga del FTP per PHP es pas activada o installada. Lo montatge de %s es pas possible. Contactatz vòstre administrator sistèma per l'installar.",
@@ -55,6 +69,7 @@
"Scope" : "Portada",
"External Storage" : "Emmagazinatge externe",
"Folder name" : "Nom del dorsièr",
+ "Authentication" : "Autentificacion",
"Configuration" : "Configuracion",
"Available for" : "Disponible per",
"Advanced settings" : "Paramètres avançats",
diff --git a/apps/files_external/l10n/ro.js b/apps/files_external/l10n/ro.js
index 502d9a5cbef..89f07797d96 100644
--- a/apps/files_external/l10n/ro.js
+++ b/apps/files_external/l10n/ro.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Region" : "Regiune",
"WebDAV" : "WebDAV",
"URL" : "URL",
+ "Dropbox" : "Dropbox",
"Host" : "Gazdă",
"Local" : "Local",
"Location" : "Locație",
diff --git a/apps/files_external/l10n/ro.json b/apps/files_external/l10n/ro.json
index 41c844e36b7..912e6d99b9e 100644
--- a/apps/files_external/l10n/ro.json
+++ b/apps/files_external/l10n/ro.json
@@ -15,6 +15,7 @@
"Region" : "Regiune",
"WebDAV" : "WebDAV",
"URL" : "URL",
+ "Dropbox" : "Dropbox",
"Host" : "Gazdă",
"Local" : "Local",
"Location" : "Locație",
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index afea7ead4e6..457fd58f0f8 100644
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -207,6 +207,11 @@ class OC_Mount_Config {
'groups' => $storage->getApplicableGroups(),
'users' => $storage->getApplicableUsers(),
];
+ // if mountpoint is applicable to all users the old API expects ['all']
+ if (empty($mountEntry['applicable']['groups']) && empty($mountEntry['applicable']['users'])) {
+ $mountEntry['applicable']['users'] = ['all'];
+ }
+
$mountEntry['id'] = $storage->getId();
return $mountEntry;
diff --git a/apps/files_sharing/api/remote.php b/apps/files_sharing/api/remote.php
index 0f6d2dc265a..76f9babcd19 100644
--- a/apps/files_sharing/api/remote.php
+++ b/apps/files_sharing/api/remote.php
@@ -27,9 +27,9 @@ use OCA\Files_Sharing\External\Manager;
class Remote {
/**
- * Accept a remote share
+ * Get list of pending remote shares
*
- * @param array $params contains the shareID 'id' which should be accepted
+ * @param array $params empty
* @return \OC_OCS_Result
*/
public static function getOpenShares($params) {
@@ -90,4 +90,101 @@ class Remote {
return new \OC_OCS_Result(null, 404, "wrong share ID, share doesn't exist.");
}
+
+ /**
+ * @param array $share Share with info from the share_external table
+ * @return enriched share info with data from the filecache
+ */
+ private static function extendShareInfo($share) {
+ $view = new \OC\Files\View('/' . \OC_User::getUser() . '/files/');
+ $info = $view->getFileInfo($shares['mountpoint']);
+
+ $share['mimetype'] = $info->getMimetype();
+ $share['mtime'] = $info->getMtime();
+ $share['permissions'] = $info->getPermissions();
+ $share['type'] = $info->getType();
+ $share['file_id'] = $info->getId();
+
+ return $share;
+ }
+
+ /**
+ * List accepted remote shares
+ *
+ * @param array $params
+ * @return \OC_OCS_Result
+ */
+ public static function getShares($params) {
+ $externalManager = new Manager(
+ \OC::$server->getDatabaseConnection(),
+ Filesystem::getMountManager(),
+ Filesystem::getLoader(),
+ \OC::$server->getHTTPHelper(),
+ \OC::$server->getNotificationManager(),
+ \OC_User::getUser()
+ );
+
+ $shares = $externalManager->getAcceptedShares();
+
+ $shares = array_map('self::extendShareInfo', $shares);
+
+ return new \OC_OCS_Result($shares);
+ }
+
+ /**
+ * Get info of a remote share
+ *
+ * @param array $params contains the shareID 'id'
+ * @return \OC_OCS_Result
+ */
+ public static function getShare($params) {
+ $externalManager = new Manager(
+ \OC::$server->getDatabaseConnection(),
+ Filesystem::getMountManager(),
+ Filesystem::getLoader(),
+ \OC::$server->getHTTPHelper(),
+ \OC::$server->getNotificationManager(),
+ \OC_User::getUser()
+ );
+
+ $shareInfo = $externalManager->getShare($params['id']);
+
+ if ($shareInfo === false) {
+ return new \OC_OCS_Result(null, 404, 'share does not exist');
+ } else {
+ $shareInfo = self::extendShareInfo($shareInfo);
+ return new \OC_OCS_Result($shareInfo);
+ }
+ }
+
+ /**
+ * Unshare a remote share
+ *
+ * @param array $params contains the shareID 'id' which should be unshared
+ * @return \OC_OCS_Result
+ */
+ public static function unshare($params) {
+ $externalManager = new Manager(
+ \OC::$server->getDatabaseConnection(),
+ Filesystem::getMountManager(),
+ Filesystem::getLoader(),
+ \OC::$server->getHTTPHelper(),
+ \OC::$server->getNotificationManager(),
+ \OC_User::getUser()
+ );
+
+ $shareInfo = $externalManager->getShare($params['id']);
+
+ if ($shareInfo === false) {
+ return new \OC_OCS_Result(null, 404, 'Share does not exist');
+ }
+
+ $mountPoint = '/' . \OC_User::getUser() . '/files' . $shareInfo['mountpoint'];
+
+ if ($externalManager->removeShare($mountPoint) === true) {
+ return new \OC_OCS_Result(null);
+ } else {
+ return new \OC_OCS_Result(null, 403, 'Could not unshare');
+ }
+ }
}
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index e449843de73..793a1789a0f 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -67,7 +67,8 @@ $eventDispatcher->addListener(
\OC::$server->getActivityManager()->registerExtension(function() {
return new \OCA\Files_Sharing\Activity(
\OC::$server->query('L10NFactory'),
- \OC::$server->getURLGenerator()
+ \OC::$server->getURLGenerator(),
+ \OC::$server->getActivityManager()
);
});
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index 375124cb730..3794df37992 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -89,19 +89,35 @@ API::register('delete',
API::register('get',
'/apps/files_sharing/api/v1/remote_shares',
+ array('\OCA\Files_Sharing\API\Remote', 'getShares'),
+ 'files_sharing');
+
+API::register('get',
+ '/apps/files_sharing/api/v1/remote_shares/pending',
array('\OCA\Files_Sharing\API\Remote', 'getOpenShares'),
'files_sharing');
API::register('post',
- '/apps/files_sharing/api/v1/remote_shares/{id}',
+ '/apps/files_sharing/api/v1/remote_shares/pending/{id}',
array('\OCA\Files_Sharing\API\Remote', 'acceptShare'),
'files_sharing');
API::register('delete',
- '/apps/files_sharing/api/v1/remote_shares/{id}',
+ '/apps/files_sharing/api/v1/remote_shares/pending/{id}',
array('\OCA\Files_Sharing\API\Remote', 'declineShare'),
'files_sharing');
+API::register('get',
+ '/apps/files_sharing/api/v1/remote_shares/{id}',
+ array('\OCA\Files_Sharing\API\Remote', 'getShare'),
+ 'files_sharing');
+
+API::register('delete',
+ '/apps/files_sharing/api/v1/remote_shares/{id}',
+ array('\OCA\Files_Sharing\API\Remote', 'unshare'),
+ 'files_sharing');
+
+
$sharees = new \OCA\Files_Sharing\API\Sharees(\OC::$server->getGroupManager(),
\OC::$server->getUserManager(),
\OC::$server->getContactsManager(),
diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js
index 98dbd4c6702..2e798a92578 100644
--- a/apps/files_sharing/js/sharedfilelist.js
+++ b/apps/files_sharing/js/sharedfilelist.js
@@ -122,7 +122,9 @@
if (this._reloadCall) {
this._reloadCall.abort();
}
- this._reloadCall = $.ajax({
+
+ var promises = [];
+ var shares = $.ajax({
url: OC.linkToOCS('apps/files_sharing/api/v1') + 'shares',
/* jshint camelcase: false */
data: {
@@ -132,25 +134,84 @@
type: 'GET',
beforeSend: function(xhr) {
xhr.setRequestHeader('OCS-APIREQUEST', 'true');
- }
+ },
});
+ promises.push(shares);
+
+ if (!!this._sharedWithUser) {
+ var remoteShares = $.ajax({
+ url: OC.linkToOCS('apps/files_sharing/api/v1') + 'remote_shares',
+ /* jshint camelcase: false */
+ data: {
+ format: 'json'
+ },
+ type: 'GET',
+ beforeSend: function(xhr) {
+ xhr.setRequestHeader('OCS-APIREQUEST', 'true');
+ },
+ });
+ promises.push(remoteShares);
+ } else {
+ //Push empty promise so callback gets called the same way
+ promises.push($.Deferred().resolve());
+ }
+
+ this._reloadCall = $.when.apply($, promises);
var callBack = this.reloadCallback.bind(this);
return this._reloadCall.then(callBack, callBack);
},
- reloadCallback: function(result) {
+ reloadCallback: function(shares, remoteShares) {
delete this._reloadCall;
this.hideMask();
this.$el.find('#headerSharedWith').text(
t('files_sharing', this._sharedWithUser ? 'Shared by' : 'Shared with')
);
- if (result.ocs && result.ocs.data) {
- this.setFiles(this._makeFilesFromShares(result.ocs.data));
+
+ var files = [];
+
+ if (shares[0].ocs && shares[0].ocs.data) {
+ files = files.concat(this._makeFilesFromShares(shares[0].ocs.data));
+ } else {
+ // TODO: error handling
}
- else {
+
+ if (remoteShares && remoteShares[0].ocs && remoteShares[0].ocs.data) {
+ files = files.concat(this._makeFilesFromRemoteShares(remoteShares[0].ocs.data));
+ } else {
// TODO: error handling
}
+
+ this.setFiles(files);
+ },
+
+ _makeFilesFromRemoteShares: function(data) {
+ var self = this;
+ var files = data;
+
+ files = _.chain(files)
+ // convert share data to file data
+ .map(function(share) {
+ var file = {
+ shareOwner: share.owner + '@' + share.remote.replace(/.*?:\/\//g, ""),
+ name: OC.basename(share.mountpoint),
+ mtime: share.mtime * 1000,
+ mimetype: share.mimetype,
+ type: share.type,
+ id: share.file_id,
+ path: OC.dirname(share.mountpoint),
+ permissions: share.permissions
+ };
+
+ file.shares = [{
+ id: share.id,
+ type: OC.Share.SHARE_TYPE_REMOTE
+ }];
+ return file;
+ })
+ .value();
+ return files;
},
/**
diff --git a/apps/files_sharing/l10n/ar.js b/apps/files_sharing/l10n/ar.js
index 376526356dc..d597b01a7b8 100644
--- a/apps/files_sharing/l10n/ar.js
+++ b/apps/files_sharing/l10n/ar.js
@@ -13,6 +13,7 @@ OC.L10N.register(
"This share is password-protected" : "هذه المشاركة محمية بكلمة مرور",
"The password is wrong. Try again." : "كلمة المرور خاطئة. حاول مرة أخرى",
"Password" : "كلمة المرور",
+ "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Name" : "اسم",
"Sorry, this link doesn’t seem to work anymore." : "عذرا، يبدو أن هذا الرابط لم يعد يعمل.",
"Reasons might be:" : "الأسباب الممكنة :",
diff --git a/apps/files_sharing/l10n/ar.json b/apps/files_sharing/l10n/ar.json
index e8590b931d9..1b4c04b33db 100644
--- a/apps/files_sharing/l10n/ar.json
+++ b/apps/files_sharing/l10n/ar.json
@@ -11,6 +11,7 @@
"This share is password-protected" : "هذه المشاركة محمية بكلمة مرور",
"The password is wrong. Try again." : "كلمة المرور خاطئة. حاول مرة أخرى",
"Password" : "كلمة المرور",
+ "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Name" : "اسم",
"Sorry, this link doesn’t seem to work anymore." : "عذرا، يبدو أن هذا الرابط لم يعد يعمل.",
"Reasons might be:" : "الأسباب الممكنة :",
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index 973aa0f15ac..0eb2b032e52 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -38,8 +38,13 @@ OC.L10N.register(
"Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen",
"You shared %1$s with %2$s" : "Du hast %1$s mit %2$s geteilt",
"You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt",
+ "%2$s shared %1$s with %3$s" : "%2$s geteilt %1$s mit %3$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s geteilt %1$s mit Gruppe %3$s",
+ "%2$s shared %1$s via link" : "%2$s geteilt %1$s via Link",
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt",
"You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben",
+ "Downloaded via public link" : "Runtergeladen mittels öffentlichen Link",
+ "Shared with %2$s" : "Geteilt mit %2$s",
"Shares" : "Freigaben",
"Accept" : "Ok",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index 5526be3b6bf..3c0b3dd5714 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -36,8 +36,13 @@
"Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen",
"You shared %1$s with %2$s" : "Du hast %1$s mit %2$s geteilt",
"You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt",
+ "%2$s shared %1$s with %3$s" : "%2$s geteilt %1$s mit %3$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s geteilt %1$s mit Gruppe %3$s",
+ "%2$s shared %1$s via link" : "%2$s geteilt %1$s via Link",
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt",
"You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben",
+ "Downloaded via public link" : "Runtergeladen mittels öffentlichen Link",
+ "Shared with %2$s" : "Geteilt mit %2$s",
"Shares" : "Freigaben",
"Accept" : "Ok",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js
index 5376ad45ca6..29cd5818d40 100644
--- a/apps/files_sharing/l10n/fa.js
+++ b/apps/files_sharing/l10n/fa.js
@@ -3,10 +3,13 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "اشتراک سرور به سرور در این سرور فعال نیست .",
"Invalid or untrusted SSL certificate" : "گواهینامه SSL غیر قابل اعتماد یا غیر معتبر است.",
+ "Storage not valid" : "فضای ذخیره‌سازی معتبر نیست",
"Couldn't add remote share" : "امکان افزودن اشتراک گذاری از راه دور وجود ندارد",
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
+ "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است",
+ "No shared links" : "هیچ لینک اشتراک‌گذاری وجود ندارد",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "آیا مایل به افزودن اشتراک از راه دور {name} از {owner}@{remote} هستید.",
"Remote share" : "اشتراک از راه دور",
"Remote share password" : "رمز عبور اشتراک از راه دور",
@@ -21,9 +24,11 @@ OC.L10N.register(
"%2$s shared %1$s with you" : "%2$s مورد %1$s را با شما به اشتراک گذاشت",
"You shared %1$s via link" : "شما %1$s را توسط پیوند به اشتراک گذاشتید",
"Shares" : "موارد به اشتراک گذاشته",
+ "Accept" : "قبول",
"This share is password-protected" : "این اشتراک توسط رمز عبور محافظت می شود",
"The password is wrong. Try again." : "رمزعبور اشتباه می باشد. دوباره امتحان کنید.",
"Password" : "گذرواژه",
+ "No entries found in this folder" : "هیچ ورودی‌ای در این پوشه وجود ندارد",
"Name" : "نام",
"Share time" : "زمان به اشتراک گذاری",
"Sorry, this link doesn’t seem to work anymore." : "متاسفانه این پیوند دیگر کار نمی کند",
@@ -35,6 +40,8 @@ OC.L10N.register(
"Add to your ownCloud" : "افزودن به ownCloud شما",
"Download" : "دانلود",
"Download %s" : "دانلود %s",
- "Direct link" : "پیوند مستقیم"
+ "Direct link" : "پیوند مستقیم",
+ "Open documentation" : "بازکردن مستند",
+ "HTML Code:" : "کد HTML :"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json
index 13778338f48..64d03e5186a 100644
--- a/apps/files_sharing/l10n/fa.json
+++ b/apps/files_sharing/l10n/fa.json
@@ -1,10 +1,13 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "اشتراک سرور به سرور در این سرور فعال نیست .",
"Invalid or untrusted SSL certificate" : "گواهینامه SSL غیر قابل اعتماد یا غیر معتبر است.",
+ "Storage not valid" : "فضای ذخیره‌سازی معتبر نیست",
"Couldn't add remote share" : "امکان افزودن اشتراک گذاری از راه دور وجود ندارد",
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
+ "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است",
+ "No shared links" : "هیچ لینک اشتراک‌گذاری وجود ندارد",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "آیا مایل به افزودن اشتراک از راه دور {name} از {owner}@{remote} هستید.",
"Remote share" : "اشتراک از راه دور",
"Remote share password" : "رمز عبور اشتراک از راه دور",
@@ -19,9 +22,11 @@
"%2$s shared %1$s with you" : "%2$s مورد %1$s را با شما به اشتراک گذاشت",
"You shared %1$s via link" : "شما %1$s را توسط پیوند به اشتراک گذاشتید",
"Shares" : "موارد به اشتراک گذاشته",
+ "Accept" : "قبول",
"This share is password-protected" : "این اشتراک توسط رمز عبور محافظت می شود",
"The password is wrong. Try again." : "رمزعبور اشتباه می باشد. دوباره امتحان کنید.",
"Password" : "گذرواژه",
+ "No entries found in this folder" : "هیچ ورودی‌ای در این پوشه وجود ندارد",
"Name" : "نام",
"Share time" : "زمان به اشتراک گذاری",
"Sorry, this link doesn’t seem to work anymore." : "متاسفانه این پیوند دیگر کار نمی کند",
@@ -33,6 +38,8 @@
"Add to your ownCloud" : "افزودن به ownCloud شما",
"Download" : "دانلود",
"Download %s" : "دانلود %s",
- "Direct link" : "پیوند مستقیم"
+ "Direct link" : "پیوند مستقیم",
+ "Open documentation" : "بازکردن مستند",
+ "HTML Code:" : "کد HTML :"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js
index 2e4a32480b1..a87d6156d40 100644
--- a/apps/files_sharing/l10n/fi_FI.js
+++ b/apps/files_sharing/l10n/fi_FI.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s jakoi kohteen %1$s linkin kautta",
"%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi",
"You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta",
+ "Downloaded via public link" : "Lataa julkista linkkiä käyttäen",
+ "Shared with %2$s" : "Jaettu käyttäjän %2$s kanssa",
+ "Shared with group %2$s" : "Jaettu ryhmän %2$s kanssa",
+ "Shared with %3$s by %2$s" : "Jaettu käyttäjän %3$s kanssa käyttäjän %2$s toimesta",
+ "Shared with group %3$s by %2$s" : "Jaettu ryhmän %3$s kanssa käyttäjän %2$s toimesta",
+ "Shared via link by %2$s" : "Jaettu linkin kautta käyttäjän %2$s toimesta",
+ "Shared by %2$s" : "Jakanut %2$s",
+ "Shared via public link" : "Jaettu julkisen linkin kautta",
"Shares" : "Jaot",
"You received %2$s as a remote share from %1$s" : "Sait kohteen %2$s etäjakona käyttäjältä %1$s",
"Accept" : "Hyväksy",
diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json
index 2b938d95c0e..172b8476092 100644
--- a/apps/files_sharing/l10n/fi_FI.json
+++ b/apps/files_sharing/l10n/fi_FI.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s jakoi kohteen %1$s linkin kautta",
"%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi",
"You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta",
+ "Downloaded via public link" : "Lataa julkista linkkiä käyttäen",
+ "Shared with %2$s" : "Jaettu käyttäjän %2$s kanssa",
+ "Shared with group %2$s" : "Jaettu ryhmän %2$s kanssa",
+ "Shared with %3$s by %2$s" : "Jaettu käyttäjän %3$s kanssa käyttäjän %2$s toimesta",
+ "Shared with group %3$s by %2$s" : "Jaettu ryhmän %3$s kanssa käyttäjän %2$s toimesta",
+ "Shared via link by %2$s" : "Jaettu linkin kautta käyttäjän %2$s toimesta",
+ "Shared by %2$s" : "Jakanut %2$s",
+ "Shared via public link" : "Jaettu julkisen linkin kautta",
"Shares" : "Jaot",
"You received %2$s as a remote share from %1$s" : "Sait kohteen %2$s etäjakona käyttäjältä %1$s",
"Accept" : "Hyväksy",
diff --git a/apps/files_sharing/l10n/hy.js b/apps/files_sharing/l10n/hy.js
index 10b9dfa1dd4..28de3fecd2e 100644
--- a/apps/files_sharing/l10n/hy.js
+++ b/apps/files_sharing/l10n/hy.js
@@ -1,6 +1,9 @@
OC.L10N.register(
"files_sharing",
{
+ "Cancel" : "Չեղարկել",
+ "Password" : "Գաղտնաբառ",
+ "Name" : "Անուն",
"Download" : "Բեռնել"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/hy.json b/apps/files_sharing/l10n/hy.json
index 1d9890db3d9..ca2bc14a120 100644
--- a/apps/files_sharing/l10n/hy.json
+++ b/apps/files_sharing/l10n/hy.json
@@ -1,4 +1,7 @@
{ "translations": {
+ "Cancel" : "Չեղարկել",
+ "Password" : "Գաղտնաբառ",
+ "Name" : "Անուն",
"Download" : "Բեռնել"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index d6fcab9c788..8cd66b34d24 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s ha condiviso %1$s tramite collegamento",
"%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te",
"You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento",
+ "Downloaded via public link" : "Scaricata tramite collegamento pubblico",
+ "Shared with %2$s" : "Condivisa con %2$s",
+ "Shared with group %2$s" : "Condivisa con il gruppo %2$s",
+ "Shared with %3$s by %2$s" : "Condivisa con %3$s da %2$s",
+ "Shared with group %3$s by %2$s" : "Condivisa con il gruppo %3$s da %2$s",
+ "Shared via link by %2$s" : "Condivisa tramite collegamento da %2$s",
+ "Shared by %2$s" : "Condivisa da %2$s",
+ "Shared via public link" : "Condivisa tramite collegamento pubblico",
"Shares" : "Condivisioni",
"You received %2$s as a remote share from %1$s" : "Hai ricevuto %2$s come condivisione remota da %1$s",
"Accept" : "Accetta",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index 1ae87296032..b93dafd7555 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s ha condiviso %1$s tramite collegamento",
"%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te",
"You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento",
+ "Downloaded via public link" : "Scaricata tramite collegamento pubblico",
+ "Shared with %2$s" : "Condivisa con %2$s",
+ "Shared with group %2$s" : "Condivisa con il gruppo %2$s",
+ "Shared with %3$s by %2$s" : "Condivisa con %3$s da %2$s",
+ "Shared with group %3$s by %2$s" : "Condivisa con il gruppo %3$s da %2$s",
+ "Shared via link by %2$s" : "Condivisa tramite collegamento da %2$s",
+ "Shared by %2$s" : "Condivisa da %2$s",
+ "Shared via public link" : "Condivisa tramite collegamento pubblico",
"Shares" : "Condivisioni",
"You received %2$s as a remote share from %1$s" : "Hai ricevuto %2$s come condivisione remota da %1$s",
"Accept" : "Accetta",
diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js
index e4b86b528f3..19eea24e97c 100644
--- a/apps/files_sharing/l10n/ko.js
+++ b/apps/files_sharing/l10n/ko.js
@@ -38,9 +38,21 @@ OC.L10N.register(
"Public shared file %1$s was downloaded" : "공개 공유 파일 %1$s이(가) 다운로드됨",
"You shared %1$s with %2$s" : "내가 %2$s 님과 %1$s을(를) 공유함",
"You shared %1$s with group %2$s" : "내가 %2$s 그룹과 %1$s을(를) 공유함",
+ "%2$s shared %1$s with %3$s" : "%2$s 님이 %1$s을(를) %3$s 님과 공유함",
+ "%2$s shared %1$s with group %3$s" : "%2$s 님이 %1$s을(를) %3$s 그룹과 공유함",
+ "%2$s shared %1$s via link" : "%2$s 님이 %1$s을(를) 링크로 공유함",
"%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함",
"You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함",
+ "Downloaded via public link" : "공개 링크로 다운로드",
+ "Shared with %2$s" : "%2$s 님과 공유함",
+ "Shared with group %2$s" : "%2$s 그룹과 공유함",
+ "Shared with %3$s by %2$s" : "%2$s 님이 %3$s 님과 공유함",
+ "Shared with group %3$s by %2$s" : "%2$s 님이 %3$s 그룹과 공유함",
+ "Shared via link by %2$s" : "%2$s 님이 링크로 공유함",
+ "Shared by %2$s" : "%2$s 님이 공유함",
+ "Shared via public link" : "공개 링크로 공유함",
"Shares" : "공유",
+ "You received %2$s as a remote share from %1$s" : "%1$s의 원격 공유로 %2$s을(를) 받았습니다",
"Accept" : "수락",
"Decline" : "거절",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s",
diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json
index 383e5038f3c..dd7e398c15c 100644
--- a/apps/files_sharing/l10n/ko.json
+++ b/apps/files_sharing/l10n/ko.json
@@ -36,9 +36,21 @@
"Public shared file %1$s was downloaded" : "공개 공유 파일 %1$s이(가) 다운로드됨",
"You shared %1$s with %2$s" : "내가 %2$s 님과 %1$s을(를) 공유함",
"You shared %1$s with group %2$s" : "내가 %2$s 그룹과 %1$s을(를) 공유함",
+ "%2$s shared %1$s with %3$s" : "%2$s 님이 %1$s을(를) %3$s 님과 공유함",
+ "%2$s shared %1$s with group %3$s" : "%2$s 님이 %1$s을(를) %3$s 그룹과 공유함",
+ "%2$s shared %1$s via link" : "%2$s 님이 %1$s을(를) 링크로 공유함",
"%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함",
"You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함",
+ "Downloaded via public link" : "공개 링크로 다운로드",
+ "Shared with %2$s" : "%2$s 님과 공유함",
+ "Shared with group %2$s" : "%2$s 그룹과 공유함",
+ "Shared with %3$s by %2$s" : "%2$s 님이 %3$s 님과 공유함",
+ "Shared with group %3$s by %2$s" : "%2$s 님이 %3$s 그룹과 공유함",
+ "Shared via link by %2$s" : "%2$s 님이 링크로 공유함",
+ "Shared by %2$s" : "%2$s 님이 공유함",
+ "Shared via public link" : "공개 링크로 공유함",
"Shares" : "공유",
+ "You received %2$s as a remote share from %1$s" : "%1$s의 원격 공유로 %2$s을(를) 받았습니다",
"Accept" : "수락",
"Decline" : "거절",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s",
diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js
index f1edae5f8eb..7b31b7c73e2 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s deelde %1$s via link",
"%2$s shared %1$s with you" : "%2$s deelde %1$s met u",
"You shared %1$s via link" : "U deelde %1$s via link",
+ "Downloaded via public link" : "Gedownload via een openbare link",
+ "Shared with %2$s" : "Gedeeld met %2$s",
+ "Shared with group %2$s" : "Gedeeld met groep %2$s",
+ "Shared with %3$s by %2$s" : "Gedeeld met %3$s door %2$s",
+ "Shared with group %3$s by %2$s" : "Gedeeld met groep %3$s door %2$s",
+ "Shared via link by %2$s" : "Gedeeld via link door %2$s",
+ "Shared by %2$s" : "Gedeeld door %2$s",
+ "Shared via public link" : "Gedeeld via een openbare link",
"Shares" : "Gedeeld",
"You received %2$s as a remote share from %1$s" : "U ontving %2$s als een externe share van %1$s",
"Accept" : "Accepteren",
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index a285071ca30..92ba1c04268 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s deelde %1$s via link",
"%2$s shared %1$s with you" : "%2$s deelde %1$s met u",
"You shared %1$s via link" : "U deelde %1$s via link",
+ "Downloaded via public link" : "Gedownload via een openbare link",
+ "Shared with %2$s" : "Gedeeld met %2$s",
+ "Shared with group %2$s" : "Gedeeld met groep %2$s",
+ "Shared with %3$s by %2$s" : "Gedeeld met %3$s door %2$s",
+ "Shared with group %3$s by %2$s" : "Gedeeld met groep %3$s door %2$s",
+ "Shared via link by %2$s" : "Gedeeld via link door %2$s",
+ "Shared by %2$s" : "Gedeeld door %2$s",
+ "Shared via public link" : "Gedeeld via een openbare link",
"Shares" : "Gedeeld",
"You received %2$s as a remote share from %1$s" : "U ontving %2$s als een externe share van %1$s",
"Accept" : "Accepteren",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index cb167dfb5a4..d2dac6d5955 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s compartilhado via link %1$s",
"%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você",
"You shared %1$s via link" : "Você compartilhou %1$s via link",
+ "Downloaded via public link" : "Baixar via link público",
+ "Shared with %2$s" : "Compartilhado com %2$s",
+ "Shared with group %2$s" : "Compartilhado com o grupo %2$s",
+ "Shared with %3$s by %2$s" : "Compartilhado com %3$s por %2$s",
+ "Shared with group %3$s by %2$s" : "Compartilhado com o grupo %3$s por %2$s",
+ "Shared via link by %2$s" : "Compartilhado via link por %2$s",
+ "Shared by %2$s" : "Compartilhado por %2$s",
+ "Shared via public link" : "Compartilhado via link público",
"Shares" : "Compartilhamentos",
"You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s",
"Accept" : "Aceitar",
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index b42a56f03ce..e64c07ff8e0 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s compartilhado via link %1$s",
"%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você",
"You shared %1$s via link" : "Você compartilhou %1$s via link",
+ "Downloaded via public link" : "Baixar via link público",
+ "Shared with %2$s" : "Compartilhado com %2$s",
+ "Shared with group %2$s" : "Compartilhado com o grupo %2$s",
+ "Shared with %3$s by %2$s" : "Compartilhado com %3$s por %2$s",
+ "Shared with group %3$s by %2$s" : "Compartilhado com o grupo %3$s por %2$s",
+ "Shared via link by %2$s" : "Compartilhado via link por %2$s",
+ "Shared by %2$s" : "Compartilhado por %2$s",
+ "Shared via public link" : "Compartilhado via link público",
"Shares" : "Compartilhamentos",
"You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s",
"Accept" : "Aceitar",
diff --git a/apps/files_sharing/lib/activity.php b/apps/files_sharing/lib/activity.php
index 63ac2e90b2a..c5eb7d09ede 100644
--- a/apps/files_sharing/lib/activity.php
+++ b/apps/files_sharing/lib/activity.php
@@ -24,6 +24,8 @@
namespace OCA\Files_Sharing;
use OCP\Activity\IExtension;
+use OCP\Activity\IManager;
+use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\L10N\IFactory;
@@ -67,13 +69,18 @@ class Activity implements IExtension {
/** @var IURLGenerator */
protected $URLGenerator;
+ /** @var IManager */
+ protected $activityManager;
+
/**
* @param IFactory $languageFactory
* @param IURLGenerator $URLGenerator
+ * @param IManager $activityManager
*/
- public function __construct(IFactory $languageFactory, IURLGenerator $URLGenerator) {
+ public function __construct(IFactory $languageFactory, IURLGenerator $URLGenerator, IManager $activityManager) {
$this->languageFactory = $languageFactory;
$this->URLGenerator = $URLGenerator;
+ $this->activityManager = $activityManager;
}
protected function getL10N($languageCode = null) {
@@ -149,49 +156,102 @@ class Activity implements IExtension {
* @return string|false
*/
public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
+ if ($app !== self::FILES_SHARING_APP) {
+ return false;
+ }
+
$l = $this->getL10N($languageCode);
- if ($app === self::FILES_SHARING_APP) {
- switch ($text) {
- case self::SUBJECT_REMOTE_SHARE_RECEIVED:
- if (sizeof($params) === 2) {
- // New activity ownCloud 8.2+
- return (string) $l->t('You received a new remote share %2$s from %1$s', $params);
- }
- return (string) $l->t('You received a new remote share from %s', $params);
- case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
- return (string) $l->t('%1$s accepted remote share %2$s', $params);
- case self::SUBJECT_REMOTE_SHARE_DECLINED:
- return (string) $l->t('%1$s declined remote share %2$s', $params);
- case self::SUBJECT_REMOTE_SHARE_UNSHARED:
- return (string) $l->t('%1$s unshared %2$s from you', $params);
- case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
- return (string) $l->t('Public shared folder %1$s was downloaded', $params);
- case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
- return (string) $l->t('Public shared file %1$s was downloaded', $params);
- case self::SUBJECT_SHARED_USER_SELF:
- return (string) $l->t('You shared %1$s with %2$s', $params);
- case self::SUBJECT_SHARED_GROUP_SELF:
- return (string) $l->t('You shared %1$s with group %2$s', $params);
- case self::SUBJECT_RESHARED_USER_BY:
- return (string) $l->t('%2$s shared %1$s with %3$s', $params);
- case self::SUBJECT_RESHARED_GROUP_BY:
- return (string) $l->t('%2$s shared %1$s with group %3$s', $params);
- case self::SUBJECT_RESHARED_LINK_BY:
- return (string) $l->t('%2$s shared %1$s via link', $params);
- case self::SUBJECT_SHARED_WITH_BY:
- return (string) $l->t('%2$s shared %1$s with you', $params);
- case self::SUBJECT_SHARED_LINK_SELF:
- return (string) $l->t('You shared %1$s via link', $params);
- case self::SUBJECT_SHARED_EMAIL:
- return (string) $l->t('You shared %1$s with %2$s', $params);
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ $translation = $this->translateShort($text, $l, $params);
+ if ($translation !== false) {
+ return $translation;
}
}
+ return $this->translateLong($text, $l, $params);
+ }
+
+ /**
+ * @param string $text
+ * @param IL10N $l
+ * @param array $params
+ * @return bool|string
+ */
+ protected function translateLong($text, IL10N $l, array $params) {
+
+ switch ($text) {
+ case self::SUBJECT_REMOTE_SHARE_RECEIVED:
+ if (sizeof($params) === 2) {
+ // New activity ownCloud 8.2+
+ return (string) $l->t('You received a new remote share %2$s from %1$s', $params);
+ }
+ return (string) $l->t('You received a new remote share from %s', $params);
+ case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
+ return (string) $l->t('%1$s accepted remote share %2$s', $params);
+ case self::SUBJECT_REMOTE_SHARE_DECLINED:
+ return (string) $l->t('%1$s declined remote share %2$s', $params);
+ case self::SUBJECT_REMOTE_SHARE_UNSHARED:
+ return (string) $l->t('%1$s unshared %2$s from you', $params);
+ case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
+ return (string) $l->t('Public shared folder %1$s was downloaded', $params);
+ case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
+ return (string) $l->t('Public shared file %1$s was downloaded', $params);
+ case self::SUBJECT_SHARED_USER_SELF:
+ return (string) $l->t('You shared %1$s with %2$s', $params);
+ case self::SUBJECT_SHARED_GROUP_SELF:
+ return (string) $l->t('You shared %1$s with group %2$s', $params);
+ case self::SUBJECT_RESHARED_USER_BY:
+ return (string) $l->t('%2$s shared %1$s with %3$s', $params);
+ case self::SUBJECT_RESHARED_GROUP_BY:
+ return (string) $l->t('%2$s shared %1$s with group %3$s', $params);
+ case self::SUBJECT_RESHARED_LINK_BY:
+ return (string) $l->t('%2$s shared %1$s via link', $params);
+ case self::SUBJECT_SHARED_WITH_BY:
+ return (string) $l->t('%2$s shared %1$s with you', $params);
+ case self::SUBJECT_SHARED_LINK_SELF:
+ return (string) $l->t('You shared %1$s via link', $params);
+ case self::SUBJECT_SHARED_EMAIL:
+ return (string) $l->t('You shared %1$s with %2$s', $params);
+ }
+
return false;
}
/**
+ * @param string $text
+ * @param IL10N $l
+ * @param array $params
+ * @return bool|string
+ */
+ protected function translateShort($text, IL10N $l, array $params) {
+ switch ($text) {
+ case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
+ case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
+ return (string) $l->t('Downloaded via public link');
+ case self::SUBJECT_SHARED_USER_SELF:
+ return (string) $l->t('Shared with %2$s', $params);
+ case self::SUBJECT_SHARED_GROUP_SELF:
+ return (string) $l->t('Shared with group %2$s', $params);
+ case self::SUBJECT_RESHARED_USER_BY:
+ return (string) $l->t('Shared with %3$s by %2$s', $params);
+ case self::SUBJECT_RESHARED_GROUP_BY:
+ return (string) $l->t('Shared with group %3$s by %2$s', $params);
+ case self::SUBJECT_RESHARED_LINK_BY:
+ return (string) $l->t('Shared via link by %2$s', $params);
+ case self::SUBJECT_SHARED_WITH_BY:
+ return (string) $l->t('Shared by %2$s', $params);
+ case self::SUBJECT_SHARED_LINK_SELF:
+ return (string) $l->t('Shared via public link');
+ case self::SUBJECT_SHARED_EMAIL:
+ return (string) $l->t('Shared with %2$s', $params);
+
+ default:
+ return false;
+ }
+ }
+
+ /**
* The extension can define the type of parameters for translation
*
* Currently known types are:
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 8552b2fbd34..2ba02f40d2f 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -180,9 +180,9 @@ class Manager {
* @param int $id share id
* @return mixed share of false
*/
- private function getShare($id) {
+ public function getShare($id) {
$getShare = $this->connection->prepare('
- SELECT `remote`, `remote_id`, `share_token`, `name`
+ SELECT `id`, `remote`, `remote_id`, `share_token`, `name`, `owner`, `user`, `mountpoint`, `accepted`
FROM `*PREFIX*share_external`
WHERE `id` = ? AND `user` = ?');
$result = $getShare->execute(array($id, $this->uid));
@@ -407,6 +407,15 @@ class Manager {
}
/**
+ * return a list of shares wich are accepted by the user
+ *
+ * @return array list of accepted server-to-server shares
+ */
+ public function getAcceptedShares() {
+ return $this->getShares(true);
+ }
+
+ /**
* return a list of shares for the user
*
* @param bool|null $accepted True for accepted only,
@@ -415,7 +424,9 @@ class Manager {
* @return array list of open server-to-server shares
*/
private function getShares($accepted) {
- $query = 'SELECT * FROM `*PREFIX*share_external` WHERE `user` = ?';
+ $query = 'SELECT `id`, `remote`, `remote_id`, `share_token`, `name`, `owner`, `user`, `mountpoint`, `accepted`
+ FROM `*PREFIX*share_external`
+ WHERE `user` = ?';
$parameters = [$this->uid];
if (!is_null($accepted)) {
$query .= ' AND `accepted` = ?';
diff --git a/apps/files_sharing/tests/activity.php b/apps/files_sharing/tests/activity.php
index 53a306b70f7..f7f324cdfc3 100644
--- a/apps/files_sharing/tests/activity.php
+++ b/apps/files_sharing/tests/activity.php
@@ -36,7 +36,10 @@ class Activity extends \OCA\Files_Sharing\Tests\TestCase{
parent::setUp();
$this->activity = new \OCA\Files_Sharing\Activity(
$this->getMock('\OC\L10N\Factory'),
- $this->getMockBuilder('\OC\URLGenerator')
+ $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock(),
+ $this->getMockBuilder('\OCP\Activity\IManager')
->disableOriginalConstructor()
->getMock()
);
diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js
index 7fdc6345e38..90ae9c2d6da 100644
--- a/apps/files_sharing/tests/js/sharedfilelistSpec.js
+++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js
@@ -57,6 +57,7 @@ describe('OCA.Sharing.FileList tests', function() {
describe('loading file list for incoming shares', function() {
var ocsResponse;
+ var ocsResponseRemote;
beforeEach(function() {
fileList = new OCA.Sharing.FileList(
@@ -95,26 +96,64 @@ describe('OCA.Sharing.FileList tests', function() {
}]
}
};
+
+ /* jshint camelcase: false */
+ ocsResponseRemote = {
+ ocs: {
+ meta: {
+ status: 'ok',
+ statuscode: 100,
+ message: null
+ },
+ data: [{
+ id: 8,
+ remote: 'https://foo.bar/',
+ remote_id: 42,
+ share_token: 'abc',
+ name: '/a.txt',
+ owner: 'user3',
+ user: 'user1',
+ mountpoint: '/b.txt',
+ mountpoint_hash: 'def',
+ accepted: 1,
+ mimetype: 'text/plain',
+ mtime: 22222,
+ permissions: 31,
+ type: 'file',
+ file_id: 1337
+ }]
+ }
+ };
+
});
it('render file shares', function() {
- var request;
-
- expect(fakeServer.requests.length).toEqual(1);
- request = fakeServer.requests[0];
- expect(request.url).toEqual(
+ expect(fakeServer.requests.length).toEqual(2);
+ expect(fakeServer.requests[0].url).toEqual(
OC.linkToOCS('apps/files_sharing/api/v1') +
'shares?format=json&shared_with_me=true'
);
+ expect(fakeServer.requests[1].url).toEqual(
+ OC.linkToOCS('apps/files_sharing/api/v1') +
+ 'remote_shares?format=json'
+ );
+
fakeServer.requests[0].respond(
200,
{ 'Content-Type': 'application/json' },
JSON.stringify(ocsResponse)
);
+ fakeServer.requests[1].respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify(ocsResponseRemote)
+ );
+
var $rows = fileList.$el.find('tbody tr');
+ expect($rows.length).toEqual(2);
+
var $tr = $rows.eq(0);
- expect($rows.length).toEqual(1);
expect($tr.attr('data-id')).toEqual('49');
expect($tr.attr('data-type')).toEqual('file');
expect($tr.attr('data-file')).toEqual('local name.txt');
@@ -132,32 +171,66 @@ describe('OCA.Sharing.FileList tests', function() {
'?dir=%2Flocal%20path&files=local%20name.txt'
);
expect($tr.find('.nametext').text().trim()).toEqual('local name.txt');
+
+ $tr = $rows.eq(1);
+ expect($tr.attr('data-id')).toEqual('1337');
+ expect($tr.attr('data-type')).toEqual('file');
+ expect($tr.attr('data-file')).toEqual('b.txt');
+ expect($tr.attr('data-path')).toEqual('');
+ expect($tr.attr('data-size')).not.toBeDefined();
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL); // read and delete
+ expect($tr.attr('data-mime')).toEqual('text/plain');
+ expect($tr.attr('data-mtime')).toEqual('22222000');
+ expect($tr.attr('data-share-owner')).toEqual('user3@foo.bar/');
+ expect($tr.attr('data-share-id')).toEqual('8');
+ expect($tr.find('a.name').attr('href')).toEqual(
+ OC.webroot +
+ '/index.php/apps/files/ajax/download.php' +
+ '?dir=%2F&files=b.txt'
+ );
+ expect($tr.find('.nametext').text().trim()).toEqual('b.txt');
});
it('render folder shares', function() {
/* jshint camelcase: false */
- var request;
ocsResponse.ocs.data[0] = _.extend(ocsResponse.ocs.data[0], {
item_type: 'folder',
file_target: '/local path/local name',
path: 'files/something shared',
});
- expect(fakeServer.requests.length).toEqual(1);
- request = fakeServer.requests[0];
- expect(request.url).toEqual(
+ ocsResponseRemote.ocs.data[0] = _.extend(ocsResponseRemote.ocs.data[0], {
+ type: 'dir',
+ mimetype: 'httpd/unix-directory',
+ name: '/a',
+ mountpoint: '/b'
+ });
+
+ expect(fakeServer.requests.length).toEqual(2);
+ expect(fakeServer.requests[0].url).toEqual(
OC.linkToOCS('apps/files_sharing/api/v1') +
'shares?format=json&shared_with_me=true'
);
+ expect(fakeServer.requests[1].url).toEqual(
+ OC.linkToOCS('apps/files_sharing/api/v1') +
+ 'remote_shares?format=json'
+ );
fakeServer.requests[0].respond(
200,
{ 'Content-Type': 'application/json' },
JSON.stringify(ocsResponse)
);
+ fakeServer.requests[1].respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify(ocsResponseRemote)
+ );
var $rows = fileList.$el.find('tbody tr');
+ expect($rows.length).toEqual(2);
+
var $tr = $rows.eq(0);
- expect($rows.length).toEqual(1);
expect($tr.attr('data-id')).toEqual('49');
expect($tr.attr('data-type')).toEqual('dir');
expect($tr.attr('data-file')).toEqual('local name');
@@ -175,6 +248,26 @@ describe('OCA.Sharing.FileList tests', function() {
'?dir=/local%20path/local%20name'
);
expect($tr.find('.nametext').text().trim()).toEqual('local name');
+
+ $tr = $rows.eq(1);
+ expect($tr.attr('data-id')).toEqual('1337');
+ expect($tr.attr('data-type')).toEqual('dir');
+ expect($tr.attr('data-file')).toEqual('b');
+ expect($tr.attr('data-path')).toEqual('');
+ expect($tr.attr('data-size')).not.toBeDefined();
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL); // read and delete
+ expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
+ expect($tr.attr('data-mtime')).toEqual('22222000');
+ expect($tr.attr('data-share-owner')).toEqual('user3@foo.bar/');
+ expect($tr.attr('data-share-id')).toEqual('8');
+ expect($tr.find('a.name').attr('href')).toEqual(
+ OC.webroot +
+ '/index.php/apps/files' +
+ '?dir=/b'
+ );
+ expect($tr.find('.nametext').text().trim()).toEqual('b');
+
});
});
describe('loading file list for outgoing shares', function() {
diff --git a/apps/files_trashbin/l10n/ar.js b/apps/files_trashbin/l10n/ar.js
index bd6a6ef89d9..964d547c42a 100644
--- a/apps/files_trashbin/l10n/ar.js
+++ b/apps/files_trashbin/l10n/ar.js
@@ -5,11 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "تعذّر استرجاع %s ",
"Deleted files" : "حذف الملفات",
"Restore" : "استعيد",
+ "Delete" : "إلغاء",
"Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"restored" : "تمت الاستعادة",
+ "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
+ "Select all" : "تحديد الكل ",
"Name" : "اسم",
- "Deleted" : "تم الحذف",
- "Delete" : "إلغاء"
+ "Deleted" : "تم الحذف"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/apps/files_trashbin/l10n/ar.json b/apps/files_trashbin/l10n/ar.json
index 4df828c0843..cb73176fda1 100644
--- a/apps/files_trashbin/l10n/ar.json
+++ b/apps/files_trashbin/l10n/ar.json
@@ -3,11 +3,13 @@
"Couldn't restore %s" : "تعذّر استرجاع %s ",
"Deleted files" : "حذف الملفات",
"Restore" : "استعيد",
+ "Delete" : "إلغاء",
"Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"restored" : "تمت الاستعادة",
+ "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
+ "Select all" : "تحديد الكل ",
"Name" : "اسم",
- "Deleted" : "تم الحذف",
- "Delete" : "إلغاء"
+ "Deleted" : "تم الحذف"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/fa.js b/apps/files_trashbin/l10n/fa.js
index 8dc5f70fd68..28aa38a96a6 100644
--- a/apps/files_trashbin/l10n/fa.js
+++ b/apps/files_trashbin/l10n/fa.js
@@ -5,11 +5,13 @@ OC.L10N.register(
"Couldn't restore %s" : "%s را نمی توان بازگرداند",
"Deleted files" : "فایل های حذف شده",
"Restore" : "بازیابی",
+ "Delete" : "حذف",
"Delete permanently" : "حذف قطعی",
"Error" : "خطا",
"restored" : "بازیابی شد",
+ "No entries found in this folder" : "هیچ ورودی‌ای در این پوشه وجود ندارد",
+ "Select all" : "انتخاب همه",
"Name" : "نام",
- "Deleted" : "حذف شده",
- "Delete" : "حذف"
+ "Deleted" : "حذف شده"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_trashbin/l10n/fa.json b/apps/files_trashbin/l10n/fa.json
index befa84ab15e..d8641316f44 100644
--- a/apps/files_trashbin/l10n/fa.json
+++ b/apps/files_trashbin/l10n/fa.json
@@ -3,11 +3,13 @@
"Couldn't restore %s" : "%s را نمی توان بازگرداند",
"Deleted files" : "فایل های حذف شده",
"Restore" : "بازیابی",
+ "Delete" : "حذف",
"Delete permanently" : "حذف قطعی",
"Error" : "خطا",
"restored" : "بازیابی شد",
+ "No entries found in this folder" : "هیچ ورودی‌ای در این پوشه وجود ندارد",
+ "Select all" : "انتخاب همه",
"Name" : "نام",
- "Deleted" : "حذف شده",
- "Delete" : "حذف"
+ "Deleted" : "حذف شده"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/hy.js b/apps/files_trashbin/l10n/hy.js
index 0ad4f14c7b7..3cc05b39236 100644
--- a/apps/files_trashbin/l10n/hy.js
+++ b/apps/files_trashbin/l10n/hy.js
@@ -1,6 +1,12 @@
OC.L10N.register(
"files_trashbin",
{
- "Delete" : "Ջնջել"
+ "Deleted files" : "Ջնջված ֆայլեր",
+ "Restore" : "Վերականգնել",
+ "Delete" : "Ջնջել",
+ "Delete permanently" : "Ջնջել ընդմիշտ",
+ "No deleted files" : "Ջնջված ֆայլեր չկան",
+ "Select all" : "Նշել բոլորը",
+ "Name" : "Անուն"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/hy.json b/apps/files_trashbin/l10n/hy.json
index 081a2c5f49e..994d6afaa58 100644
--- a/apps/files_trashbin/l10n/hy.json
+++ b/apps/files_trashbin/l10n/hy.json
@@ -1,4 +1,10 @@
{ "translations": {
- "Delete" : "Ջնջել"
+ "Deleted files" : "Ջնջված ֆայլեր",
+ "Restore" : "Վերականգնել",
+ "Delete" : "Ջնջել",
+ "Delete permanently" : "Ջնջել ընդմիշտ",
+ "No deleted files" : "Ջնջված ֆայլեր չկան",
+ "Select all" : "Նշել բոլորը",
+ "Name" : "Անուն"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/lib/storage.php b/apps/files_trashbin/lib/storage.php
index 4185fc6aec4..0e42df1e967 100644
--- a/apps/files_trashbin/lib/storage.php
+++ b/apps/files_trashbin/lib/storage.php
@@ -142,6 +142,13 @@ class Storage extends Wrapper {
) {
return call_user_func_array([$this->storage, $method], [$path]);
}
+
+ // check permissions before we continue, this is especially important for
+ // shared files
+ if (!$this->isDeletable($path)) {
+ return false;
+ }
+
$normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path);
$result = true;
if (!isset($this->deletedFiles[$normalized])) {
diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 840fd4fa146..ea6f0993dd6 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -136,27 +136,28 @@ class Trashbin {
*
* @param string $sourcePath
* @param string $owner
- * @param string $ownerPath
+ * @param $targetPath
+ * @param $user
* @param integer $timestamp
*/
- private static function copyFilesToOwner($sourcePath, $owner, $ownerPath, $timestamp) {
+ private static function copyFilesToUser($sourcePath, $owner, $targetPath, $user, $timestamp) {
self::setUpTrash($owner);
- $ownerFilename = basename($ownerPath);
- $ownerLocation = dirname($ownerPath);
+ $targetFilename = basename($targetPath);
+ $targetLocation = dirname($targetPath);
$sourceFilename = basename($sourcePath);
$view = new \OC\Files\View('/');
- $source = \OCP\User::getUser() . '/files_trashbin/files/' . $sourceFilename . '.d' . $timestamp;
- $target = $owner . '/files_trashbin/files/' . $ownerFilename . '.d' . $timestamp;
+ $target = $user . '/files_trashbin/files/' . $targetFilename . '.d' . $timestamp;
+ $source = $owner . '/files_trashbin/files/' . $sourceFilename . '.d' . $timestamp;
self::copy_recursive($source, $target, $view);
if ($view->file_exists($target)) {
$query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`user`) VALUES (?,?,?,?)");
- $result = $query->execute(array($ownerFilename, $timestamp, $ownerLocation, $owner));
+ $result = $query->execute(array($targetFilename, $timestamp, $targetLocation, $user));
if (!$result) {
\OCP\Util::writeLog('files_trashbin', 'trash bin database couldn\'t be updated for the files owner', \OCP\Util::ERROR);
}
@@ -168,6 +169,7 @@ class Trashbin {
* move file to the trash bin
*
* @param string $file_path path to the deleted file/directory relative to the files root directory
+ * @return bool
*/
public static function move2trash($file_path) {
// get the user for which the filesystem is setup
@@ -176,9 +178,9 @@ class Trashbin {
$size = 0;
list($owner, $ownerPath) = self::getUidAndFilename($file_path);
- $view = new \OC\Files\View('/' . $user);
+ $ownerView = new \OC\Files\View('/' . $owner);
// file has been deleted in between
- if (!$view->file_exists('/files/' . $file_path)) {
+ if (!$ownerView->file_exists('/files/' . $ownerPath)) {
return true;
}
@@ -188,7 +190,7 @@ class Trashbin {
self::setUpTrash($owner);
}
- $path_parts = pathinfo($file_path);
+ $path_parts = pathinfo($ownerPath);
$filename = $path_parts['basename'];
$location = $path_parts['dirname'];
@@ -200,9 +202,9 @@ class Trashbin {
$trashPath = '/files_trashbin/files/' . $filename . '.d' . $timestamp;
/** @var \OC\Files\Storage\Storage $trashStorage */
- list($trashStorage, $trashInternalPath) = $view->resolvePath($trashPath);
+ list($trashStorage, $trashInternalPath) = $ownerView->resolvePath($trashPath);
/** @var \OC\Files\Storage\Storage $sourceStorage */
- list($sourceStorage, $sourceInternalPath) = $view->resolvePath('/files/' . $file_path);
+ list($sourceStorage, $sourceInternalPath) = $ownerView->resolvePath('/files/' . $ownerPath);
try {
$sizeOfAddedFiles = $sourceStorage->filesize($sourceInternalPath);
if ($trashStorage->file_exists($trashInternalPath)) {
@@ -222,23 +224,23 @@ class Trashbin {
return false;
}
- $view->getUpdater()->rename('/files/' . $file_path, $trashPath);
+ $ownerView->getUpdater()->rename('/files/' . $ownerPath, $trashPath);
if ($sizeOfAddedFiles !== false) {
$size = $sizeOfAddedFiles;
$query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`user`) VALUES (?,?,?,?)");
- $result = $query->execute(array($filename, $timestamp, $location, $user));
+ $result = $query->execute(array($filename, $timestamp, $location, $owner));
if (!$result) {
\OCP\Util::writeLog('files_trashbin', 'trash bin database couldn\'t be updated', \OCP\Util::ERROR);
}
\OCP\Util::emitHook('\OCA\Files_Trashbin\Trashbin', 'post_moveToTrash', array('filePath' => \OC\Files\Filesystem::normalizePath($file_path),
'trashPath' => \OC\Files\Filesystem::normalizePath($filename . '.d' . $timestamp)));
- $size += self::retainVersions($file_path, $filename, $owner, $ownerPath, $timestamp);
+ $size += self::retainVersions($filename, $owner, $ownerPath, $timestamp);
// if owner !== user we need to also add a copy to the owners trash
if ($user !== $owner) {
- self::copyFilesToOwner($file_path, $owner, $ownerPath, $timestamp);
+ self::copyFilesToUser($ownerPath, $owner, $file_path, $user, $timestamp);
}
}
@@ -258,7 +260,6 @@ class Trashbin {
/**
* Move file versions to trash so that they can be restored later
*
- * @param string $file_path path to original file
* @param string $filename of deleted file
* @param string $owner owner user id
* @param string $ownerPath path relative to the owner's home storage
@@ -266,7 +267,7 @@ class Trashbin {
*
* @return int size of stored versions
*/
- private static function retainVersions($file_path, $filename, $owner, $ownerPath, $timestamp) {
+ private static function retainVersions($filename, $owner, $ownerPath, $timestamp) {
$size = 0;
if (\OCP\App::isEnabled('files_versions') && !empty($ownerPath)) {
diff --git a/apps/files_versions/js/versioncollection.js b/apps/files_versions/js/versioncollection.js
index 3f8214cde8c..176f8e7529c 100644
--- a/apps/files_versions/js/versioncollection.js
+++ b/apps/files_versions/js/versioncollection.js
@@ -67,6 +67,11 @@
return this.fetch({remove: false});
},
+ reset: function() {
+ this._currentIndex = 0;
+ OC.Backbone.Collection.prototype.reset.apply(this, arguments);
+ },
+
parse: function(result) {
var results = _.map(result.data.versions, function(version) {
var revision = parseInt(version.version, 10);
diff --git a/apps/files_versions/js/versionstabview.js b/apps/files_versions/js/versionstabview.js
index 55f24868196..f2b1c18bd37 100644
--- a/apps/files_versions/js/versionstabview.js
+++ b/apps/files_versions/js/versionstabview.js
@@ -85,12 +85,18 @@
ev.preventDefault();
revision = $target.attr('data-revision');
+ this.$el.find('.versions, .showMoreVersions').addClass('hidden');
+
var versionModel = this.collection.get(revision);
versionModel.revert({
success: function() {
// reset and re-fetch the updated collection
+ self.$versionsContainer.empty();
self.collection.setFileInfo(fileInfoModel);
- self.collection.fetch();
+ self.collection.reset([], {silent: true});
+ self.collection.fetchNext();
+
+ self.$el.find('.versions').removeClass('hidden');
// update original model
fileInfoModel.trigger('busy', fileInfoModel, false);
@@ -157,7 +163,7 @@
if (fileInfo) {
this.render();
this.collection.setFileInfo(fileInfo);
- this.collection.reset({silent: true});
+ this.collection.reset([], {silent: true});
this.nextPage();
} else {
this.render();
diff --git a/apps/files_versions/l10n/hy.js b/apps/files_versions/l10n/hy.js
new file mode 100644
index 00000000000..3924810e149
--- /dev/null
+++ b/apps/files_versions/l10n/hy.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "files_versions",
+ {
+ "Versions" : "Տարբերակներ",
+ "Restore" : "Վերականգնել"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_versions/l10n/hy.json b/apps/files_versions/l10n/hy.json
new file mode 100644
index 00000000000..7f61c267c7c
--- /dev/null
+++ b/apps/files_versions/l10n/hy.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "Versions" : "Տարբերակներ",
+ "Restore" : "Վերականգնել"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_versions/lib/storage.php b/apps/files_versions/lib/storage.php
index bdf1811c5f9..cd2077d2922 100644
--- a/apps/files_versions/lib/storage.php
+++ b/apps/files_versions/lib/storage.php
@@ -42,6 +42,7 @@ namespace OCA\Files_Versions;
use OCA\Files_Versions\AppInfo\Application;
use OCA\Files_Versions\Command\Expire;
+use OCP\Lock\ILockingProvider;
class Storage {
@@ -337,11 +338,19 @@ class Storage {
* @return bool true for success, false otherwise
*/
private static function copyFileContents($view, $path1, $path2) {
+ /** @var \OC\Files\Storage\Storage $storage1 */
list($storage1, $internalPath1) = $view->resolvePath($path1);
+ /** @var \OC\Files\Storage\Storage $storage2 */
list($storage2, $internalPath2) = $view->resolvePath($path2);
+ $view->lockFile($path1, ILockingProvider::LOCK_EXCLUSIVE);
+ $view->lockFile($path2, ILockingProvider::LOCK_EXCLUSIVE);
+
$result = $storage2->moveFromStorage($storage1, $internalPath1, $internalPath2);
+ $view->unlockFile($path1, ILockingProvider::LOCK_EXCLUSIVE);
+ $view->unlockFile($path2, ILockingProvider::LOCK_EXCLUSIVE);
+
return ($result !== false);
}
diff --git a/apps/files_versions/tests/js/versionstabviewSpec.js b/apps/files_versions/tests/js/versionstabviewSpec.js
index 4435f38ef7e..306dd66be2a 100644
--- a/apps/files_versions/tests/js/versionstabviewSpec.js
+++ b/apps/files_versions/tests/js/versionstabviewSpec.js
@@ -76,7 +76,7 @@ describe('OCA.Versions.VersionsTabView', function() {
expect($versions.length).toEqual(2);
var $item = $versions.eq(0);
expect($item.find('.downloadVersion').attr('href')).toEqual(version1.getDownloadUrl());
- expect($item.find('.versiondate').text()).toEqual('a few seconds ago');
+ expect($item.find('.versiondate').text()).toEqual('seconds ago');
expect($item.find('.revertVersion').length).toEqual(1);
expect($item.find('.preview').attr('src')).toEqual(version1.getPreviewUrl());
diff --git a/apps/user_ldap/l10n/fa.js b/apps/user_ldap/l10n/fa.js
index 81f065ef7a4..7dd4e884a4d 100644
--- a/apps/user_ldap/l10n/fa.js
+++ b/apps/user_ldap/l10n/fa.js
@@ -25,18 +25,28 @@ OC.L10N.register(
"Groups" : "گروه ها",
"Test Configuration" : "امتحان پیکربندی",
"Help" : "راه‌نما",
+ "Only from these groups:" : "تنها از این گروه‌ها:",
+ "Search groups" : "جستجوی گروه‌ها",
+ "Available groups" : "گروه‌های موجود",
+ "Selected groups" : "گروه‌های انتخاب شده",
+ "LDAP Filter:" : "فیلتر LDAP:",
+ "LDAP / AD Username:" : "نام‌کاربری LDAP / AD :",
+ "LDAP / AD Email Address:" : " آدرس ایمیل LDAP / AD :",
"Other Attributes:" : "مشخصه های دیگر:",
"1. Server" : "1. سرور",
"%s. Server:" : "%s. سرور:",
"Host" : "میزبانی",
"Port" : "درگاه",
+ "Detect Port" : "شناسایی پورت",
"User DN" : "کاربر DN",
"Password" : "گذرواژه",
"For anonymous access, leave DN and Password empty." : "برای دسترسی ناشناس، DN را رها نموده و رمزعبور را خالی بگذارید.",
"One Base DN per line" : "یک پایه DN در هر خط",
"You can specify Base DN for users and groups in the Advanced tab" : "شما می توانید پایه DN را برای کاربران و گروه ها در زبانه Advanced مشخص کنید.",
+ "Saving" : "درحال ذخیره",
"Back" : "بازگشت",
"Continue" : "ادامه",
+ "LDAP" : "LDAP",
"Expert" : "حرفه ای",
"Advanced" : "پیشرفته",
"Connection Settings" : "تنظیمات اتصال",
diff --git a/apps/user_ldap/l10n/fa.json b/apps/user_ldap/l10n/fa.json
index 2716f90e10f..34a36eaf3bd 100644
--- a/apps/user_ldap/l10n/fa.json
+++ b/apps/user_ldap/l10n/fa.json
@@ -23,18 +23,28 @@
"Groups" : "گروه ها",
"Test Configuration" : "امتحان پیکربندی",
"Help" : "راه‌نما",
+ "Only from these groups:" : "تنها از این گروه‌ها:",
+ "Search groups" : "جستجوی گروه‌ها",
+ "Available groups" : "گروه‌های موجود",
+ "Selected groups" : "گروه‌های انتخاب شده",
+ "LDAP Filter:" : "فیلتر LDAP:",
+ "LDAP / AD Username:" : "نام‌کاربری LDAP / AD :",
+ "LDAP / AD Email Address:" : " آدرس ایمیل LDAP / AD :",
"Other Attributes:" : "مشخصه های دیگر:",
"1. Server" : "1. سرور",
"%s. Server:" : "%s. سرور:",
"Host" : "میزبانی",
"Port" : "درگاه",
+ "Detect Port" : "شناسایی پورت",
"User DN" : "کاربر DN",
"Password" : "گذرواژه",
"For anonymous access, leave DN and Password empty." : "برای دسترسی ناشناس، DN را رها نموده و رمزعبور را خالی بگذارید.",
"One Base DN per line" : "یک پایه DN در هر خط",
"You can specify Base DN for users and groups in the Advanced tab" : "شما می توانید پایه DN را برای کاربران و گروه ها در زبانه Advanced مشخص کنید.",
+ "Saving" : "درحال ذخیره",
"Back" : "بازگشت",
"Continue" : "ادامه",
+ "LDAP" : "LDAP",
"Expert" : "حرفه ای",
"Advanced" : "پیشرفته",
"Connection Settings" : "تنظیمات اتصال",
diff --git a/apps/user_ldap/l10n/hr.js b/apps/user_ldap/l10n/hr.js
index e9c7ce4e17b..284c9ee3207 100644
--- a/apps/user_ldap/l10n/hr.js
+++ b/apps/user_ldap/l10n/hr.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"user_ldap",
{
"Failed to delete the server configuration" : "Greška prilikom brisanja konfiguracije poslužitelja.",
+ "Select groups" : "Označi grupe",
"Users" : "Korisnici",
"Groups" : "Grupe",
"Help" : "Pomoć",
diff --git a/apps/user_ldap/l10n/hr.json b/apps/user_ldap/l10n/hr.json
index 8aad60517c7..9a116a6ce86 100644
--- a/apps/user_ldap/l10n/hr.json
+++ b/apps/user_ldap/l10n/hr.json
@@ -1,5 +1,6 @@
{ "translations": {
"Failed to delete the server configuration" : "Greška prilikom brisanja konfiguracije poslužitelja.",
+ "Select groups" : "Označi grupe",
"Users" : "Korisnici",
"Groups" : "Grupe",
"Help" : "Pomoć",
diff --git a/apps/user_ldap/l10n/hy.js b/apps/user_ldap/l10n/hy.js
index bd4f60364a3..469515bc42e 100644
--- a/apps/user_ldap/l10n/hy.js
+++ b/apps/user_ldap/l10n/hy.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"user_ldap",
{
- "Save" : "Պահպանել"
+ "Groups" : "Խմբեր",
+ "Password" : "Գաղտնաբառ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/hy.json b/apps/user_ldap/l10n/hy.json
index cb94f4404a5..8b8bf5bd500 100644
--- a/apps/user_ldap/l10n/hy.json
+++ b/apps/user_ldap/l10n/hy.json
@@ -1,4 +1,5 @@
{ "translations": {
- "Save" : "Պահպանել"
+ "Groups" : "Խմբեր",
+ "Password" : "Գաղտնաբառ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/ka_GE.js b/apps/user_ldap/l10n/ka_GE.js
index c2fc858d153..0fdf25fea6f 100644
--- a/apps/user_ldap/l10n/ka_GE.js
+++ b/apps/user_ldap/l10n/ka_GE.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"user_ldap",
{
+ "Failed to clear the mappings." : "ბმების წაშლის დროს მოხდა შეცდომა",
"Failed to delete the server configuration" : "შეცდომა სერვერის კონფიგურაციის წაშლისას",
"The configuration is valid and the connection could be established!" : "კონფიგურაცია მართებულია და კავშირი დამყარდება!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "კონფიგურაცია მართებულია, მაგრამ მიერთება ვერ მოხერხდა. გთხოვთ შეამოწმოთ სერვერის პარამეტრები და აუთენთიკაციის პარამეტრები.",
diff --git a/apps/user_ldap/l10n/ka_GE.json b/apps/user_ldap/l10n/ka_GE.json
index be93dc5a626..7ddaaef5bda 100644
--- a/apps/user_ldap/l10n/ka_GE.json
+++ b/apps/user_ldap/l10n/ka_GE.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Failed to clear the mappings." : "ბმების წაშლის დროს მოხდა შეცდომა",
"Failed to delete the server configuration" : "შეცდომა სერვერის კონფიგურაციის წაშლისას",
"The configuration is valid and the connection could be established!" : "კონფიგურაცია მართებულია და კავშირი დამყარდება!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "კონფიგურაცია მართებულია, მაგრამ მიერთება ვერ მოხერხდა. გთხოვთ შეამოწმოთ სერვერის პარამეტრები და აუთენთიკაციის პარამეტრები.",
diff --git a/apps/user_ldap/l10n/lt_LT.js b/apps/user_ldap/l10n/lt_LT.js
index 84d3cb8463e..e9429c0de2a 100644
--- a/apps/user_ldap/l10n/lt_LT.js
+++ b/apps/user_ldap/l10n/lt_LT.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Select groups" : "Pasirinkti grupes",
"Do you really want to delete the current Server Configuration?" : "Ar tikrai norite ištrinti dabartinę serverio konfigūraciją?",
"Confirm Deletion" : "Patvirtinkite trynimą",
+ "Server" : "Serveris",
"Users" : "Vartotojai",
"Groups" : "Grupės",
"Test Configuration" : "Bandyti konfigūraciją",
diff --git a/apps/user_ldap/l10n/lt_LT.json b/apps/user_ldap/l10n/lt_LT.json
index fd385a1e8dc..19ca042b62f 100644
--- a/apps/user_ldap/l10n/lt_LT.json
+++ b/apps/user_ldap/l10n/lt_LT.json
@@ -5,6 +5,7 @@
"Select groups" : "Pasirinkti grupes",
"Do you really want to delete the current Server Configuration?" : "Ar tikrai norite ištrinti dabartinę serverio konfigūraciją?",
"Confirm Deletion" : "Patvirtinkite trynimą",
+ "Server" : "Serveris",
"Users" : "Vartotojai",
"Groups" : "Grupės",
"Test Configuration" : "Bandyti konfigūraciją",
diff --git a/apps/user_ldap/l10n/pt_PT.js b/apps/user_ldap/l10n/pt_PT.js
index d323732e061..38da6186e90 100644
--- a/apps/user_ldap/l10n/pt_PT.js
+++ b/apps/user_ldap/l10n/pt_PT.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"Base DN could not be auto-detected, please revise credentials, host and port." : "O ND de base não pode ser detetado automaticamente, por favor verifique as credenciais, host e porta.",
"Could not detect Base DN, please enter it manually." : "Não foi possível detetar o ND de base, por favor introduza-o manualmente.",
"{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "Nenhum objecto encontrado na Base DN fornecida. Por favor verifique.",
"More than 1.000 directory entries available." : "Mais de 1,000 entradas de diretório disponíveis.",
" entries available within the provided Base DN" : "entradas disponíveis no ND de base fornecido",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ocorreu um erro. Por favor verifique o ND de base, bem como as definições de ligação e as credenciais.",
diff --git a/apps/user_ldap/l10n/pt_PT.json b/apps/user_ldap/l10n/pt_PT.json
index 409b1873d10..594b6ac1907 100644
--- a/apps/user_ldap/l10n/pt_PT.json
+++ b/apps/user_ldap/l10n/pt_PT.json
@@ -20,6 +20,7 @@
"Base DN could not be auto-detected, please revise credentials, host and port." : "O ND de base não pode ser detetado automaticamente, por favor verifique as credenciais, host e porta.",
"Could not detect Base DN, please enter it manually." : "Não foi possível detetar o ND de base, por favor introduza-o manualmente.",
"{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "Nenhum objecto encontrado na Base DN fornecida. Por favor verifique.",
"More than 1.000 directory entries available." : "Mais de 1,000 entradas de diretório disponíveis.",
" entries available within the provided Base DN" : "entradas disponíveis no ND de base fornecido",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ocorreu um erro. Por favor verifique o ND de base, bem como as definições de ligação e as credenciais.",
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index 13ccf805b69..8d96e7de91d 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -661,12 +661,13 @@ class Wizard extends LDAPUtility {
//connectAndBind may throw Exception, it needs to be catched by the
//callee of this method
- // unallowed anonymous bind throws 48. But if it throws 48, we
- // detected port and TLS, i.e. it is successful.
try {
$settingsFound = $this->connectAndBind($p, $t);
} catch (\Exception $e) {
- if($e->getCode() === 48) {
+ // any reply other than -1 (= cannot connect) is already okay,
+ // because then we found the server
+ // unavailable startTLS returns -11
+ if($e->getCode() > 0) {
$settingsFound = true;
} else {
throw $e;
@@ -1084,7 +1085,7 @@ class Wizard extends LDAPUtility {
} else if ($errNo === 2) {
return $this->connectAndBind($port, $tls, true);
}
- throw new \Exception($error);
+ throw new \Exception($error, $errNo);
}
/**