Completed
Push — master ( 21cafd...f8797c )
by Maxence
02:23
created

ExampleCircleMemberAdded::handle()   B

Complexity

Conditions 6
Paths 10

Size

Total Lines 46

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 46
rs 8.5559
c 0
b 0
f 0
cc 6
nc 10
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
6
/**
7
 * Circles - Bring cloud-users closer together.
8
 *
9
 * This file is licensed under the Affero General Public License version 3 or
10
 * later. See the COPYING file.
11
 *
12
 * @author Maxence Lange <[email protected]>
13
 * @copyright 2021
14
 * @license GNU AGPL version 3 or any later version
15
 *
16
 * This program is free software: you can redistribute it and/or modify
17
 * it under the terms of the GNU Affero General Public License as
18
 * published by the Free Software Foundation, either version 3 of the
19
 * License, or (at your option) any later version.
20
 *
21
 * This program is distributed in the hope that it will be useful,
22
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
 * GNU Affero General Public License for more details.
25
 *
26
 * You should have received a copy of the GNU Affero General Public License
27
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
28
 *
29
 */
30
31
32
namespace OCA\Circles\Listeners\Examples;
33
34
35
use daita\MySmallPhpTools\Traits\Nextcloud\nc22\TNC22Logger;
36
use daita\MySmallPhpTools\Traits\TStringTools;
37
use OCA\Circles\AppInfo\Application;
38
use OCA\Circles\Events\CircleGenericEvent;
39
use OCA\Circles\Events\CircleMemberAddedEvent;
40
use OCA\Circles\Model\Member;
41
use OCA\Circles\Model\Membership;
42
use OCA\Circles\Service\ConfigService;
43
use OCP\EventDispatcher\Event;
44
use OCP\EventDispatcher\IEventListener;
45
46
47
/**
48
 * Class ExampleCircleMemberAdded
49
 *
50
 * @package OCA\Circles\Listeners\Files
51
 */
52
class ExampleCircleMemberAdded implements IEventListener {
53
54
55
	use TStringTools;
56
	use TNC22Logger;
57
58
59
	/** @var ConfigService */
60
	private $configService;
61
62
63
	/**
64
	 * ExampleCircleMemberAdded constructor.
65
	 *
66
	 * @param ConfigService $configService
67
	 */
68
	public function __construct(ConfigService $configService) {
69
		$this->configService = $configService;
70
71
		$this->setup('app', Application::APP_ID);
72
	}
73
74
75
	/**
76
	 * @param Event $event
77
	 */
78
	public function handle(Event $event): void {
79
		if (!$event instanceof CircleMemberAddedEvent) {
80
			return;
81
		}
82
83
		if ($this->configService->getAppValue(ConfigService::EVENT_EXAMPLES) !== '1') {
84
			return;
85
		}
86
87
		$prefix = '[Example Event] (ExampleCircleMemberAdded) ';
88
89
		$member = $event->getMember();
90
		$circle = $event->getCircle();
91
		$eventType = ($event->getType() === CircleGenericEvent::INVITED) ? 'invited' : 'joined';
92
93
		$info = 'A new member have been added (' . $eventType . ') to a Circle. ';
94
95
		$info .= 'userId: ' . $member->getUserId() . '; userType: ' . Member::$TYPE[$member->getUserType()]
96
				 . '; singleId: ' . $member->getSingleId() . '; memberId: ' . $member->getId() . '; isLocal: '
97
				 . json_encode($member->isLocal()) . '; level: ' . Member::$DEF_LEVEL[$member->getLevel()]
98
				 . '; ';
99
100
		$memberships = array_map(
101
			function(Membership $membership) {
102
				return $membership->getCircleId();
103
			}, $circle->getMemberships()
104
		);
105
106
		$listMemberships = (count($memberships) > 0) ? implode(', ', $memberships) : 'none';
107
		$info .= 'circleName: ' . $circle->getDisplayName() . '; circleId: ' . $circle->getSingleId()
108
				 . '; Circle memberships: ' . $listMemberships . '.';
109
110
		if ($member->getUserType() === Member::TYPE_CIRCLE) {
111
			$basedOn = $member->getBasedOn();
112
			$members = array_map(
113
				function(Member $member) {
114
					return $member->getUserId() . ' (' . Member::$TYPE[$member->getUserType()] . ')';
115
				}, $basedOn->getInheritedMembers()
116
			);
117
118
			$info .= ' Member is a Circle (singleId: ' . $basedOn->getSingleId()
119
					 . ') that contains those inherited members: ' . implode(', ', $members);
120
		}
121
122
		$this->log(3, $prefix . $info);
123
	}
124
125
}
126
127