Passed
Push — master ( bce941...17d0da )
by John
67:35 queued 55:34
created

Card::parse()   B

Complexity

Conditions 10
Paths 15

Size

Total Lines 34
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 10
eloc 25
c 1
b 0
f 0
nc 15
nop 3
dl 0
loc 34
rs 7.6666

How to fix   Complexity   

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
 * @copyright Copyright (c) 2021 Joas Schilling <[email protected]>
6
 *
7
 * @author Joas Schilling <[email protected]>
8
 *
9
 * @license GNU AGPL version 3 or any later version
10
 *
11
 * This program is free software: you can redistribute it and/or modify
12
 * it under the terms of the GNU Affero General Public License as
13
 * published by the Free Software Foundation, either version 3 of the
14
 * License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU Affero General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU Affero General Public License
22
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
 *
24
 */
25
26
namespace OCA\DAV\CardDAV\Activity\Provider;
27
28
use OCP\Activity\IEvent;
29
use OCP\Activity\IEventMerger;
30
use OCP\Activity\IManager;
31
use OCP\App\IAppManager;
32
use OCP\IGroupManager;
33
use OCP\IL10N;
34
use OCP\IURLGenerator;
35
use OCP\IUserManager;
36
use OCP\L10N\IFactory;
37
38
class Card extends Base {
39
	public const SUBJECT_ADD = 'card_add';
40
	public const SUBJECT_UPDATE = 'card_update';
41
	public const SUBJECT_DELETE = 'card_delete';
42
43
	/** @var IFactory */
44
	protected $languageFactory;
45
46
	/** @var IManager */
47
	protected $activityManager;
48
49
	/** @var IEventMerger */
50
	protected $eventMerger;
51
52
	/** @var IAppManager */
53
	protected $appManager;
54
55
	public function __construct(IFactory $languageFactory,
56
								IURLGenerator $url,
57
								IManager $activityManager,
58
								IUserManager $userManager,
59
								IGroupManager $groupManager,
60
								IEventMerger $eventMerger,
61
								IAppManager $appManager) {
62
		parent::__construct($userManager, $groupManager, $url);
63
		$this->languageFactory = $languageFactory;
64
		$this->activityManager = $activityManager;
65
		$this->eventMerger = $eventMerger;
66
		$this->appManager = $appManager;
67
	}
68
69
	/**
70
	 * @param string $language
71
	 * @param IEvent $event
72
	 * @param IEvent|null $previousEvent
73
	 * @return IEvent
74
	 * @throws \InvalidArgumentException
75
	 */
76
	public function parse($language, IEvent $event, IEvent $previousEvent = null): IEvent {
77
		if ($event->getApp() !== 'dav' || $event->getType() !== 'card') {
78
			throw new \InvalidArgumentException();
79
		}
80
81
		$l = $this->languageFactory->get('dav', $language);
82
83
		if ($this->activityManager->getRequirePNG()) {
84
			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/contacts-dark.png')));
85
		} else {
86
			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/contacts.svg')));
87
		}
88
89
		if ($event->getSubject() === self::SUBJECT_ADD) {
90
			$subject = $l->t('{actor} created contact {card} in addressbook {addressbook}');
91
		} elseif ($event->getSubject() === self::SUBJECT_ADD . '_self') {
92
			$subject = $l->t('You created contact {card} in addressbook {addressbook}');
93
		} elseif ($event->getSubject() === self::SUBJECT_DELETE) {
94
			$subject = $l->t('{actor} deleted contact {card} from addressbook {addressbook}');
95
		} elseif ($event->getSubject() === self::SUBJECT_DELETE . '_self') {
96
			$subject = $l->t('You deleted contact {card} from addressbook {addressbook}');
97
		} elseif ($event->getSubject() === self::SUBJECT_UPDATE) {
98
			$subject = $l->t('{actor} updated contact {card} in addressbook {addressbook}');
99
		} elseif ($event->getSubject() === self::SUBJECT_UPDATE . '_self') {
100
			$subject = $l->t('You updated contact {card} in addressbook {addressbook}');
101
		} else {
102
			throw new \InvalidArgumentException();
103
		}
104
105
		$parsedParameters = $this->getParameters($event, $l);
106
		$this->setSubjects($event, $subject, $parsedParameters);
107
108
		$event = $this->eventMerger->mergeEvents('card', $event, $previousEvent);
109
		return $event;
110
	}
111
112
	protected function getParameters(IEvent $event, IL10N $l): array {
113
		$subject = $event->getSubject();
114
		$parameters = $event->getSubjectParameters();
115
116
		switch ($subject) {
117
			case self::SUBJECT_ADD:
118
			case self::SUBJECT_DELETE:
119
			case self::SUBJECT_UPDATE:
120
				return [
121
					'actor' => $this->generateUserParameter($parameters['actor']),
122
					'addressbook' => $this->generateAddressbookParameter($parameters['addressbook'], $l),
123
					'card' => $this->generateCardParameter($parameters['card']),
124
				];
125
			case self::SUBJECT_ADD . '_self':
126
			case self::SUBJECT_DELETE . '_self':
127
			case self::SUBJECT_UPDATE . '_self':
128
				return [
129
					'addressbook' => $this->generateAddressbookParameter($parameters['addressbook'], $l),
130
					'card' => $this->generateCardParameter($parameters['card']),
131
				];
132
		}
133
134
		throw new \InvalidArgumentException();
135
	}
136
137
	private function generateCardParameter(array $cardData): array {
138
		return [
139
			'type' => 'addressbook-contact',
140
			'id' => $cardData['id'],
141
			'name' => $cardData['name'],
142
		];
143
	}
144
}
145