Skip to content

Commit

Permalink
Merge pull request #2502 from nextcloud/enh/assignment
Browse files Browse the repository at this point in the history
  • Loading branch information
juliushaertl authored Nov 10, 2020
2 parents 082b7c1 + a461699 commit 0a82a34
Show file tree
Hide file tree
Showing 26 changed files with 132 additions and 133 deletions.
4 changes: 2 additions & 2 deletions lib/Activity/ActivityManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
use InvalidArgumentException;
use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\AssignedUsers;
use OCA\Deck\Db\Assignment;
use OCA\Deck\Db\Attachment;
use OCA\Deck\Db\AttachmentMapper;
use OCA\Deck\Db\Board;
Expand Down Expand Up @@ -471,7 +471,7 @@ private function findObjectForEntity($objectType, $entity) {
break;
case Attachment::class:
case Label::class:
case AssignedUsers::class:
case Assignment::class:
$objectId = $entity->getCardId();
break;
case IComment::class:
Expand Down
4 changes: 2 additions & 2 deletions lib/AppInfo/Application20.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
use OCA\Deck\Dashboard\DeckWidget;
use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Listeners\BeforeTemplateRenderedListener;
Expand Down Expand Up @@ -132,7 +132,7 @@ private function registerUserGroupHooks(IUserManager $userManager, IGroupManager
$aclMapper->delete($acl);
}
// delete existing user assignments
$assignmentMapper = $container->query(AssignedUsersMapper::class);
$assignmentMapper = $container->query(AssignmentMapper::class);
$assignments = $assignmentMapper->findByUserId($user->getUID());
foreach ($assignments as $assignment) {
$assignmentMapper->delete($assignment);
Expand Down
4 changes: 2 additions & 2 deletions lib/AppInfo/ApplicationLegacy.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
use OCA\Deck\Collaboration\Resources\ResourceProviderCard;
use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Middleware\DefaultBoardMiddleware;
Expand Down Expand Up @@ -113,7 +113,7 @@ private function registerUserGroupHooks(): void {
$aclMapper->delete($acl);
}
// delete existing user assignments
$assignmentMapper = $container->query(AssignedUsersMapper::class);
$assignmentMapper = $container->query(AssignmentMapper::class);
$assignments = $assignmentMapper->findByUserId($user->getUID());
foreach ($assignments as $assignment) {
$assignmentMapper->delete($assignment);
Expand Down
6 changes: 3 additions & 3 deletions lib/Command/UserExport.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

namespace OCA\Deck\Command;

use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\StackMapper;
Expand All @@ -48,7 +48,7 @@ public function __construct(BoardMapper $boardMapper,
BoardService $boardService,
StackMapper $stackMapper,
CardMapper $cardMapper,
AssignedUsersMapper $assignedUsersMapper,
AssignmentMapper $assignedUsersMapper,
IUserManager $userManager,
IGroupManager $groupManager) {
parent::__construct();
Expand Down Expand Up @@ -99,7 +99,7 @@ protected function execute(InputInterface $input, OutputInterface $output) {
$cards = $this->cardMapper->findAllByStack($stack->getId());
foreach ($cards as $card) {
$fullCard = $this->cardMapper->find($card->getId());
$assignedUsers = $this->assignedUsersMapper->find($card->getId());
$assignedUsers = $this->assignedUsersMapper->findAll($card->getId());
$fullCard->setAssignedUsers($assignedUsers);
$data[$board->getId()]['stacks'][$stack->getId()]['cards'][] = (array)$fullCard->jsonSerialize();
}
Expand Down
6 changes: 3 additions & 3 deletions lib/Db/AclMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,19 @@ public function findAll($boardId, $limit = null, $offset = null) {
return $this->findEntities($sql, [$boardId], $limit, $offset);
}

public function isOwner($userId, $aclId) {
public function isOwner($userId, $aclId): bool {
$sql = 'SELECT owner FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_board_acl` WHERE id = ?)';
$stmt = $this->execute($sql, [$aclId]);
$row = $stmt->fetch();
return ($row['owner'] === $userId);
}

public function findBoardId($aclId) {
public function findBoardId($aclId): ?int {
$entity = $this->find($aclId);
return $entity->getBoardId();
}

public function findByParticipant($type, $participant) {
public function findByParticipant($type, $participant): array {
$sql = 'SELECT * from *PREFIX*deck_board_acl WHERE type = ? AND participant = ?';
return $this->findEntities($sql, [$type, $participant]);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/Db/AssignedUsers.php → lib/Db/Assignment.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

use JsonSerializable;

class AssignedUsers extends RelationalEntity implements JsonSerializable {
class Assignment extends RelationalEntity implements JsonSerializable {
public $id;
protected $participant;
protected $cardId;
Expand Down
47 changes: 23 additions & 24 deletions lib/Db/AssignedUsersMapper.php → lib/Db/AssignmentMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@
use OCP\IDBConnection;
use OCP\IGroupManager;
use OCP\IUserManager;
use PDO;

class AssignedUsersMapper extends QBMapper implements IPermissionMapper {
class AssignmentMapper extends QBMapper implements IPermissionMapper {

/** @var CardMapper */
private $cardMapper;
Expand All @@ -45,77 +46,75 @@ class AssignedUsersMapper extends QBMapper implements IPermissionMapper {
private $circleService;

public function __construct(IDBConnection $db, CardMapper $cardMapper, IUserManager $userManager, IGroupManager $groupManager, CirclesService $circleService) {
parent::__construct($db, 'deck_assigned_users', AssignedUsers::class);
parent::__construct($db, 'deck_assigned_users', Assignment::class);

$this->cardMapper = $cardMapper;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->circleService = $circleService;
}

/**
* FIXME: rename this since it returns multiple entities otherwise the naming is confusing with Entity::find
*
* @param $cardId
* @return array|Entity
* @return Assignment[]
*/
public function find($cardId) {
public function findAll(int $cardId): array {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from('deck_assigned_users')
->where($qb->expr()->eq('card_id', $qb->createNamedParameter($cardId)));
/** @var AssignedUsers[] $users */
->where($qb->expr()->eq('card_id', $qb->createNamedParameter($cardId, PDO::PARAM_INT)));
$users = $this->findEntities($qb);
foreach ($users as &$user) {
foreach ($users as $user) {
$this->mapParticipant($user);
}
return $users;
}

public function findByUserId($uid) {
public function findByParticipant(string $participant, $type = Assignment::TYPE_USER): array {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from('deck_assigned_users')
->where($qb->expr()->eq('participant', $qb->createNamedParameter($uid)));
/** @var AssignedUsers[] $users */
->where($qb->expr()->eq('participant', $qb->createNamedParameter($participant, PDO::PARAM_STR)))
->andWhere($qb->expr()->eq('type', $qb->createNamedParameter($type, PDO::PARAM_INT)));
return $this->findEntities($qb);
}


public function isOwner($userId, $cardId) {
public function isOwner($userId, $cardId): bool {
return $this->cardMapper->isOwner($userId, $cardId);
}

public function findBoardId($cardId) {
public function findBoardId($cardId): ?int {
return $this->cardMapper->findBoardId($cardId);
}

/**
* Check if user exists before assigning it to a card
*
* @param Entity $entity
* @return null|Entity
* @return null|Assignment
* @throws NotFoundException
*/
public function insert(Entity $entity): Entity {
$origin = $this->getOrigin($entity);
if ($origin === null) {
throw new NotFoundException('No origin found for assignment');
}
/** @var AssignedUsers $assignment */

/** @var Assignment $assignment */
$assignment = parent::insert($entity);
$this->mapParticipant($assignment);
return $assignment;
}

public function mapParticipant(AssignedUsers $assignment): void {
public function mapParticipant(Assignment $assignment): void {
$self = $this;
$assignment->resolveRelation('participant', function () use (&$self, &$assignment) {
return $self->getOrigin($assignment);
});
}

public function isUserAssigned($cardId, $userId): bool {
$assignments = $this->find($cardId);
/** @var AssignedUsers $assignment */
$assignments = $this->findAll($cardId);
foreach ($assignments as $assignment) {
$origin = $this->getOrigin($assignment);
if ($origin instanceof User && $assignment->getParticipant() === $userId) {
Expand All @@ -132,16 +131,16 @@ public function isUserAssigned($cardId, $userId): bool {
return false;
}

private function getOrigin(AssignedUsers $assignment) {
if ($assignment->getType() === AssignedUsers::TYPE_USER) {
private function getOrigin(Assignment $assignment) {
if ($assignment->getType() === Assignment::TYPE_USER) {
$origin = $this->userManager->get($assignment->getParticipant());
return $origin ? new User($origin) : null;
}
if ($assignment->getType() === AssignedUsers::TYPE_GROUP) {
if ($assignment->getType() === Assignment::TYPE_GROUP) {
$origin = $this->groupManager->get($assignment->getParticipant());
return $origin ? new Group($origin) : null;
}
if ($assignment->getType() === AssignedUsers::TYPE_CIRCLE) {
if ($assignment->getType() === Assignment::TYPE_CIRCLE) {
$origin = $this->circleService->getCircle($assignment->getParticipant());
return $origin ? new Circle($origin) : null;
}
Expand Down
4 changes: 2 additions & 2 deletions lib/Db/AttachmentMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ public function findToDelete($cardId = null, $withOffset = true) {
* @param $id int|string unique entity identifier
* @return boolean
*/
public function isOwner($userId, $id) {
public function isOwner($userId, $id): bool {
try {
$attachment = $this->find($id);
return $this->cardMapper->isOwner($userId, $attachment->getCardId());
Expand All @@ -172,7 +172,7 @@ public function isOwner($userId, $id) {
* @param $id int|string unique entity identifier
* @return int|null id of Board
*/
public function findBoardId($id) {
public function findBoardId($id): ?int {
try {
$attachment = $this->find($id);
} catch (\Exception $e) {
Expand Down
4 changes: 2 additions & 2 deletions lib/Db/BoardMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,12 +220,12 @@ public function delete(/** @noinspection PhpUnnecessaryFullyQualifiedNameInspect
return parent::delete($entity);
}

public function isOwner($userId, $boardId) {
public function isOwner($userId, $boardId): bool {
$board = $this->find($boardId);
return ($board->getOwner() === $userId);
}

public function findBoardId($id) {
public function findBoardId($id): ?int {
return $id;
}

Expand Down
4 changes: 2 additions & 2 deletions lib/Db/CardMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ public function removeLabel($card, $label) {
$qb->execute();
}

public function isOwner($userId, $cardId) {
public function isOwner($userId, $cardId): bool {
$sql = 'SELECT owner FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_stacks` WHERE id IN (SELECT stack_id FROM `*PREFIX*deck_cards` WHERE id = ?))';
$stmt = $this->db->prepare($sql);
$stmt->bindParam(1, $cardId, \PDO::PARAM_INT);
Expand All @@ -317,7 +317,7 @@ public function isOwner($userId, $cardId) {
return ($row['owner'] === $userId);
}

public function findBoardId($cardId) {
public function findBoardId($cardId): ?int {
$sql = 'SELECT id FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_stacks` WHERE id IN (SELECT stack_id FROM `*PREFIX*deck_cards` WHERE id = ?))';
$stmt = $this->db->prepare($sql);
$stmt->bindParam(1, $cardId, \PDO::PARAM_INT);
Expand Down
4 changes: 2 additions & 2 deletions lib/Db/IPermissionMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ interface IPermissionMapper {
* @param $id int|string unique entity identifier
* @return boolean
*/
public function isOwner($userId, $id);
public function isOwner($userId, $id): bool;

/**
* Query boardId for Entity of given $id
*
* @param $id int|string unique entity identifier
* @return int|null id of Board
*/
public function findBoardId($id);
public function findBoardId($id): ?int;
}
4 changes: 2 additions & 2 deletions lib/Db/LabelMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,14 @@ public function deleteLabelAssignmentsForCard($cardId) {
$stmt->execute();
}

public function isOwner($userId, $labelId) {
public function isOwner($userId, $labelId): bool {
$sql = 'SELECT owner FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_labels` WHERE id = ?)';
$stmt = $this->execute($sql, [$labelId]);
$row = $stmt->fetch();
return ($row['owner'] === $userId);
}

public function findBoardId($labelId) {
public function findBoardId($labelId): ?int {
$entity = $this->find($labelId);
return $entity->getBoardId();
}
Expand Down
4 changes: 2 additions & 2 deletions lib/Db/StackMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ public function delete(Entity $entity) {
return parent::delete($entity);
}

public function isOwner($userId, $stackId) {
public function isOwner($userId, $stackId): bool {
$sql = 'SELECT owner FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_stacks` WHERE id = ?)';
$stmt = $this->execute($sql, [$stackId]);
$row = $stmt->fetch();
return ($row['owner'] === $userId);
}

public function findBoardId($stackId) {
public function findBoardId($stackId): ?int {
$entity = $this->find($stackId);
return $entity->getBoardId();
}
Expand Down
12 changes: 6 additions & 6 deletions lib/Notification/NotificationHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
use DateTime;
use OCA\Deck\AppInfo\Application;
use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\CardMapper;
Expand All @@ -44,8 +44,8 @@ class NotificationHelper {
protected $cardMapper;
/** @var BoardMapper */
protected $boardMapper;
/** @var AssignedUsersMapper */
protected $assignedUsersMapper;
/** @var AssignmentMapper */
protected $assignmentMapper;
/** @var PermissionService */
protected $permissionService;
/** @var IConfig */
Expand All @@ -62,7 +62,7 @@ class NotificationHelper {
public function __construct(
CardMapper $cardMapper,
BoardMapper $boardMapper,
AssignedUsersMapper $assignedUsersMapper,
AssignmentMapper $assignmentMapper,
PermissionService $permissionService,
IConfig $config,
IManager $notificationManager,
Expand All @@ -71,7 +71,7 @@ public function __construct(
) {
$this->cardMapper = $cardMapper;
$this->boardMapper = $boardMapper;
$this->assignedUsersMapper = $assignedUsersMapper;
$this->assignmentMapper = $assignmentMapper;
$this->permissionService = $permissionService;
$this->config = $config;
$this->notificationManager = $notificationManager;
Expand Down Expand Up @@ -107,7 +107,7 @@ public function sendCardDuedate($card) {
if ($user->getUID() === $board->getOwner() && count($board->getAcl()) === 0) {
// Notify if all or assigned is configured for unshared boards
$shouldNotify = true;
} elseif ($notificationSetting === ConfigService::SETTING_BOARD_NOTIFICATION_DUE_ASSIGNED && $this->assignedUsersMapper->isUserAssigned($card->getId(), $user->getUID())) {
} elseif ($notificationSetting === ConfigService::SETTING_BOARD_NOTIFICATION_DUE_ASSIGNED && $this->assignmentMapper->isUserAssigned($card->getId(), $user->getUID())) {
// Notify if the user is assigned and has the assigned setting selected
$shouldNotify = true;
}
Expand Down
Loading

0 comments on commit 0a82a34

Please sign in to comment.