card dashboard

Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
This commit is contained in:
Jakob Röhrl
2020-05-20 11:18:23 +02:00
committed by Julius Härtl
parent cba260fefd
commit 3c5f68e0c3
13 changed files with 516 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ namespace OCA\Deck\Controller;
use OCA\Deck\Service\AssignmentService;
use OCA\Deck\Service\CardService;
use OCA\Deck\Service\DashboardService;
use OCP\IRequest;
use OCP\AppFramework\Controller;
@@ -33,10 +34,11 @@ class CardController extends Controller {
private $cardService;
private $assignmentService;
public function __construct($appName, IRequest $request, CardService $cardService, AssignmentService $assignmentService, $userId) {
public function __construct($appName, IRequest $request, CardService $cardService, DashboardService $dashboardService, AssignmentService $assignmentService, $userId) {
parent::__construct($appName, $request);
$this->userId = $userId;
$this->cardService = $cardService;
$this->dashboardService = $dashboardService;
$this->assignmentService = $assignmentService;
}
@@ -165,4 +167,20 @@ class CardController extends Controller {
public function unassignUser($cardId, $userId, $type = 0) {
return $this->assignmentService->unassignUser($cardId, $userId, $type);
}
/**
* @NoAdminRequired
* @return array
*/
public function findAllWithDue($userId) {
return $this->dashboardService->findAllWithDue($userId);
}
/**
* @NoAdminRequired
* @return array
*/
public function findMyAssignedCards($userId) {
return $this->dashboardService->findMyAssignedCards($userId);
}
}

View File

@@ -141,6 +141,23 @@ class CardMapper extends DeckMapper implements IPermissionMapper {
return $this->findEntities($sql, [$stackId], $limit, $offset);
}
public function findAllWithDue($boardId) {
$sql = 'SELECT c.* FROM `*PREFIX*deck_cards` c
INNER JOIN `*PREFIX*deck_stacks` s ON s.id = c.stack_id
INNER JOIN `*PREFIX*deck_boards` b ON b.id = s.board_id
WHERE `s`.`board_id` = ? AND duedate IS NOT NULL AND NOT c.archived AND c.deleted_at = 0 AND s.deleted_at = 0 AND NOT b.archived AND b.deleted_at = 0';
return $this->findEntities($sql, [$boardId]);
}
public function findMyAssignedCards($boardId, $username) {
$sql = 'SELECT c.* FROM `*PREFIX*deck_cards` c
INNER JOIN `*PREFIX*deck_stacks` s ON s.id = c.stack_id
INNER JOIN `*PREFIX*deck_boards` b ON b.id = s.board_id
INNER JOIN `*PREFIX*deck_assigned_users` u ON c.id = card_id
WHERE `s`.`board_id` = ? AND participant = ? AND NOT c.archived AND c.deleted_at = 0 AND s.deleted_at = 0 AND NOT b.archived AND b.deleted_at = 0';
return $this->findEntities($sql, [$boardId, $username]);
}
public function findOverdue() {
$sql = 'SELECT id,title,duedate,notified from `*PREFIX*deck_cards` WHERE duedate < NOW() AND NOT archived AND deleted_at = 0';
return $this->findEntities($sql);

View File

@@ -564,4 +564,28 @@ class CardService {
'\OCA\Deck\Card::onUpdate', new FTSEvent(null, ['id' => $cardId, 'card' => $card])
);
}
/**
*
* @return array
* @throws \OCA\Deck\NoPermissionException
* @throws BadRequestException
*/
public function findAllWithDue($userId) {
$cards = $this->cardMapper->findAllWithDue($userId);
return $cards;
}
/**
*
* @return array
* @throws \OCA\Deck\NoPermissionException
* @throws BadRequestException
*/
public function findMyAssignedCards($userId) {
$cards = $this->cardMapper->findMyAssignedCards($userId);
return $cards;
}
}

View File

@@ -0,0 +1,163 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Deck\Service;
use OCA\Deck\Activity\ActivityManager;
use OCA\Deck\Activity\ChangeSet;
use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\Db\IPermissionMapper;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\Label;
use OCA\Deck\Db\Stack;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\NoPermissionException;
use OCA\Deck\Notification\NotificationHelper;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\IGroupManager;
use OCP\IL10N;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper;
use OCP\IUserManager;
use OCA\Deck\BadRequestException;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
class DashboardService {
private $boardMapper;
private $stackMapper;
private $labelMapper;
private $aclMapper;
private $cardMapper;
private $l10n;
private $permissionService;
private $notificationHelper;
private $assignedUsersMapper;
private $userManager;
private $groupManager;
private $userId;
private $activityManager;
/** @var EventDispatcherInterface */
private $eventDispatcher;
private $changeHelper;
public function __construct(
BoardMapper $boardMapper,
StackMapper $stackMapper,
IL10N $l10n,
LabelMapper $labelMapper,
AclMapper $aclMapper,
CardMapper $cardMapper,
PermissionService $permissionService,
NotificationHelper $notificationHelper,
AssignedUsersMapper $assignedUsersMapper,
IUserManager $userManager,
IGroupManager $groupManager,
ActivityManager $activityManager,
EventDispatcherInterface $eventDispatcher,
ChangeHelper $changeHelper,
$userId
) {
$this->boardMapper = $boardMapper;
$this->stackMapper = $stackMapper;
$this->labelMapper = $labelMapper;
$this->aclMapper = $aclMapper;
$this->cardMapper = $cardMapper;
$this->l10n = $l10n;
$this->permissionService = $permissionService;
$this->notificationHelper = $notificationHelper;
$this->assignedUsersMapper = $assignedUsersMapper;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->activityManager = $activityManager;
$this->eventDispatcher = $eventDispatcher;
$this->changeHelper = $changeHelper;
$this->userId = $userId;
}
/**
* Set a different user than the current one, e.g. when no user is available in occ
*
* @param string $userId
*/
public function setUserId(string $userId): void {
$this->userId = $userId;
}
/**
* @return array
*/
public function findAllWithDue($userId) {
$userInfo = $this->getBoardPrerequisites();
$userBoards = $this->findAllBoardsFromUser($userInfo);
$allDueCards = [];
foreach ($userBoards as $userBoard) {
$allDueCards[] = $this->cardMapper->findAllWithDue($userBoard->getId());
}
return $allDueCards;
}
/**
* @return array
*/
public function findMyAssignedCards($userId) {
$userInfo = $this->getBoardPrerequisites();
$userBoards = $this->findAllBoardsFromUser($userInfo);
$allAssignedCards = [];
foreach ($userBoards as $userBoard) {
$allAssignedCards[] = $this->cardMapper->findMyAssignedCards($userBoard->getId(), $this->userId);
}
return $allAssignedCards;
}
/**
* @return array
*/
private function findAllBoardsFromUser($userInfo, $since = -1) {
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since);
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since);
$circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since);
return array_merge($userBoards, $groupBoards, $circleBoards);
}
/**
* @return array
*/
private function getBoardPrerequisites() {
$groups = $this->groupManager->getUserGroupIds(
$this->userManager->get($this->userId)
);
return [
'user' => $this->userId,
'groups' => $groups
];
}
}