return name;
},
+ /**
+ * Shows a "permission denied" notification
+ */
+ _showPermissionDeniedNotification: function() {
+ var message = t('core', 'You don’t have permission to upload or create files here');
+ OC.Notification.show(message);
+ //hide notification after 10 sec
+ setTimeout(function() {
+ OC.Notification.hide();
+ }, 5000);
+ },
+
/**
* Setup file upload events related to the file-upload plugin
*/
// remember as context
data.context = dropTarget;
+ // if permissions are specified, only allow if create permission is there
+ var permissions = dropTarget.data('permissions');
+ if (!_.isUndefined(permissions) && (permissions & OC.PERMISSION_CREATE) === 0) {
+ self._showPermissionDeniedNotification();
+ return false;
+ }
var dir = dropTarget.data('file');
// if from file list, need to prepend parent dir
if (dir) {
// cancel uploads to current dir if no permission
var isCreatable = (self.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0;
if (!isCreatable) {
+ self._showPermissionDeniedNotification();
return false;
}
}
return false;
}
- var targetPath = FileList.getCurrentDirectory() + '/' + $(this).closest('tr').data('file');
+ var $tr = $(this).closest('tr');
+ if (($tr.data('permissions') & OC.PERMISSION_CREATE) === 0) {
+ FileList._showPermissionDeniedNotification();
+ return false;
+ }
+ var targetPath = FileList.getCurrentDirectory() + '/' + $tr.data('file');
var files = FileList.getSelectedFiles();
if (files.length === 0) {
// but it makes it possible to simulate the event triggering to
// test the response of the handlers
$uploader = $('#file_upload_start');
- fileList.setupUploadEvents();
fileList.setFiles(testFiles);
});
ev = dropOn(fileList.$fileList.find('th:first'));
expect(ev.result).toEqual(false);
+ expect(notificationStub.calledOnce).toEqual(true);
+ });
+ it('drop on an folder does not trigger upload if no upload permission on that folder', function() {
+ var $tr = fileList.findFileEl('somedir');
+ var ev;
+ $tr.data('permissions', OC.PERMISSION_READ);
+ ev = dropOn($tr);
+
+ expect(ev.result).toEqual(false);
+ expect(notificationStub.calledOnce).toEqual(true);
});
it('drop on a file row inside the table triggers upload to current folder', function() {
var ev;