From 445274cf93dbae31c6995008dcc0f9834c05d9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= <jus@bitgrid.net> Date: Tue, 7 Jan 2020 12:57:57 +0100 Subject: [PATCH] Add pending share list to frontend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl <jus@bitgrid.net> Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl> --- apps/files/css/files.scss | 1 + .../tests/Controller/ViewControllerTest.php | 11 +++ apps/files_sharing/js/app.js | 81 ++++++++++++++++++ apps/files_sharing/js/dist/files_sharing.js | Bin 13316 -> 15666 bytes .../js/dist/files_sharing.js.map | Bin 45678 -> 51206 bytes apps/files_sharing/js/sharedfilelist.js | 20 ++++- .../files_sharing/lib/AppInfo/Application.php | 9 ++ .../lib/Controller/ShareAPIController.php | 30 +++++-- 8 files changed, 146 insertions(+), 6 deletions(-) diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss index 40248360c29..bedca77a6f7 100644 --- a/apps/files/css/files.scss +++ b/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); } diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php index fd6ec5aaa3c..f07af2a2fe5 100644 --- a/apps/files/tests/Controller/ViewControllerTest.php +++ b/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, diff --git a/apps/files_sharing/js/app.js b/apps/files_sharing/js/app.js index 6cf7a805ada..1a686ee228d 100644 --- a/apps/files_sharing/js/app.js +++ b/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)) }) diff --git a/apps/files_sharing/js/dist/files_sharing.js b/apps/files_sharing/js/dist/files_sharing.js index e89a4075e70d9640847db1b8a46e71ded47199e4..ee608f58f6c8139bd8b19030585da22709209185 100644 GIT binary patch delta 963 zcmZ`%O;6NN6is0m<XfXKVHly)!c1SR9W*2)qZ35Ig(4_^EZmSsd!dDycGCA|5P`^o zoiQffr3*u1)Rh?f19YVeet<C~?)(Az3+zl=GlMZ{n&#ZzbI&>V?wKDSe|Q!<u~Y`z zu<TXuN$hS%hyQUKZ2yfvdXf`i>AF>fIg9ZrZdy!>8X`2WG{Knb9Z!UflFCeH!zZi_ z$fw7#w{0v=bsfqaC%YdGALA!#Gt*S(=y2F9GLyQ%q~pK*>ekys7ToR2$(v3^G-(w? z7j&?yV2H~VF4_(kb;n+@+!7f0zE6&NyiYyPTPGudD-~PkmSZbqt4T=YG?Qt9v2>Dn z^QT_NBTH}lA0(&i?gF`zYFMmXq?_}!1bN&~oQ?-&oE*5?p_`zum#Djry8|zJ1An>5 z%Sghz6$B-669PI-B4o#Zc8Cg^3#<M{z?}{hZ`rjG(ju&Z&i^|-DA%U9=|zWuKN;HS z8hxbTP*zRl!jRRA<Q!A^X4z+)nVp-xH!JPnSmGd7Blo^1p2nj5aDV7h+>ftzFbAph zU$`rExjjr3KPQu(nc_lM!!3B<&W;Hq4L~LnUQq+){T^O!X~bus2po*<?O+WJzY>J> zmsYB}s7Z5!w6JhZyU(qnw&J)Y%4aAC#U_3gCAozbYMa1AX;5(Sr&JUuF3RTx*V~o9 zww`IsK#I0;C)<y&vU_+l`$n)anZ1Cr@^0cE6;q&<E6h|zwR)zUki60iF+5VP<ZKe1 xvBegu;8rcz@B?6)K{?gxOE8u;EN(89ppa&GgUA9y-+(XmB`Nqmsdq$3=O3mHR)7Ei delta 236 zcmdl~)snHHmu2%}7FW*ADFQXjn;k@!ux+-HFJhUjpv1DdTBU?>^M6$Z#?2n;5ln(5 z8JWd;@x>YW<u0i?sU@i?laFa0V=mH3oZPSFBUxnY@2nSEl9{8ImS2>cSmKgclB$uX z36%Y!rOa3~S&>6zvW~VSW8!2t?HnL~v$if{;^v3i$C)Pw8myYEY+y85*Kmc1Myg&x zX>o>zie6$?VuePDrlyX@<OT!D$!bQ*62(9s#1)yv{$;5}WtpkvYHAuKlM{`^7(t}S c<Q^k_AZw114rAWrlSa18c{+KUIgK^B0Nrv=6#xJL diff --git a/apps/files_sharing/js/dist/files_sharing.js.map b/apps/files_sharing/js/dist/files_sharing.js.map index 208ceb155b43f2e2f8ace596d642549230536cfd..447bb7f9afe975d695dfa5095c5f2cd0e1af5dfe 100644 GIT binary patch delta 8555 zcmbtaU2I#)b%wlaukB*J-dL6`dnM79ZCMs=lKQ8;yWN@L6-7~36h+Ij6z{Gnn&OZ6 zBasv(3vQVpK#^vfWViF&21Wt|ZG)hNngT@&WEW^(iZ<v|p9&Od3p5Cd^rg+d6h*&t z=3a`F=|z#kfX#b3bAG;a&UelX{fmD+_FEsn^2a|qcJjlmbm>X1lsWjrWB0qR;KO3N zgukzPuU50=T|Cg2c=|AzN~O1I`e(0v?=|P`!LwH<j-5{ClY97nr&7>AJn@5HYuR=1 z;I&VW>9<b5`?{kekxf?8RlRch*1^|L2Tq<<C8@kQDa5AqMuk<-fAOV$|AKc_sE~~p zBD&yBitxJoc~yv%HzGu2mj71XxDfG#K6NhCy}@rX(rXK0KjDY8etho6Ws;x*vPHyd zPSVEZJ^lP#_nAr3Oo||UHL9QY^u4mB0{UOhjX!FBm4Xdr=}ij(1qmS%8{V)`d(s<& zEsFQglbTS}`J58gy8AgPM4IiHYcsmqZN1FsoA**=a*Kc@^s>pyYYAa_Gk^?URHaZp z<(Nqph-8F4sK5jJ{J87fJWPiN`rGFt=k{f*8SqAJ=`-gp=wm(CUuMq@{kZ3?p1pS6 zo6wyNP3qt6xziQUpY@D)P3m9vteu%?ldnIxka)S+pI;d0B(?;x0~h@eyLfRt<+xXr z-lBvTVJ|cbJW(9#k^(W-8i-lSClv~FBxY%`g*_Bv{)To^1}(Ir04w{>Y)b|Z0IT&a zsXyuNy|yd8+YnZe1=bLMS&|9XgOIf<%E?rxm=SJp&}5x4DJLyNt@pKUCDcA5w|Md9 zgAC%lX+eP6pJ^^;0LIxUQ8fqz7=d6b0(0cF3PsrIIYP}^cOLXlE?(?P=zqI7INZq> zhOQ=2j8qIjBC?j3+TYv%9*cp4u271>rc8Hoa2Xlp`p2eVVYumE0RH{3ceLU7H0Lc- zP)DSj(knu(A)apStEJY$-BjLX6s|(-BU6XWfj#R$fcDILQ94Vlm6L1P6O<OgA<9yJ zc<Feb&+I{MrLig7d`f|4R`pjeT{@Ok`u8sNH4=wv3o1f6LGVLuUgk~tn*>;Dk3YO> znp;p&Dp#??`;bv)pTTvh9oEdD$+42My$zIpg48WdC{A04=4LreSWOA-eG2J*xn<;T zD{@rrhk{?QV-h>2kL;KVRg8pD$!Ro?U<g8Xn(I%^J3zxXDvfyuL#EFZLI6fL5o0<^ z)0-_B)jz&`sox|6cog(ra5AZ?yrYx=d8I$U+}Budbq|iMifuwFCJIuNn15Ewiab?o za1<r73P)`)ej(Jla~73s)#V(g1XPTp1n$?G$WZc@L9axmd5aezEO4?Bg*f`QD1m|v ziVxjymrHfAqd+<$>;OL26ia~bbp+hqVE}L6G2sFZI|&Pc`VNa|LBVfwaF?<j;fI$o z>NoNI5Ucm=yL|)a_uBk6eQ!q>``+>fI(+jq#Ih6@TSjIrmXx#fpZ49p95DKdA!M3Z zG5SD1by*7O|L(iqAvVPqViTesnf8Lm0y4|RV50=oLM}|HnuI#F&RsiEpJDjjvM0`- zkh?P!1)Gpxpx}$-zA@2ndG&Ytd(Q4zt>MTh{a5`fr%E&IMtMeG8(3;=&B8}j4{gtq z3sEYY#ei8cI)l6rNd=A&sflo#0iz)i2`Z39ScI35qlPAEcZnN@y(MYA89zFtDTOO0 zwp62;r=73>&$w9B+5tdES6TH%0AOzxoCii(VV-`-iDw^yq>C}}G%;ZY@{TIx6{l@< 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 H?GFAgVCtv1 delta 6509 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 diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js index 5b198300589..f40a1f1a853 100644 --- a/apps/files_sharing/js/sharedfilelist.js +++ b/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)) diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index 48802617b4f..5a18cce8e49 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/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', diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index e7c9a414958..b71d3dac3a7 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/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); } -- GitLab