diff --git a/js/app/Config.js b/js/app/Config.js index eafa2f7a8..845979171 100644 --- a/js/app/Config.js +++ b/js/app/Config.js @@ -41,7 +41,7 @@ app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvid templateUrl: "/boardlist.mainView.html", controller: 'ListController', params: { - filter: { value: '' } + filter: { value: '', dynamic: true } } }) .state('board', { diff --git a/js/app/Run.js b/js/app/Run.js index e76787b11..274f689a2 100644 --- a/js/app/Run.js +++ b/js/app/Run.js @@ -20,11 +20,17 @@ * */ -app.run(function ($document, $rootScope, $transitions) { +app.run(function ($document, $rootScope, $transitions, BoardService) { 'use strict'; $document.click(function (event) { $rootScope.$broadcast('documentClicked', event); }); + $transitions.onEnter({from: 'list'}, function($state, $transition$) { + BoardService.unsetCurrrent(); + }); + $transitions.onEnter({to: 'list'}, function($state, $transition$) { + BoardService.unsetCurrrent(); + }); $transitions.onEnter({to: 'board.card'}, function ($state, $transition$) { $rootScope.sidebar.show = true; }); @@ -40,9 +46,6 @@ app.run(function ($document, $rootScope, $transitions) { $transitions.onExit({from: 'board.detail'}, function ($state) { $rootScope.sidebar.show = false; }); - $transitions.onEnter({to: 'board.archive'}, function ($state) { - //BoardController.loadArchived(); - }); $('link[rel="shortcut icon"]').attr( 'href', diff --git a/js/controller/ListController.js b/js/controller/ListController.js index 938c7f569..db21ee0d7 100644 --- a/js/controller/ListController.js +++ b/js/controller/ListController.js @@ -44,7 +44,9 @@ app.controller('ListController', function ($scope, $location, $filter, BoardServ $scope.filterData = function () { angular.copy($scope.boardservice.getData(), $scope.boardservice.sorted); - $scope.boardservice.sidebar = $filter('orderBy')($scope.boardservice.sorted, 'title'); + angular.copy($scope.boardservice.sorted, $scope.boardservice.sidebar); + $scope.boardservice.sidebar = $filter('orderBy')($scope.boardservice.sidebar, 'title'); + $scope.boardservice.sidebar = $filter('cardFilter')($scope.boardservice.sidebar, {archived: false}); if ($scope.status.filter === 'archived') { var filter = {}; diff --git a/js/service/ApiService.js b/js/service/ApiService.js index e061efa8c..cbc394d6a 100644 --- a/js/service/ApiService.js +++ b/js/service/ApiService.js @@ -145,7 +145,13 @@ app.factory('ApiService', function($http, $q){ return this.data[this.id]; }; - ApiService.prototype.getData = function() { + ApiService.prototype.unsetCurrrent = function () { + this.id = null; + }; + + + + ApiService.prototype.getData = function() { return $.map(this.data, function(value, index) { return [value]; }); diff --git a/js/service/BoardService.js b/js/service/BoardService.js index 8584c6310..84034e990 100644 --- a/js/service/BoardService.js +++ b/js/service/BoardService.js @@ -167,28 +167,31 @@ app.factory('BoardService', function(ApiService, $http, $q){ return false; } return this.getCurrent().permissions['PERMISSION_READ']; - } + }; BoardService.prototype.canEdit = function() { if(!this.getCurrent() || !this.getCurrent().permissions) { return false; } return this.getCurrent().permissions['PERMISSION_EDIT']; - } + }; - BoardService.prototype.canManage = function() { + BoardService.prototype.canManage = function(board = null) { + if(board !== null) { + return board.permissions['PERMISSION_MANAGE']; + } if(!this.getCurrent() || !this.getCurrent().permissions) { return false; } return this.getCurrent().permissions['PERMISSION_MANAGE']; - } + }; BoardService.prototype.canShare = function() { if(!this.getCurrent() || !this.getCurrent().permissions) { return false; } return this.getCurrent().permissions['PERMISSION_SHARE']; - } + }; BoardService.prototype.isArchived = function () { if(!this.getCurrent() || this.getCurrent().archived) { diff --git a/lib/Db/Board.php b/lib/Db/Board.php index 4d3b5e42d..3c14c2177 100644 --- a/lib/Db/Board.php +++ b/lib/Db/Board.php @@ -34,6 +34,7 @@ class Board extends RelationalEntity implements JsonSerializable { protected $archived = false; protected $labels = []; protected $acl = []; + protected $permissions = []; protected $shared; public function __construct() { @@ -43,6 +44,7 @@ class Board extends RelationalEntity implements JsonSerializable { $this->addRelation('labels'); $this->addRelation('acl'); $this->addRelation('shared'); + $this->addRelation('permissions'); $this->addResolvable('owner'); $this->shared = -1; } diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 4becadc61..0aac91b07 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -64,6 +64,13 @@ class BoardService { $this->boardMapper->mapAcl($acl); } } + $permissions = $this->permissionService->matchPermissions($item); + $item->setPermissions([ + 'PERMISSION_READ' => $permissions[Acl::PERMISSION_READ], + 'PERMISSION_EDIT' => $permissions[Acl::PERMISSION_EDIT], + 'PERMISSION_MANAGE' => $permissions[Acl::PERMISSION_MANAGE], + 'PERMISSION_SHARE' => $permissions[Acl::PERMISSION_SHARE] + ]); $result[$item->getId()] = $item; } } diff --git a/lib/Service/PermissionService.php b/lib/Service/PermissionService.php index bd3985a51..c877d7134 100644 --- a/lib/Service/PermissionService.php +++ b/lib/Service/PermissionService.php @@ -25,6 +25,7 @@ namespace OCA\Deck\Service; use OCA\Deck\Db\Acl; use OCA\Deck\Db\AclMapper; +use OCA\Deck\Db\Board; use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\IPermissionMapper; use OCA\Deck\NoPermissionException; @@ -50,7 +51,7 @@ class PermissionService { } /** - * Get current user permissions for a board + * Get current user permissions for a board by id * * @param $boardId * @return bool|array @@ -66,6 +67,24 @@ class PermissionService { ]; } + /** + * Get current user permissions for a board + * + * @param Board $board + * @return array|bool + * @internal param $boardId + */ + public function matchPermissions(Board $board) { + $owner = $this->userIsBoardOwner($board->getId()); + $acls = $board->getAcl(); + return [ + Acl::PERMISSION_READ => $owner || $this->userCan($acls, Acl::PERMISSION_READ), + Acl::PERMISSION_EDIT => $owner || $this->userCan($acls, Acl::PERMISSION_EDIT), + Acl::PERMISSION_MANAGE => $owner || $this->userCan($acls, Acl::PERMISSION_MANAGE), + Acl::PERMISSION_SHARE => $owner || $this->userCan($acls, Acl::PERMISSION_SHARE), + ]; + } + /** * check permissions for replacing dark magic middleware * diff --git a/templates/part.boardlist.php b/templates/part.boardlist.php index 6597c6e1a..32892494a 100644 --- a/templates/part.boardlist.php +++ b/templates/part.boardlist.php @@ -26,20 +26,20 @@