Quick fix for filtering out archived boards from calendar

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2020-10-02 13:50:10 +02:00
parent 3914127b39
commit 79b950e192
3 changed files with 27 additions and 13 deletions

View File

@@ -59,7 +59,7 @@ class DeckCalendarBackend {
} }
public function getBoards(): array { public function getBoards(): array {
return $this->boardService->findAll(); return $this->boardService->findAll(-1, null, false);
} }
public function getBoard(int $id): Board { public function getBoard(int $id): Board {

View File

@@ -93,10 +93,18 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @param null $offset * @param null $offset
* @return array * @return array
*/ */
public function findAllByUser($userId, $limit = null, $offset = null, $since = -1) { public function findAllByUser($userId, $limit = null, $offset = null, $since = -1, $includeArchived = true) {
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ? UNION ' . // FIXME: One moving to QBMapper we should allow filtering the boards probably by method chaining for additional where clauses
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?';
if (!$includeArchived) {
$sql .= ' AND NOT archived';
}
$sql .= ' UNION ' .
'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' . 'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?'; 'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?';
if (!$includeArchived) {
$sql .= ' AND NOT archived';
}
$entries = $this->findEntities($sql, [$userId, $since, $userId, Acl::PERMISSION_TYPE_USER, $userId, $since], $limit, $offset); $entries = $this->findEntities($sql, [$userId, $since, $userId, Acl::PERMISSION_TYPE_USER, $userId, $since], $limit, $offset);
/* @var Board $entry */ /* @var Board $entry */
foreach ($entries as $entry) { foreach ($entries as $entry) {
@@ -120,7 +128,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @param null $offset * @param null $offset
* @return array * @return array
*/ */
public function findAllByGroups($userId, $groups, $limit = null, $offset = null) { public function findAllByGroups($userId, $groups, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
if (count($groups) <= 0) { if (count($groups) <= 0) {
return []; return [];
} }
@@ -132,7 +140,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
$sql .= ' OR '; $sql .= ' OR ';
} }
} }
$sql .= ');'; $sql .= ')';
if (!$includeArchived) {
$sql .= ' AND NOT archived';
}
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_GROUP], $groups), $limit, $offset); $entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_GROUP], $groups), $limit, $offset);
/* @var Board $entry */ /* @var Board $entry */
foreach ($entries as $entry) { foreach ($entries as $entry) {
@@ -142,7 +153,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
return $entries; return $entries;
} }
public function findAllByCircles($userId, $limit = null, $offset = null) { public function findAllByCircles($userId, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
if (!$this->circlesEnabled) { if (!$this->circlesEnabled) {
return []; return [];
} }
@@ -161,7 +172,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
$sql .= ' OR '; $sql .= ' OR ';
} }
} }
$sql .= ');'; $sql .= ')';
if (!$includeArchived) {
$sql .= ' AND NOT archived';
}
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_CIRCLE], $circles), $limit, $offset); $entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_CIRCLE], $circles), $limit, $offset);
/* @var Board $entry */ /* @var Board $entry */
foreach ($entries as $entry) { foreach ($entries as $entry) {

View File

@@ -107,11 +107,11 @@ class BoardService {
$this->userId = $userId; $this->userId = $userId;
} }
public function getUserBoards(int $since = -1): array { public function getUserBoards(int $since = -1, $includeArchived = true): array {
$userInfo = $this->getBoardPrerequisites(); $userInfo = $this->getBoardPrerequisites();
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since); $userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since, $includeArchived);
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since); $groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since, $includeArchived);
$circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since); $circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since, $includeArchived);
$mergedBoards = array_merge($userBoards, $groupBoards, $circleBoards); $mergedBoards = array_merge($userBoards, $groupBoards, $circleBoards);
$result = []; $result = [];
/** @var Board $item */ /** @var Board $item */
@@ -125,11 +125,11 @@ class BoardService {
/** /**
* @return array * @return array
*/ */
public function findAll($since = -1, $details = null) { public function findAll($since = -1, $details = null, $includeArchived = true) {
if ($this->boardsCache) { if ($this->boardsCache) {
return $this->boardsCache; return $this->boardsCache;
} }
$complete = $this->getUserBoards($since); $complete = $this->getUserBoards($since, $includeArchived);
$result = []; $result = [];
/** @var Board $item */ /** @var Board $item */
foreach ($complete as &$item) { foreach ($complete as &$item) {