From c1ff005710cc1c6daffb6231a4381143627234bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Wed, 26 Apr 2017 10:57:19 +0200 Subject: [PATCH 1/2] Use OCS API to search for users/groups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- css/style.css | 7 ++ js/controller/BoardController.js | 5 -- js/service/BoardService.js | 98 +++++++++++++++++++++------- lib/Controller/BoardController.php | 10 +-- templates/part.board.sidebarView.php | 2 +- 5 files changed, 87 insertions(+), 35 deletions(-) diff --git a/css/style.css b/css/style.css index 8336ffc3e..f79fc0544 100644 --- a/css/style.css +++ b/css/style.css @@ -866,3 +866,10 @@ button:hover { .icon-details-white { background-image: url('../img/details-white.svg'); } + +/** + * Hotfix for https://github.com/angular-ui/ui-select/issues/1652 + */ +.ui-select-dropdown.select2-drop-active { + opacity: 1 !important; +} \ No newline at end of file diff --git a/js/controller/BoardController.js b/js/controller/BoardController.js index 88283387b..8931e2b97 100644 --- a/js/controller/BoardController.js +++ b/js/controller/BoardController.js @@ -119,12 +119,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St $scope.statusservice.setError('Error occured', error); }); - BoardService.searchUsers('%25'); - $scope.searchForUser = function (search) { - if (search == "") { - search = "%25"; - } BoardService.searchUsers(search); }; diff --git a/js/service/BoardService.js b/js/service/BoardService.js index 223725793..a7ea42352 100644 --- a/js/service/BoardService.js +++ b/js/service/BoardService.js @@ -26,32 +26,82 @@ app.factory('BoardService', function(ApiService, $http, $q){ }; BoardService.prototype = angular.copy(ApiService.prototype); - BoardService.prototype.searchUsers = function(search) { - var url = OC.generateUrl('/apps/deck/share/search/'+search); - var deferred = $q.defer(); - var self = this; - $http.get(url).then(function (response) { + BoardService.prototype.searchUsers = function (search) { + var deferred = $q.defer(); + var self = this; + var searchData = { + format: 'json', + perPage: 4, + itemType: [0, 1] + }; + if (search !== "") { + searchData.search = search; + } + $http({ + method: 'GET', + url: OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees', + params: searchData + }) + .then(function (result) { + var response = result.data; + if (response.ocs.meta.statuscode !== 100) { + deferred.reject('Error while searching for sharees'); + return; + } + self.sharees = []; - self.sharees = []; - // filter out everyone who is already in the share list - angular.forEach(response.data, function(item) { - var exists = false; - angular.forEach(self.getCurrent().acl, function(acl) { - if (acl.participant === item.participant) { - exists = true; - } - }); - if(!exists) { - self.sharees.push(item); - } - }); + var users = response.ocs.data.exact.users.concat(response.ocs.data.users); + var groups = response.ocs.data.exact.groups.concat(response.ocs.data.groups); - deferred.resolve(response.data); - }, function (error) { - deferred.reject('Error while update ' + self.endpoint); - }); - return deferred.promise; - }; + // filter out everyone who is already in the share list + angular.forEach(users, function (item) { + var exists = false; + angular.forEach(self.getCurrent().acl, function (acl) { + if (acl.participant.primaryKey === item.value.shareWith || OC.getCurrentUser() === item.value.shareWith) { + exists = true; + } + }); + if (!exists) { + self.sharees.push({ + boardId: null, + id: null, + owner: false, + participant: item.value.shareWith, + permissionEdit: true, + permissionManage: true, + permissionShare: true, + type: 'user' + }); + } + }); + angular.forEach(groups, function (item) { + var exists = false; + angular.forEach(self.getCurrent().acl, function (acl) { + if (acl.participant.primaryKey === item.value.shareWith) { + exists = true; + } + }); + if (!exists) { + self.sharees.push({ + boardId: null, + id: null, + owner: false, + participant: item.value.shareWith, + permissionEdit: true, + permissionManage: true, + permissionShare: true, + type: 'group' + }); + } + }); + + deferred.resolve(self.sharees); + }, function () { + deferred.reject('Error while searching for sharees'); + }); + + return deferred.promise; + }; BoardService.prototype.addAcl = function(acl) { var board = this.getCurrent(); diff --git a/lib/Controller/BoardController.php b/lib/Controller/BoardController.php index ac6b311d7..3a8df7c23 100644 --- a/lib/Controller/BoardController.php +++ b/lib/Controller/BoardController.php @@ -130,13 +130,13 @@ class BoardController extends Controller { * @param $boardId * @param $type * @param $participant - * @param $edit - * @param $share - * @param $manage + * @param $permissionEdit + * @param $permissionShare + * @param $permissionManage * @return \OCP\AppFramework\Db\Entity */ - public function addAcl($boardId, $type, $participant, $edit, $share, $manage) { - return $this->boardService->addAcl($boardId, $type, $participant, $edit, $share, $manage); + public function addAcl($boardId, $type, $participant, $permissionEdit, $permissionShare, $permissionManage) { + return $this->boardService->addAcl($boardId, $type, $participant, $permissionEdit, $permissionShare, $permissionManage); } /** diff --git a/templates/part.board.sidebarView.php b/templates/part.board.sidebarView.php index 7cb494586..6f0e74204 100644 --- a/templates/part.board.sidebarView.php +++ b/templates/part.board.sidebarView.php @@ -17,7 +17,7 @@
- + {{ $item.participant }} From 6033baca2392884acd28596cf9c02e52b1799ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Wed, 26 Apr 2017 14:54:56 +0200 Subject: [PATCH 2/2] Remove old search endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- appinfo/routes.php | 3 - lib/Controller/ShareController.php | 85 ---------- tests/unit/controller/ShareControllerTest.php | 151 ------------------ 3 files changed, 239 deletions(-) delete mode 100644 lib/Controller/ShareController.php delete mode 100644 tests/unit/controller/ShareControllerTest.php diff --git a/appinfo/routes.php b/appinfo/routes.php index bbf8772cd..0e9a54899 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -25,9 +25,6 @@ return [ 'routes' => [ ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], - // share - ['name' => 'share#searchUser', 'url' => '/share/search/{search}', 'verb' => 'GET'], - // boards ['name' => 'board#index', 'url' => '/boards', 'verb' => 'GET'], ['name' => 'board#create', 'url' => '/boards', 'verb' => 'POST'], diff --git a/lib/Controller/ShareController.php b/lib/Controller/ShareController.php deleted file mode 100644 index 1a89976cc..000000000 --- a/lib/Controller/ShareController.php +++ /dev/null @@ -1,85 +0,0 @@ - - * - * @author Julius Härtl - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - */ - -namespace OCA\Deck\Controller; - -use OCA\Deck\Db\Acl; - -use OCA\Deck\Service\BoardService; -use OCP\IGroupManager; -use OCP\IRequest; -use OCP\AppFramework\Controller; -use OCP\IUserManager; - -class ShareController extends Controller { - - private $userManager; - private $groupManager; - private $boardService; - private $userId; - - public function __construct($appName, IRequest $request, IUserManager $userManager, IGroupManager $groupManager, BoardService $boardService, $userId) { - parent::__construct($appName, $request); - $this->userManager = $userManager; - $this->groupManager = $groupManager; - $this->userId = $userId; - $this->boardService = $boardService; - - } - - /** - * @NoAdminRequired - * @param $search - * @return array - */ - public function searchUser($search) { - $limit = 3; - $offset = null; - $result = []; - foreach ($this->groupManager->search($search, $limit, $offset) as $idx => $group) { - $acl = new Acl(); - $acl->setType('group'); - $acl->setParticipant($group->getGID()); - $acl->setPermissionEdit(true); - $acl->setPermissionShare(true); - $acl->setPermissionManage(true); - $result[] = $acl; - } - $limit = 10; - foreach ($this->userManager->searchDisplayName($search, $limit, $offset) as $idx => $user) { - if ($user->getUID() === $this->userId) { - continue; - } - $acl = new Acl(); - $acl->setType('user'); - $acl->setParticipant($user->getUID()); - $acl->setPermissionEdit(true); - $acl->setPermissionShare(true); - $acl->setPermissionManage(true); - $result[] = $acl; - } - return $result; - } - - -} diff --git a/tests/unit/controller/ShareControllerTest.php b/tests/unit/controller/ShareControllerTest.php deleted file mode 100644 index b350d726b..000000000 --- a/tests/unit/controller/ShareControllerTest.php +++ /dev/null @@ -1,151 +0,0 @@ - - * - * @author Julius Härtl - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - */ - -namespace OCA\Deck\Controller; - -use OCA\Deck\Db\Acl; -use OCP\IGroup; -use OCP\IUser; - -class ShareControllerTest extends \PHPUnit_Framework_TestCase { - - private $controller; - private $request; - private $userManager; - private $groupManager; - private $boardService; - private $permissionService; - private $userId = 'user'; - - public function setUp() { - $this->l10n = $this->request = $this->getMockBuilder( - '\OCP\IL10n') - ->disableOriginalConstructor() - ->getMock(); - $this->request = $this->getMockBuilder( - '\OCP\IRequest') - ->disableOriginalConstructor() - ->getMock(); - $this->userManager = $this->getMockBuilder( - '\OCP\IUserManager') - ->disableOriginalConstructor() - ->getMock(); - $this->groupManager = $this->getMockBuilder( - '\OCP\IGroupManager') - ->disableOriginalConstructor() - ->getMock(); - $this->boardService = $this->getMockBuilder( - '\OCA\Deck\Service\BoardService') - ->disableOriginalConstructor() - ->getMock(); - - $this->groupManager->method('getUserGroupIds') - ->willReturn(['admin', 'group1', 'group2']); - $this->userManager->method('get') - ->with($this->userId) - ->willReturn('user'); - - $this->controller = new ShareController( - 'deck', - $this->request, - $this->userManager, - $this->groupManager, - $this->boardService, - $this->userId - ); - } - - - public function testSearchGroup() { - $group = $this->getMockBuilder(IGroup::class) - ->disableOriginalConstructor() - ->getMock(); - $group->expects($this->once()) - ->method('getGID') - ->willReturn('foo'); - $groups = [$group]; - $this->groupManager->expects($this->once()) - ->method('search') - ->with('foo') - ->willReturn($groups); - $this->userManager->expects($this->once()) - ->method('searchDisplayName') - ->willReturn([]); - $actual = $this->controller->searchUser('foo'); - - $acl = new Acl(); - $acl->setType('group'); - $acl->setParticipant('foo'); - $acl->setPermissionEdit(true); - $acl->setPermissionShare(true); - $acl->setPermissionManage(true); - $this->assertEquals([$acl], $actual); - } - public function testSearchUser() { - $user = $this->getMockBuilder(IUser::class) - ->disableOriginalConstructor() - ->getMock(); - $user->expects($this->any()) - ->method('getUID') - ->willReturn('foo'); - $users = [$user]; - $this->groupManager->expects($this->once()) - ->method('search') - ->willReturn([]); - - $this->userManager->expects($this->once()) - ->method('searchDisplayName') - ->with('foo') - ->willReturn($users); - $actual = $this->controller->searchUser('foo'); - - $acl = new Acl(); - $acl->setType('user'); - $acl->setParticipant('foo'); - $acl->setPermissionEdit(true); - $acl->setPermissionShare(true); - $acl->setPermissionManage(true); - $this->assertEquals([$acl], $actual); - } - - public function testSearchUserExcludeOwn() { - $user = $this->getMockBuilder(IUser::class) - ->disableOriginalConstructor() - ->getMock(); - $user->expects($this->any()) - ->method('getUID') - ->willReturn('user'); - $users = [$user]; - $this->groupManager->expects($this->once()) - ->method('search') - ->willReturn([]); - - $this->userManager->expects($this->once()) - ->method('searchDisplayName') - ->with('user') - ->willReturn($users); - $actual = $this->controller->searchUser('user'); - $this->assertEquals([], $actual); - } - -}