Merge pull request #939 from nextcloud/bugfix/noid/board-api-stacks
Enrich board listing with stacks
This commit is contained in:
@@ -60,6 +60,7 @@ class BoardApiController extends ApiController {
|
|||||||
* @NoCSRFRequired
|
* @NoCSRFRequired
|
||||||
*
|
*
|
||||||
* Return all of the boards that the current user has access to.
|
* Return all of the boards that the current user has access to.
|
||||||
|
* @throws StatusException
|
||||||
*/
|
*/
|
||||||
public function index() {
|
public function index() {
|
||||||
$modified = $this->request->getHeader('If-Modified-Since');
|
$modified = $this->request->getHeader('If-Modified-Since');
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class Board extends RelationalEntity {
|
|||||||
protected $permissions = [];
|
protected $permissions = [];
|
||||||
protected $users = [];
|
protected $users = [];
|
||||||
protected $shared;
|
protected $shared;
|
||||||
|
protected $stacks = [];
|
||||||
protected $deletedAt = 0;
|
protected $deletedAt = 0;
|
||||||
protected $lastModified = 0;
|
protected $lastModified = 0;
|
||||||
|
|
||||||
@@ -48,6 +49,7 @@ class Board extends RelationalEntity {
|
|||||||
$this->addRelation('shared');
|
$this->addRelation('shared');
|
||||||
$this->addRelation('users');
|
$this->addRelation('users');
|
||||||
$this->addRelation('permissions');
|
$this->addRelation('permissions');
|
||||||
|
$this->addRelation('stacks');
|
||||||
$this->addResolvable('owner');
|
$this->addResolvable('owner');
|
||||||
$this->shared = -1;
|
$this->shared = -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use OCA\Deck\Db\AssignedUsersMapper;
|
|||||||
use OCA\Deck\Db\ChangeHelper;
|
use OCA\Deck\Db\ChangeHelper;
|
||||||
use OCA\Deck\Db\IPermissionMapper;
|
use OCA\Deck\Db\IPermissionMapper;
|
||||||
use OCA\Deck\Db\Label;
|
use OCA\Deck\Db\Label;
|
||||||
|
use OCA\Deck\Db\StackMapper;
|
||||||
use OCA\Deck\NoPermissionException;
|
use OCA\Deck\NoPermissionException;
|
||||||
use OCA\Deck\Notification\NotificationHelper;
|
use OCA\Deck\Notification\NotificationHelper;
|
||||||
use OCP\AppFramework\Db\DoesNotExistException;
|
use OCP\AppFramework\Db\DoesNotExistException;
|
||||||
@@ -46,6 +47,7 @@ use OCA\Deck\BadRequestException;
|
|||||||
class BoardService {
|
class BoardService {
|
||||||
|
|
||||||
private $boardMapper;
|
private $boardMapper;
|
||||||
|
private $stackMapper;
|
||||||
private $labelMapper;
|
private $labelMapper;
|
||||||
private $aclMapper;
|
private $aclMapper;
|
||||||
private $l10n;
|
private $l10n;
|
||||||
@@ -60,6 +62,7 @@ class BoardService {
|
|||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
BoardMapper $boardMapper,
|
BoardMapper $boardMapper,
|
||||||
|
StackMapper $stackMapper,
|
||||||
IL10N $l10n,
|
IL10N $l10n,
|
||||||
LabelMapper $labelMapper,
|
LabelMapper $labelMapper,
|
||||||
AclMapper $aclMapper,
|
AclMapper $aclMapper,
|
||||||
@@ -73,6 +76,7 @@ class BoardService {
|
|||||||
$userId
|
$userId
|
||||||
) {
|
) {
|
||||||
$this->boardMapper = $boardMapper;
|
$this->boardMapper = $boardMapper;
|
||||||
|
$this->stackMapper = $stackMapper;
|
||||||
$this->labelMapper = $labelMapper;
|
$this->labelMapper = $labelMapper;
|
||||||
$this->aclMapper = $aclMapper;
|
$this->aclMapper = $aclMapper;
|
||||||
$this->l10n = $l10n;
|
$this->l10n = $l10n;
|
||||||
@@ -89,7 +93,7 @@ class BoardService {
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function findAll($since = -1) {
|
public function findAll($since = 0) {
|
||||||
$userInfo = $this->getBoardPrerequisites();
|
$userInfo = $this->getBoardPrerequisites();
|
||||||
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since);
|
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since);
|
||||||
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since);
|
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since);
|
||||||
@@ -104,6 +108,7 @@ class BoardService {
|
|||||||
$this->boardMapper->mapAcl($acl);
|
$this->boardMapper->mapAcl($acl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$this->enrichWithStacks($item);
|
||||||
$permissions = $this->permissionService->matchPermissions($item);
|
$permissions = $this->permissionService->matchPermissions($item);
|
||||||
$item->setPermissions([
|
$item->setPermissions([
|
||||||
'PERMISSION_READ' => $permissions[Acl::PERMISSION_READ],
|
'PERMISSION_READ' => $permissions[Acl::PERMISSION_READ],
|
||||||
@@ -527,4 +532,14 @@ class BoardService {
|
|||||||
return $this->aclMapper->delete($acl);
|
return $this->aclMapper->delete($acl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function enrichWithStacks($board, $since = -1) {
|
||||||
|
$stacks = $this->stackMapper->findAll($board->getId(), null, null, $since);
|
||||||
|
|
||||||
|
if(\count($stacks) === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$board->setStacks($stacks);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ class BoardTest extends TestCase {
|
|||||||
'color' => "000000",
|
'color' => "000000",
|
||||||
'labels' => array(),
|
'labels' => array(),
|
||||||
'permissions' => [],
|
'permissions' => [],
|
||||||
|
'stacks' => [],
|
||||||
'deletedAt' => 0,
|
'deletedAt' => 0,
|
||||||
'lastModified' => 0,
|
'lastModified' => 0,
|
||||||
'acl' => array(),
|
'acl' => array(),
|
||||||
@@ -43,6 +44,7 @@ class BoardTest extends TestCase {
|
|||||||
'color' => "000000",
|
'color' => "000000",
|
||||||
'labels' => array("foo", "bar"),
|
'labels' => array("foo", "bar"),
|
||||||
'permissions' => [],
|
'permissions' => [],
|
||||||
|
'stacks' => [],
|
||||||
'deletedAt' => 0,
|
'deletedAt' => 0,
|
||||||
'lastModified' => 0,
|
'lastModified' => 0,
|
||||||
'acl' => array(),
|
'acl' => array(),
|
||||||
@@ -68,6 +70,7 @@ class BoardTest extends TestCase {
|
|||||||
'color' => "000000",
|
'color' => "000000",
|
||||||
'labels' => array(),
|
'labels' => array(),
|
||||||
'permissions' => [],
|
'permissions' => [],
|
||||||
|
'stacks' => [],
|
||||||
'deletedAt' => 0,
|
'deletedAt' => 0,
|
||||||
'lastModified' => 0,
|
'lastModified' => 0,
|
||||||
'acl' => array(),
|
'acl' => array(),
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ use OCA\Deck\Db\Board;
|
|||||||
use OCA\Deck\Db\BoardMapper;
|
use OCA\Deck\Db\BoardMapper;
|
||||||
use OCA\Deck\Db\ChangeHelper;
|
use OCA\Deck\Db\ChangeHelper;
|
||||||
use OCA\Deck\Db\LabelMapper;
|
use OCA\Deck\Db\LabelMapper;
|
||||||
|
use OCA\Deck\Db\StackMapper;
|
||||||
use OCA\Deck\Notification\NotificationHelper;
|
use OCA\Deck\Notification\NotificationHelper;
|
||||||
use OCP\IUser;
|
use OCP\IUser;
|
||||||
use OCP\IUserManager;
|
use OCP\IUserManager;
|
||||||
@@ -51,6 +52,8 @@ class BoardServiceTest extends TestCase {
|
|||||||
private $aclMapper;
|
private $aclMapper;
|
||||||
/** @var BoardMapper */
|
/** @var BoardMapper */
|
||||||
private $boardMapper;
|
private $boardMapper;
|
||||||
|
/** @var StackMapper */
|
||||||
|
private $stackMapper;
|
||||||
/** @var PermissionService */
|
/** @var PermissionService */
|
||||||
private $permissionService;
|
private $permissionService;
|
||||||
/** @var NotificationHelper */
|
/** @var NotificationHelper */
|
||||||
@@ -72,6 +75,7 @@ class BoardServiceTest extends TestCase {
|
|||||||
$this->l10n = $this->createMock(L10N::class);
|
$this->l10n = $this->createMock(L10N::class);
|
||||||
$this->aclMapper = $this->createMock(AclMapper::class);
|
$this->aclMapper = $this->createMock(AclMapper::class);
|
||||||
$this->boardMapper = $this->createMock(BoardMapper::class);
|
$this->boardMapper = $this->createMock(BoardMapper::class);
|
||||||
|
$this->stackMapper = $this->createMock(StackMapper::class);
|
||||||
$this->labelMapper = $this->createMock(LabelMapper::class);
|
$this->labelMapper = $this->createMock(LabelMapper::class);
|
||||||
$this->permissionService = $this->createMock(PermissionService::class);
|
$this->permissionService = $this->createMock(PermissionService::class);
|
||||||
$this->notificationHelper = $this->createMock(NotificationHelper::class);
|
$this->notificationHelper = $this->createMock(NotificationHelper::class);
|
||||||
@@ -83,6 +87,7 @@ class BoardServiceTest extends TestCase {
|
|||||||
|
|
||||||
$this->service = new BoardService(
|
$this->service = new BoardService(
|
||||||
$this->boardMapper,
|
$this->boardMapper,
|
||||||
|
$this->stackMapper,
|
||||||
$this->l10n,
|
$this->l10n,
|
||||||
$this->labelMapper,
|
$this->labelMapper,
|
||||||
$this->aclMapper,
|
$this->aclMapper,
|
||||||
@@ -111,6 +116,9 @@ class BoardServiceTest extends TestCase {
|
|||||||
->method('findAllByUser')
|
->method('findAllByUser')
|
||||||
->with('admin')
|
->with('admin')
|
||||||
->willReturn([$b1, $b2]);
|
->willReturn([$b1, $b2]);
|
||||||
|
$this->stackMapper->expects($this->any())
|
||||||
|
->method('findAll')
|
||||||
|
->willReturn([]);
|
||||||
$this->boardMapper->expects($this->once())
|
$this->boardMapper->expects($this->once())
|
||||||
->method('findAllByGroups')
|
->method('findAllByGroups')
|
||||||
->with('admin', ['a', 'b', 'c'])
|
->with('admin', ['a', 'b', 'c'])
|
||||||
|
|||||||
Reference in New Issue
Block a user