diff options
Diffstat (limited to 'apps')
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); } /** |