瀏覽代碼

Add pending share list to frontend

Signed-off-by: Julius Härtl <jus@bitgrid.net>
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
tags/v18.0.0RC2
Julius Härtl 4 年之前
父節點
當前提交
445274cf93
沒有連結到貢獻者的電子郵件帳戶。

+ 1
- 0
apps/files/css/files.scss 查看文件

@@ -129,6 +129,7 @@
}
.nav-icon-sharingin,
.nav-icon-sharingout,
.nav-icon-pendingshares,
.nav-icon-shareoverview {
@include icon-color('share', 'files', $color-black);
}

+ 11
- 0
apps/files/tests/Controller/ViewControllerTest.php 查看文件

@@ -288,6 +288,13 @@ class ViewControllerTest extends TestCase {
'order' => 19,
'name' => \OC::$server->getL10N('files_sharing')->t('Deleted shares'),
],
[
'id' => 'pendingshares',
'appname' => 'files_sharing',
'script' => 'list.php',
'order' => 19,
'name' => \OC::$server->getL10N('files_sharing')->t('Pending shares'),
],
],
'active' => false,
'icon' => '',
@@ -348,6 +355,10 @@ class ViewControllerTest extends TestCase {
'id' => 'deletedshares',
'content' => null,
],
'pendingshares' => [
'id' => 'pendingshares',
'content' => null
],
'shareoverview' => [
'id' => 'shareoverview',
'content' => null,

+ 81
- 0
apps/files_sharing/js/app.js 查看文件

@@ -22,6 +22,7 @@ OCA.Sharing.App = {
_inFileList: null,
_outFileList: null,
_overviewFileList: null,
_pendingFileList: null,

initSharingIn: function($el) {
if (this._inFileList) {
@@ -129,6 +130,33 @@ OCA.Sharing.App = {
return this._deletedFileList
},

initSharingPening: function($el) {
if (this._pendingFileList) {
return this._pendingFileList
}
this._pendingFileList = new OCA.Sharing.FileList(
$el,
{
id: 'shares.pending',
showPending: true,
sharedWithUser: true,
fileActions: this._acceptShareAction(),
config: OCA.Files.App.getFilesConfig(),
// The file list is created when a "show" event is handled, so
// it should be marked as "shown" like it would have been done
// if handling the event with the file list already created.
shown: true,
}
)

this._extendFileList(this._pendingFileList)
this._pendingFileList.appName = t('files_sharing', 'Pending shares')
this._pendingFileList.$el.find('#emptycontent').html('<div class="icon-share"></div>'
+ '<h2>' + t('files_sharing', 'No pending shares') + '</h2>'
+ '<p>' + t('files_sharing', 'Shares you have received but not confirmed will show up here') + '</p>')
return this._pendingFileList
},

initShareingOverview: function($el) {
if (this._overviewFileList) {
return this._overviewFileList
@@ -178,6 +206,12 @@ OCA.Sharing.App = {
}
},

removeSharingPending: function() {
if (this._pendingFileList) {
this._pendingFileList.$fileList.empty()
}
},

removeSharingOverview: function() {
if (this._overviewFileList) {
this._overviewFileList.$fileList.empty()
@@ -249,6 +283,47 @@ OCA.Sharing.App = {
return fileActions
},

_acceptShareAction: function() {
const fileActions = new OCA.Files.FileActions()
fileActions.registerAction({
name: 'Accept share',
displayName: t('files_sharing', 'Accept share'),
mime: 'all',
permissions: OC.PERMISSION_ALL,
iconClass: 'icon-checkmark',
type: OCA.Files.FileActions.TYPE_INLINE,
actionHandler: function(fileName, context) {
const shareId = context.$file.data('shareId')
$.post(OC.linkToOCS('apps/files_sharing/api/v1/shares/pending', 2) + shareId)
.success(function(result) {
context.fileList.remove(context.fileInfoModel.attributes.name)
}).fail(function() {
OC.Notification.showTemporary(t('files_sharing', 'Something happened. Unable to accept the share.'))
})
},
})
fileActions.registerAction({
name: 'Reject share',
displayName: t('files_sharing', 'Reject share'),
mime: 'all',
permissions: OC.PERMISSION_ALL,
iconClass: 'icon-close',
type: OCA.Files.FileActions.TYPE_INLINE,
actionHandler: function(fileName, context) {
const shareId = context.$file.data('shareId')
$.ajax({
url: OC.linkToOCS('apps/files_sharing/api/v1/shares', 2) + shareId,
type: 'DELETE',
}).success(function(result) {
context.fileList.remove(context.fileInfoModel.attributes.name)
}).fail(function() {
OC.Notification.showTemporary(t('files_sharing', 'Something happened. Unable to reject the share.'))
})
},
})
return fileActions
},

_onActionsUpdated: function(ev) {
_.each([this._inFileList, this._outFileList, this._linkFileList], function(list) {
if (!list) {
@@ -297,6 +372,12 @@ $(document).ready(function() {
$('#app-content-deletedshares').on('hide', function() {
OCA.Sharing.App.removeSharingDeleted()
})
$('#app-content-pendingshares').on('show', function(e) {
OCA.Sharing.App.initSharingPening($(e.target))
})
$('#app-content-pendingshares').on('hide', function() {
OCA.Sharing.App.removeSharingPending()
})
$('#app-content-shareoverview').on('show', function(e) {
OCA.Sharing.App.initShareingOverview($(e.target))
})

+ 1
- 1
apps/files_sharing/js/dist/files_sharing.js
文件差異過大導致無法顯示
查看文件


+ 1
- 1
apps/files_sharing/js/dist/files_sharing.js.map
文件差異過大導致無法顯示
查看文件


+ 19
- 1
apps/files_sharing/js/sharedfilelist.js 查看文件

@@ -39,6 +39,7 @@
_sharedWithUser: false,
_linksOnly: false,
_showDeleted: false,
_showPending: false,
_clientSideSort: true,
_allowSelection: false,
_isOverview: false,
@@ -62,6 +63,9 @@
if (options && options.showDeleted) {
this._showDeleted = true
}
if (options && options.showPending) {
this._showPending = true
}
if (options && options.isOverview) {
this._isOverview = true
}
@@ -87,7 +91,7 @@
var permission = parseInt($tr.attr('data-permissions')) | OC.PERMISSION_DELETE
$tr.attr('data-permissions', permission)
}
if (this._showDeleted) {
if (this._showDeleted || this._showPending) {
var permission = fileData.permissions
$tr.attr('data-share-permissions', permission)
}
@@ -196,6 +200,18 @@
}
}

var pendingShares = {
url: OC.linkToOCS('apps/files_sharing/api/v1/shares', 2) + 'pending',
/* jshint camelcase: false */
data: {
format: 'json'
},
type: 'GET',
beforeSend: function(xhr) {
xhr.setRequestHeader('OCS-APIREQUEST', 'true')
}
}

var shares = {
url: OC.linkToOCS('apps/files_sharing/api/v1') + 'shares',
/* jshint camelcase: false */
@@ -227,6 +243,8 @@
// and make sure we have 2 promises
if (this._showDeleted) {
promises.push($.ajax(deletedShares))
} else if (this._showPending) {
promises.push($.ajax(pendingShares))
} else {
promises.push($.ajax(shares))


+ 9
- 0
apps/files_sharing/lib/AppInfo/Application.php 查看文件

@@ -278,6 +278,15 @@ class Application extends App {
'name' => $l->t('Deleted shares'),
]);

array_push($sharingSublistArray, [
'id' => 'pendingshares',
'appname' => 'files_sharing',
'script' => 'list.php',
'order' => 19,
'name' => $l->t('Pending shares'),
]);


// show_Quick_Access stored as string
\OCA\Files\App::getNavigationManager()->add([
'id' => 'shareoverview',

+ 25
- 5
apps/files_sharing/lib/Controller/ShareAPIController.php 查看文件

@@ -1100,11 +1100,31 @@ class ShareAPIController extends OCSController {
}
}

$result = array_map(function (IShare $share) {
return [
'id' => $share->getFullId(),
];
}, $pendingShares);
$result = array_filter(array_map(function (IShare $share) {
$userFolder = $this->rootFolder->getUserFolder($share->getSharedBy());
$nodes = $userFolder->getById($share->getNodeId());
if (empty($nodes)) {
// fallback to guessing the path
$node = $userFolder->get($share->getTarget());
if ($node === null || $share->getTarget() === '') {
return null;
}
} else {
$node = $nodes[0];
}

try {
$formattedShare = $this->formatShare($share, $node);
$formattedShare['status'] = $share->getStatus();
$formattedShare['path'] = $share->getNode()->getName();
$formattedShare['permissions'] = 0;
return $formattedShare;
} catch (NotFoundException $e) {
return null;
}
}, $pendingShares), function ($entry) {
return $entry !== null;
});

return new DataResponse($result);
}

Loading…
取消
儲存