1 | <?php |
||||
2 | |||||
3 | namespace SilverStripe\Auditor; |
||||
4 | |||||
5 | use SilverStripe\Core\Injector\Injector; |
||||
6 | use SilverStripe\Security\Group; |
||||
7 | use SilverStripe\Security\Member; |
||||
8 | use SilverStripe\Security\Member_GroupSet; |
||||
9 | use SilverStripe\Security\Security; |
||||
10 | |||||
11 | class AuditHookMemberGroupSet extends Member_GroupSet |
||||
12 | { |
||||
13 | /** |
||||
14 | * Overload {@link ManyManyList::removeByID()} so we can log |
||||
15 | * when a Member is removed from a Group. |
||||
16 | */ |
||||
17 | public function removeByID($itemID) |
||||
18 | { |
||||
19 | parent::removeByID($itemID); |
||||
20 | |||||
21 | if ($this->getJoinTable() === 'Group_Members') { |
||||
22 | $currentMember = Security::getCurrentUser(); |
||||
23 | if (!$currentMember || !$currentMember->exists()) { |
||||
0 ignored issues
–
show
introduced
by
![]() |
|||||
24 | return; |
||||
25 | } |
||||
26 | |||||
27 | $group = Group::get()->byId($itemID); |
||||
28 | $member = Member::get()->byId($this->getForeignID()); |
||||
0 ignored issues
–
show
$this->getForeignID() of type string is incompatible with the type integer expected by parameter $id of SilverStripe\ORM\DataList::byID() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
29 | |||||
30 | if (!$group) { |
||||
0 ignored issues
–
show
|
|||||
31 | return; |
||||
32 | } |
||||
33 | if (!$member) { |
||||
0 ignored issues
–
show
|
|||||
34 | return; |
||||
35 | } |
||||
36 | |||||
37 | $this->getAuditLogger()->info(sprintf( |
||||
38 | '"%s" (ID: %s) removed Member "%s" (ID: %s) from Group "%s" (ID: %s)', |
||||
39 | $currentMember->Email ?: $currentMember->Title, |
||||
40 | $currentMember->ID, |
||||
41 | $member->Email ?: $member->Title, |
||||
42 | $member->ID, |
||||
43 | $group->Title, |
||||
44 | $group->ID |
||||
45 | )); |
||||
46 | } |
||||
47 | } |
||||
48 | |||||
49 | protected function getAuditLogger() |
||||
50 | { |
||||
51 | // See note on AuditHook::getAuditLogger |
||||
52 | return Injector::inst()->get('AuditLogger'); |
||||
53 | } |
||||
54 | } |
||||
55 |