silverstripe /
silverstripe-auditor
| 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
Loading history...
|
|||||
| 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
Loading history...
|
|||||
| 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 |