-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathActionPermissionProvider.php
81 lines (74 loc) · 2.48 KB
/
ActionPermissionProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
namespace Oro\Bundle\CalendarBundle\Datagrid;
use Oro\Bundle\CalendarBundle\Entity\Attendee;
use Oro\Bundle\DataGridBundle\Datasource\ResultRecordInterface;
use Oro\Bundle\SecurityBundle\Authentication\TokenAccessorInterface;
use Oro\Bundle\UserBundle\Entity\User;
class ActionPermissionProvider
{
/** @var TokenAccessorInterface */
protected $tokenAccessor;
public function __construct(TokenAccessorInterface $tokenAccessor)
{
$this->tokenAccessor = $tokenAccessor;
}
/**
* @param ResultRecordInterface $record
* @return array
*/
public function getInvitationPermissions(ResultRecordInterface $record)
{
/** @var User $user */
$user = $this->tokenAccessor->getUser();
$invitationStatus = $record->getValue('invitationStatus');
$parentId = $record->getValue('parentId');
$ownerId = $record->getValue('ownerId');
$relatedAttendeeUserId = $record->getValue('relatedAttendeeUserId');
$isEditable = (!$invitationStatus || ($invitationStatus && !$parentId));
return [
'accept' => $this->isAvailableResponseButton(
$user,
$ownerId,
$relatedAttendeeUserId,
$invitationStatus,
Attendee::STATUS_ACCEPTED
),
'decline' => $this->isAvailableResponseButton(
$user,
$ownerId,
$relatedAttendeeUserId,
$invitationStatus,
Attendee::STATUS_DECLINED
),
'tentative' => $this->isAvailableResponseButton(
$user,
$ownerId,
$relatedAttendeeUserId,
$invitationStatus,
Attendee::STATUS_TENTATIVE
),
'view' => true,
'update' => $isEditable
];
}
/**
* @param User $user
* @param int $ownerId
* @param int $relatedAttendeeUserId
* @param string $invitationStatus
* @param string $buttonStatus
* @return bool
*/
protected function isAvailableResponseButton(
$user,
$ownerId,
$relatedAttendeeUserId,
$invitationStatus,
$buttonStatus
) {
return $invitationStatus
&& $invitationStatus != $buttonStatus
&& $user->getId() == $ownerId
&& $user->getId() == $relatedAttendeeUserId;
}
}