Completed
Push — master ( 1f8246...effc67 )
by Maxence
02:37
created

AddingExampleCircleMember::handle()   B

Complexity

Conditions 8
Paths 20

Size

Total Lines 54

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 54
rs 7.7591
c 0
b 0
f 0
cc 8
nc 20
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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\AddingCircleMemberEvent;
39
use OCA\Circles\Events\CircleGenericEvent;
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 AddingExampleCircleMember
49
 *
50
 * @package OCA\Circles\Listeners\Files
51
 */
52
class AddingExampleCircleMember implements IEventListener {
53
54
55
	use TStringTools;
56
	use TNC22Logger;
57
58
59
	/** @var ConfigService */
60
	private $configService;
61
62
63
	/**
64
	 * AddingExampleCircleMember 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 AddingCircleMemberEvent) {
80
			return;
81
		}
82
83
		if ($this->configService->getAppValue(ConfigService::EVENT_EXAMPLES) !== '1') {
84
			return;
85
		}
86
87
		$prefix = '[Example Event] (ExampleCircleMemberAdded) ';
88
89
		if ($event->getType() === CircleGenericEvent::MULTIPLE) {
90
			$members = $event->getMembers();
91
		} else {
92
			$members = [$event->getMember()];
93
		}
94
95
		foreach ($members as $member) {
96
			$circle = $event->getCircle();
97
			$eventType = ($event->getType() === CircleGenericEvent::INVITED) ? 'invited' : 'joined';
98
99
			$info = 'A new member have been added (' . $eventType . ') to a Circle. ';
100
101
			$info .= 'userId: ' . $member->getUserId() . '; userType: ' . Member::$TYPE[$member->getUserType(
102
				)]
103
					 . '; singleId: ' . $member->getSingleId() . '; memberId: ' . $member->getId()
104
					 . '; isLocal: ' . json_encode($member->isLocal()) . '; level: '
105
					 . Member::$DEF_LEVEL[$member->getLevel()] . '; ';
106
107
			$memberships = array_map(
108
				function(Membership $membership) {
109
					return $membership->getCircleId();
110
				}, $circle->getMemberships()
111
			);
112
113
			$listMemberships = (count($memberships) > 0) ? implode(', ', $memberships) : 'none';
114
			$info .= 'circleName: ' . $circle->getDisplayName() . '; circleId: ' . $circle->getSingleId()
115
					 . '; Circle memberships: ' . $listMemberships . '.';
116
117
			if ($member->getUserType() === Member::TYPE_CIRCLE) {
118
				$basedOn = $member->getBasedOn();
119
				$members = array_map(
120
					function(Member $member) {
121
						return $member->getUserId() . ' (' . Member::$TYPE[$member->getUserType()] . ')';
122
					}, $basedOn->getInheritedMembers()
123
				);
124
125
				$info .= ' Member is a Circle (singleId: ' . $basedOn->getSingleId()
126
						 . ') that contains those inherited members: ' . implode(', ', $members);
127
			}
128
129
			$this->log(3, $prefix . $info);
130
		}
131
	}
132
133
}
134
135