Completed
Push — master ( 6ddda3...b3ff9a )
by Blizzz
79:33 queued 57:29
created
apps/dav/lib/CalDAV/Activity/Backend.php 2 patches
Indentation   +457 added lines, -457 removed lines patch added patch discarded remove patch
@@ -39,461 +39,461 @@
 block discarded – undo
39 39
  */
40 40
 class Backend {
41 41
 
42
-	/** @var IActivityManager */
43
-	protected $activityManager;
44
-
45
-	/** @var IGroupManager */
46
-	protected $groupManager;
47
-
48
-	/** @var IUserSession */
49
-	protected $userSession;
50
-
51
-	/**
52
-	 * @param IActivityManager $activityManager
53
-	 * @param IGroupManager $groupManager
54
-	 * @param IUserSession $userSession
55
-	 */
56
-	public function __construct(IActivityManager $activityManager, IGroupManager $groupManager, IUserSession $userSession) {
57
-		$this->activityManager = $activityManager;
58
-		$this->groupManager = $groupManager;
59
-		$this->userSession = $userSession;
60
-	}
61
-
62
-	/**
63
-	 * Creates activities when a calendar was creates
64
-	 *
65
-	 * @param array $calendarData
66
-	 */
67
-	public function onCalendarAdd(array $calendarData) {
68
-		$this->triggerCalendarActivity(Calendar::SUBJECT_ADD, $calendarData);
69
-	}
70
-
71
-	/**
72
-	 * Creates activities when a calendar was updated
73
-	 *
74
-	 * @param array $calendarData
75
-	 * @param array $shares
76
-	 * @param array $properties
77
-	 */
78
-	public function onCalendarUpdate(array $calendarData, array $shares, array $properties) {
79
-		$this->triggerCalendarActivity(Calendar::SUBJECT_UPDATE, $calendarData, $shares, $properties);
80
-	}
81
-
82
-	/**
83
-	 * Creates activities when a calendar was deleted
84
-	 *
85
-	 * @param array $calendarData
86
-	 * @param array $shares
87
-	 */
88
-	public function onCalendarDelete(array $calendarData, array $shares) {
89
-		$this->triggerCalendarActivity(Calendar::SUBJECT_DELETE, $calendarData, $shares);
90
-	}
91
-
92
-	/**
93
-	 * Creates activities for all related users when a calendar was touched
94
-	 *
95
-	 * @param string $action
96
-	 * @param array $calendarData
97
-	 * @param array $shares
98
-	 * @param array $changedProperties
99
-	 */
100
-	protected function triggerCalendarActivity($action, array $calendarData, array $shares = [], array $changedProperties = []) {
101
-		if (!isset($calendarData['principaluri'])) {
102
-			return;
103
-		}
104
-
105
-		$principal = explode('/', $calendarData['principaluri']);
106
-		$owner = array_pop($principal);
107
-
108
-		$currentUser = $this->userSession->getUser();
109
-		if ($currentUser instanceof IUser) {
110
-			$currentUser = $currentUser->getUID();
111
-		} else {
112
-			$currentUser = $owner;
113
-		}
114
-
115
-		$event = $this->activityManager->generateEvent();
116
-		$event->setApp('dav')
117
-			->setObject('calendar', (int) $calendarData['id'])
118
-			->setType('calendar')
119
-			->setAuthor($currentUser);
120
-
121
-		$changedVisibleInformation = array_intersect([
122
-			'{DAV:}displayname',
123
-			'{http://apple.com/ns/ical/}calendar-color'
124
-		], array_keys($changedProperties));
125
-
126
-		if (empty($shares) || ($action === Calendar::SUBJECT_UPDATE && empty($changedVisibleInformation))) {
127
-			$users = [$owner];
128
-		} else {
129
-			$users = $this->getUsersForShares($shares);
130
-			$users[] = $owner;
131
-		}
132
-
133
-		foreach ($users as $user) {
134
-			$event->setAffectedUser($user)
135
-				->setSubject(
136
-					$user === $currentUser ? $action . '_self' : $action,
137
-					[
138
-						'actor' => $currentUser,
139
-						'calendar' => [
140
-							'id' => (int) $calendarData['id'],
141
-							'uri' => $calendarData['uri'],
142
-							'name' => $calendarData['{DAV:}displayname'],
143
-						],
144
-					]
145
-				);
146
-			$this->activityManager->publish($event);
147
-		}
148
-	}
149
-
150
-	/**
151
-	 * Creates activities for all related users when a calendar was (un-)shared
152
-	 *
153
-	 * @param array $calendarData
154
-	 * @param array $shares
155
-	 * @param array $add
156
-	 * @param array $remove
157
-	 */
158
-	public function onCalendarUpdateShares(array $calendarData, array $shares, array $add, array $remove) {
159
-		$principal = explode('/', $calendarData['principaluri']);
160
-		$owner = $principal[2];
161
-
162
-		$currentUser = $this->userSession->getUser();
163
-		if ($currentUser instanceof IUser) {
164
-			$currentUser = $currentUser->getUID();
165
-		} else {
166
-			$currentUser = $owner;
167
-		}
168
-
169
-		$event = $this->activityManager->generateEvent();
170
-		$event->setApp('dav')
171
-			->setObject('calendar', (int) $calendarData['id'])
172
-			->setType('calendar')
173
-			->setAuthor($currentUser);
174
-
175
-		foreach ($remove as $principal) {
176
-			// principal:principals/users/test
177
-			$parts = explode(':', $principal, 2);
178
-			if ($parts[0] !== 'principal') {
179
-				continue;
180
-			}
181
-			$principal = explode('/', $parts[1]);
182
-
183
-			if ($principal[1] === 'users') {
184
-				$this->triggerActivityUser(
185
-					$principal[2],
186
-					$event,
187
-					$calendarData,
188
-					Calendar::SUBJECT_UNSHARE_USER,
189
-					Calendar::SUBJECT_DELETE . '_self'
190
-				);
191
-
192
-				if ($owner !== $principal[2]) {
193
-					$parameters = [
194
-						'actor' => $event->getAuthor(),
195
-						'calendar' => [
196
-							'id' => (int) $calendarData['id'],
197
-							'uri' => $calendarData['uri'],
198
-							'name' => $calendarData['{DAV:}displayname'],
199
-						],
200
-						'user' => $principal[2],
201
-					];
202
-
203
-					if ($owner === $event->getAuthor()) {
204
-						$subject = Calendar::SUBJECT_UNSHARE_USER . '_you';
205
-					} else if ($principal[2] === $event->getAuthor()) {
206
-						$subject = Calendar::SUBJECT_UNSHARE_USER . '_self';
207
-					} else {
208
-						$event->setAffectedUser($event->getAuthor())
209
-							->setSubject(Calendar::SUBJECT_UNSHARE_USER . '_you', $parameters);
210
-						$this->activityManager->publish($event);
211
-
212
-						$subject = Calendar::SUBJECT_UNSHARE_USER . '_by';
213
-					}
214
-
215
-					$event->setAffectedUser($owner)
216
-						->setSubject($subject, $parameters);
217
-					$this->activityManager->publish($event);
218
-				}
219
-			} else if ($principal[1] === 'groups') {
220
-				$this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_UNSHARE_USER);
221
-
222
-				$parameters = [
223
-					'actor' => $event->getAuthor(),
224
-					'calendar' => [
225
-						'id' => (int) $calendarData['id'],
226
-						'uri' => $calendarData['uri'],
227
-						'name' => $calendarData['{DAV:}displayname'],
228
-					],
229
-					'group' => $principal[2],
230
-				];
231
-
232
-				if ($owner === $event->getAuthor()) {
233
-					$subject = Calendar::SUBJECT_UNSHARE_GROUP . '_you';
234
-				} else {
235
-					$event->setAffectedUser($event->getAuthor())
236
-						->setSubject(Calendar::SUBJECT_UNSHARE_GROUP . '_you', $parameters);
237
-					$this->activityManager->publish($event);
238
-
239
-					$subject = Calendar::SUBJECT_UNSHARE_GROUP . '_by';
240
-				}
241
-
242
-				$event->setAffectedUser($owner)
243
-					->setSubject($subject, $parameters);
244
-				$this->activityManager->publish($event);
245
-			}
246
-		}
247
-
248
-		foreach ($add as $share) {
249
-			if ($this->isAlreadyShared($share['href'], $shares)) {
250
-				continue;
251
-			}
252
-
253
-			// principal:principals/users/test
254
-			$parts = explode(':', $share['href'], 2);
255
-			if ($parts[0] !== 'principal') {
256
-				continue;
257
-			}
258
-			$principal = explode('/', $parts[1]);
259
-
260
-			if ($principal[1] === 'users') {
261
-				$this->triggerActivityUser($principal[2], $event, $calendarData, Calendar::SUBJECT_SHARE_USER);
262
-
263
-				if ($owner !== $principal[2]) {
264
-					$parameters = [
265
-						'actor' => $event->getAuthor(),
266
-						'calendar' => [
267
-							'id' => (int) $calendarData['id'],
268
-							'uri' => $calendarData['uri'],
269
-							'name' => $calendarData['{DAV:}displayname'],
270
-						],
271
-						'user' => $principal[2],
272
-					];
273
-
274
-					if ($owner === $event->getAuthor()) {
275
-						$subject = Calendar::SUBJECT_SHARE_USER . '_you';
276
-					} else {
277
-						$event->setAffectedUser($event->getAuthor())
278
-							->setSubject(Calendar::SUBJECT_SHARE_USER . '_you', $parameters);
279
-						$this->activityManager->publish($event);
280
-
281
-						$subject = Calendar::SUBJECT_SHARE_USER . '_by';
282
-					}
283
-
284
-					$event->setAffectedUser($owner)
285
-						->setSubject($subject, $parameters);
286
-					$this->activityManager->publish($event);
287
-				}
288
-			} else if ($principal[1] === 'groups') {
289
-				$this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_SHARE_USER);
290
-
291
-				$parameters = [
292
-					'actor' => $event->getAuthor(),
293
-					'calendar' => [
294
-						'id' => (int) $calendarData['id'],
295
-						'uri' => $calendarData['uri'],
296
-						'name' => $calendarData['{DAV:}displayname'],
297
-					],
298
-					'group' => $principal[2],
299
-				];
300
-
301
-				if ($owner === $event->getAuthor()) {
302
-					$subject = Calendar::SUBJECT_SHARE_GROUP . '_you';
303
-				} else {
304
-					$event->setAffectedUser($event->getAuthor())
305
-						->setSubject(Calendar::SUBJECT_SHARE_GROUP . '_you', $parameters);
306
-					$this->activityManager->publish($event);
307
-
308
-					$subject = Calendar::SUBJECT_SHARE_GROUP . '_by';
309
-				}
310
-
311
-				$event->setAffectedUser($owner)
312
-					->setSubject($subject, $parameters);
313
-				$this->activityManager->publish($event);
314
-			}
315
-		}
316
-	}
317
-
318
-	/**
319
-	 * Checks if a calendar is already shared with a principal
320
-	 *
321
-	 * @param string $principal
322
-	 * @param array[] $shares
323
-	 * @return bool
324
-	 */
325
-	protected function isAlreadyShared($principal, $shares) {
326
-		foreach ($shares as $share) {
327
-			if ($principal === $share['href']) {
328
-				return true;
329
-			}
330
-		}
331
-
332
-		return false;
333
-	}
334
-
335
-	/**
336
-	 * Creates the given activity for all members of the given group
337
-	 *
338
-	 * @param string $gid
339
-	 * @param IEvent $event
340
-	 * @param array $properties
341
-	 * @param string $subject
342
-	 */
343
-	protected function triggerActivityGroup($gid, IEvent $event, array $properties, $subject) {
344
-		$group = $this->groupManager->get($gid);
345
-
346
-		if ($group instanceof IGroup) {
347
-			foreach ($group->getUsers() as $user) {
348
-				// Exclude current user
349
-				if ($user->getUID() !== $event->getAuthor()) {
350
-					$this->triggerActivityUser($user->getUID(), $event, $properties, $subject);
351
-				}
352
-			}
353
-		}
354
-	}
355
-
356
-	/**
357
-	 * Creates the given activity for the given user
358
-	 *
359
-	 * @param string $user
360
-	 * @param IEvent $event
361
-	 * @param array $properties
362
-	 * @param string $subject
363
-	 * @param string $subjectSelf
364
-	 */
365
-	protected function triggerActivityUser($user, IEvent $event, array $properties, $subject, $subjectSelf = '') {
366
-		$event->setAffectedUser($user)
367
-			->setSubject(
368
-				$user === $event->getAuthor() && $subjectSelf ? $subjectSelf : $subject,
369
-				[
370
-					'actor' => $event->getAuthor(),
371
-					'calendar' => [
372
-						'id' => (int) $properties['id'],
373
-						'uri' => $properties['uri'],
374
-						'name' => $properties['{DAV:}displayname'],
375
-					],
376
-				]
377
-			);
378
-
379
-		$this->activityManager->publish($event);
380
-	}
381
-
382
-	/**
383
-	 * Creates activities when a calendar object was created/updated/deleted
384
-	 *
385
-	 * @param string $action
386
-	 * @param array $calendarData
387
-	 * @param array $shares
388
-	 * @param array $objectData
389
-	 */
390
-	public function onTouchCalendarObject($action, array $calendarData, array $shares, array $objectData) {
391
-		if (!isset($calendarData['principaluri'])) {
392
-			return;
393
-		}
394
-
395
-		$principal = explode('/', $calendarData['principaluri']);
396
-		$owner = array_pop($principal);
397
-
398
-		$currentUser = $this->userSession->getUser();
399
-		if ($currentUser instanceof IUser) {
400
-			$currentUser = $currentUser->getUID();
401
-		} else {
402
-			$currentUser = $owner;
403
-		}
404
-
405
-		$object = $this->getObjectNameAndType($objectData);
406
-		$action = $action . '_' . $object['type'];
407
-
408
-		if ($object['type'] === 'todo' && strpos($action, Event::SUBJECT_OBJECT_UPDATE) === 0 && $object['status'] === 'COMPLETED') {
409
-			$action .= '_completed';
410
-		} else if ($object['type'] === 'todo' && strpos($action, Event::SUBJECT_OBJECT_UPDATE) === 0 && $object['status'] === 'NEEDS-ACTION') {
411
-			$action .= '_needs_action';
412
-		}
413
-
414
-		$event = $this->activityManager->generateEvent();
415
-		$event->setApp('dav')
416
-			->setObject('calendar', (int) $calendarData['id'])
417
-			->setType($object['type'] === 'event' ? 'calendar_event' : 'calendar_todo')
418
-			->setAuthor($currentUser);
419
-
420
-		$users = $this->getUsersForShares($shares);
421
-		$users[] = $owner;
422
-
423
-		foreach ($users as $user) {
424
-			$event->setAffectedUser($user)
425
-				->setSubject(
426
-					$user === $currentUser ? $action . '_self' : $action,
427
-					[
428
-						'actor' => $event->getAuthor(),
429
-						'calendar' => [
430
-							'id' => (int) $calendarData['id'],
431
-							'uri' => $calendarData['uri'],
432
-							'name' => $calendarData['{DAV:}displayname'],
433
-						],
434
-						'object' => [
435
-							'id' => $object['id'],
436
-							'name' => $object['name'],
437
-						],
438
-					]
439
-				);
440
-			$this->activityManager->publish($event);
441
-		}
442
-	}
443
-
444
-	/**
445
-	 * @param array $objectData
446
-	 * @return string[]|bool
447
-	 */
448
-	protected function getObjectNameAndType(array $objectData) {
449
-		$vObject = Reader::read($objectData['calendardata']);
450
-		$component = $componentType = null;
451
-		foreach($vObject->getComponents() as $component) {
452
-			if (in_array($component->name, ['VEVENT', 'VTODO'])) {
453
-				$componentType = $component->name;
454
-				break;
455
-			}
456
-		}
457
-
458
-		if (!$componentType) {
459
-			// Calendar objects must have a VEVENT or VTODO component
460
-			return false;
461
-		}
462
-
463
-		if ($componentType === 'VEVENT') {
464
-			return ['id' => (string) $component->UID, 'name' => (string) $component->SUMMARY, 'type' => 'event'];
465
-		}
466
-		return ['id' => (string) $component->UID, 'name' => (string) $component->SUMMARY, 'type' => 'todo', 'status' => (string) $component->STATUS];
467
-	}
468
-
469
-	/**
470
-	 * Get all users that have access to a given calendar
471
-	 *
472
-	 * @param array $shares
473
-	 * @return string[]
474
-	 */
475
-	protected function getUsersForShares(array $shares) {
476
-		$users = $groups = [];
477
-		foreach ($shares as $share) {
478
-			$prinical = explode('/', $share['{http://owncloud.org/ns}principal']);
479
-			if ($prinical[1] === 'users') {
480
-				$users[] = $prinical[2];
481
-			} else if ($prinical[1] === 'groups') {
482
-				$groups[] = $prinical[2];
483
-			}
484
-		}
485
-
486
-		if (!empty($groups)) {
487
-			foreach ($groups as $gid) {
488
-				$group = $this->groupManager->get($gid);
489
-				if ($group instanceof IGroup) {
490
-					foreach ($group->getUsers() as $user) {
491
-						$users[] = $user->getUID();
492
-					}
493
-				}
494
-			}
495
-		}
496
-
497
-		return array_unique($users);
498
-	}
42
+    /** @var IActivityManager */
43
+    protected $activityManager;
44
+
45
+    /** @var IGroupManager */
46
+    protected $groupManager;
47
+
48
+    /** @var IUserSession */
49
+    protected $userSession;
50
+
51
+    /**
52
+     * @param IActivityManager $activityManager
53
+     * @param IGroupManager $groupManager
54
+     * @param IUserSession $userSession
55
+     */
56
+    public function __construct(IActivityManager $activityManager, IGroupManager $groupManager, IUserSession $userSession) {
57
+        $this->activityManager = $activityManager;
58
+        $this->groupManager = $groupManager;
59
+        $this->userSession = $userSession;
60
+    }
61
+
62
+    /**
63
+     * Creates activities when a calendar was creates
64
+     *
65
+     * @param array $calendarData
66
+     */
67
+    public function onCalendarAdd(array $calendarData) {
68
+        $this->triggerCalendarActivity(Calendar::SUBJECT_ADD, $calendarData);
69
+    }
70
+
71
+    /**
72
+     * Creates activities when a calendar was updated
73
+     *
74
+     * @param array $calendarData
75
+     * @param array $shares
76
+     * @param array $properties
77
+     */
78
+    public function onCalendarUpdate(array $calendarData, array $shares, array $properties) {
79
+        $this->triggerCalendarActivity(Calendar::SUBJECT_UPDATE, $calendarData, $shares, $properties);
80
+    }
81
+
82
+    /**
83
+     * Creates activities when a calendar was deleted
84
+     *
85
+     * @param array $calendarData
86
+     * @param array $shares
87
+     */
88
+    public function onCalendarDelete(array $calendarData, array $shares) {
89
+        $this->triggerCalendarActivity(Calendar::SUBJECT_DELETE, $calendarData, $shares);
90
+    }
91
+
92
+    /**
93
+     * Creates activities for all related users when a calendar was touched
94
+     *
95
+     * @param string $action
96
+     * @param array $calendarData
97
+     * @param array $shares
98
+     * @param array $changedProperties
99
+     */
100
+    protected function triggerCalendarActivity($action, array $calendarData, array $shares = [], array $changedProperties = []) {
101
+        if (!isset($calendarData['principaluri'])) {
102
+            return;
103
+        }
104
+
105
+        $principal = explode('/', $calendarData['principaluri']);
106
+        $owner = array_pop($principal);
107
+
108
+        $currentUser = $this->userSession->getUser();
109
+        if ($currentUser instanceof IUser) {
110
+            $currentUser = $currentUser->getUID();
111
+        } else {
112
+            $currentUser = $owner;
113
+        }
114
+
115
+        $event = $this->activityManager->generateEvent();
116
+        $event->setApp('dav')
117
+            ->setObject('calendar', (int) $calendarData['id'])
118
+            ->setType('calendar')
119
+            ->setAuthor($currentUser);
120
+
121
+        $changedVisibleInformation = array_intersect([
122
+            '{DAV:}displayname',
123
+            '{http://apple.com/ns/ical/}calendar-color'
124
+        ], array_keys($changedProperties));
125
+
126
+        if (empty($shares) || ($action === Calendar::SUBJECT_UPDATE && empty($changedVisibleInformation))) {
127
+            $users = [$owner];
128
+        } else {
129
+            $users = $this->getUsersForShares($shares);
130
+            $users[] = $owner;
131
+        }
132
+
133
+        foreach ($users as $user) {
134
+            $event->setAffectedUser($user)
135
+                ->setSubject(
136
+                    $user === $currentUser ? $action . '_self' : $action,
137
+                    [
138
+                        'actor' => $currentUser,
139
+                        'calendar' => [
140
+                            'id' => (int) $calendarData['id'],
141
+                            'uri' => $calendarData['uri'],
142
+                            'name' => $calendarData['{DAV:}displayname'],
143
+                        ],
144
+                    ]
145
+                );
146
+            $this->activityManager->publish($event);
147
+        }
148
+    }
149
+
150
+    /**
151
+     * Creates activities for all related users when a calendar was (un-)shared
152
+     *
153
+     * @param array $calendarData
154
+     * @param array $shares
155
+     * @param array $add
156
+     * @param array $remove
157
+     */
158
+    public function onCalendarUpdateShares(array $calendarData, array $shares, array $add, array $remove) {
159
+        $principal = explode('/', $calendarData['principaluri']);
160
+        $owner = $principal[2];
161
+
162
+        $currentUser = $this->userSession->getUser();
163
+        if ($currentUser instanceof IUser) {
164
+            $currentUser = $currentUser->getUID();
165
+        } else {
166
+            $currentUser = $owner;
167
+        }
168
+
169
+        $event = $this->activityManager->generateEvent();
170
+        $event->setApp('dav')
171
+            ->setObject('calendar', (int) $calendarData['id'])
172
+            ->setType('calendar')
173
+            ->setAuthor($currentUser);
174
+
175
+        foreach ($remove as $principal) {
176
+            // principal:principals/users/test
177
+            $parts = explode(':', $principal, 2);
178
+            if ($parts[0] !== 'principal') {
179
+                continue;
180
+            }
181
+            $principal = explode('/', $parts[1]);
182
+
183
+            if ($principal[1] === 'users') {
184
+                $this->triggerActivityUser(
185
+                    $principal[2],
186
+                    $event,
187
+                    $calendarData,
188
+                    Calendar::SUBJECT_UNSHARE_USER,
189
+                    Calendar::SUBJECT_DELETE . '_self'
190
+                );
191
+
192
+                if ($owner !== $principal[2]) {
193
+                    $parameters = [
194
+                        'actor' => $event->getAuthor(),
195
+                        'calendar' => [
196
+                            'id' => (int) $calendarData['id'],
197
+                            'uri' => $calendarData['uri'],
198
+                            'name' => $calendarData['{DAV:}displayname'],
199
+                        ],
200
+                        'user' => $principal[2],
201
+                    ];
202
+
203
+                    if ($owner === $event->getAuthor()) {
204
+                        $subject = Calendar::SUBJECT_UNSHARE_USER . '_you';
205
+                    } else if ($principal[2] === $event->getAuthor()) {
206
+                        $subject = Calendar::SUBJECT_UNSHARE_USER . '_self';
207
+                    } else {
208
+                        $event->setAffectedUser($event->getAuthor())
209
+                            ->setSubject(Calendar::SUBJECT_UNSHARE_USER . '_you', $parameters);
210
+                        $this->activityManager->publish($event);
211
+
212
+                        $subject = Calendar::SUBJECT_UNSHARE_USER . '_by';
213
+                    }
214
+
215
+                    $event->setAffectedUser($owner)
216
+                        ->setSubject($subject, $parameters);
217
+                    $this->activityManager->publish($event);
218
+                }
219
+            } else if ($principal[1] === 'groups') {
220
+                $this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_UNSHARE_USER);
221
+
222
+                $parameters = [
223
+                    'actor' => $event->getAuthor(),
224
+                    'calendar' => [
225
+                        'id' => (int) $calendarData['id'],
226
+                        'uri' => $calendarData['uri'],
227
+                        'name' => $calendarData['{DAV:}displayname'],
228
+                    ],
229
+                    'group' => $principal[2],
230
+                ];
231
+
232
+                if ($owner === $event->getAuthor()) {
233
+                    $subject = Calendar::SUBJECT_UNSHARE_GROUP . '_you';
234
+                } else {
235
+                    $event->setAffectedUser($event->getAuthor())
236
+                        ->setSubject(Calendar::SUBJECT_UNSHARE_GROUP . '_you', $parameters);
237
+                    $this->activityManager->publish($event);
238
+
239
+                    $subject = Calendar::SUBJECT_UNSHARE_GROUP . '_by';
240
+                }
241
+
242
+                $event->setAffectedUser($owner)
243
+                    ->setSubject($subject, $parameters);
244
+                $this->activityManager->publish($event);
245
+            }
246
+        }
247
+
248
+        foreach ($add as $share) {
249
+            if ($this->isAlreadyShared($share['href'], $shares)) {
250
+                continue;
251
+            }
252
+
253
+            // principal:principals/users/test
254
+            $parts = explode(':', $share['href'], 2);
255
+            if ($parts[0] !== 'principal') {
256
+                continue;
257
+            }
258
+            $principal = explode('/', $parts[1]);
259
+
260
+            if ($principal[1] === 'users') {
261
+                $this->triggerActivityUser($principal[2], $event, $calendarData, Calendar::SUBJECT_SHARE_USER);
262
+
263
+                if ($owner !== $principal[2]) {
264
+                    $parameters = [
265
+                        'actor' => $event->getAuthor(),
266
+                        'calendar' => [
267
+                            'id' => (int) $calendarData['id'],
268
+                            'uri' => $calendarData['uri'],
269
+                            'name' => $calendarData['{DAV:}displayname'],
270
+                        ],
271
+                        'user' => $principal[2],
272
+                    ];
273
+
274
+                    if ($owner === $event->getAuthor()) {
275
+                        $subject = Calendar::SUBJECT_SHARE_USER . '_you';
276
+                    } else {
277
+                        $event->setAffectedUser($event->getAuthor())
278
+                            ->setSubject(Calendar::SUBJECT_SHARE_USER . '_you', $parameters);
279
+                        $this->activityManager->publish($event);
280
+
281
+                        $subject = Calendar::SUBJECT_SHARE_USER . '_by';
282
+                    }
283
+
284
+                    $event->setAffectedUser($owner)
285
+                        ->setSubject($subject, $parameters);
286
+                    $this->activityManager->publish($event);
287
+                }
288
+            } else if ($principal[1] === 'groups') {
289
+                $this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_SHARE_USER);
290
+
291
+                $parameters = [
292
+                    'actor' => $event->getAuthor(),
293
+                    'calendar' => [
294
+                        'id' => (int) $calendarData['id'],
295
+                        'uri' => $calendarData['uri'],
296
+                        'name' => $calendarData['{DAV:}displayname'],
297
+                    ],
298
+                    'group' => $principal[2],
299
+                ];
300
+
301
+                if ($owner === $event->getAuthor()) {
302
+                    $subject = Calendar::SUBJECT_SHARE_GROUP . '_you';
303
+                } else {
304
+                    $event->setAffectedUser($event->getAuthor())
305
+                        ->setSubject(Calendar::SUBJECT_SHARE_GROUP . '_you', $parameters);
306
+                    $this->activityManager->publish($event);
307
+
308
+                    $subject = Calendar::SUBJECT_SHARE_GROUP . '_by';
309
+                }
310
+
311
+                $event->setAffectedUser($owner)
312
+                    ->setSubject($subject, $parameters);
313
+                $this->activityManager->publish($event);
314
+            }
315
+        }
316
+    }
317
+
318
+    /**
319
+     * Checks if a calendar is already shared with a principal
320
+     *
321
+     * @param string $principal
322
+     * @param array[] $shares
323
+     * @return bool
324
+     */
325
+    protected function isAlreadyShared($principal, $shares) {
326
+        foreach ($shares as $share) {
327
+            if ($principal === $share['href']) {
328
+                return true;
329
+            }
330
+        }
331
+
332
+        return false;
333
+    }
334
+
335
+    /**
336
+     * Creates the given activity for all members of the given group
337
+     *
338
+     * @param string $gid
339
+     * @param IEvent $event
340
+     * @param array $properties
341
+     * @param string $subject
342
+     */
343
+    protected function triggerActivityGroup($gid, IEvent $event, array $properties, $subject) {
344
+        $group = $this->groupManager->get($gid);
345
+
346
+        if ($group instanceof IGroup) {
347
+            foreach ($group->getUsers() as $user) {
348
+                // Exclude current user
349
+                if ($user->getUID() !== $event->getAuthor()) {
350
+                    $this->triggerActivityUser($user->getUID(), $event, $properties, $subject);
351
+                }
352
+            }
353
+        }
354
+    }
355
+
356
+    /**
357
+     * Creates the given activity for the given user
358
+     *
359
+     * @param string $user
360
+     * @param IEvent $event
361
+     * @param array $properties
362
+     * @param string $subject
363
+     * @param string $subjectSelf
364
+     */
365
+    protected function triggerActivityUser($user, IEvent $event, array $properties, $subject, $subjectSelf = '') {
366
+        $event->setAffectedUser($user)
367
+            ->setSubject(
368
+                $user === $event->getAuthor() && $subjectSelf ? $subjectSelf : $subject,
369
+                [
370
+                    'actor' => $event->getAuthor(),
371
+                    'calendar' => [
372
+                        'id' => (int) $properties['id'],
373
+                        'uri' => $properties['uri'],
374
+                        'name' => $properties['{DAV:}displayname'],
375
+                    ],
376
+                ]
377
+            );
378
+
379
+        $this->activityManager->publish($event);
380
+    }
381
+
382
+    /**
383
+     * Creates activities when a calendar object was created/updated/deleted
384
+     *
385
+     * @param string $action
386
+     * @param array $calendarData
387
+     * @param array $shares
388
+     * @param array $objectData
389
+     */
390
+    public function onTouchCalendarObject($action, array $calendarData, array $shares, array $objectData) {
391
+        if (!isset($calendarData['principaluri'])) {
392
+            return;
393
+        }
394
+
395
+        $principal = explode('/', $calendarData['principaluri']);
396
+        $owner = array_pop($principal);
397
+
398
+        $currentUser = $this->userSession->getUser();
399
+        if ($currentUser instanceof IUser) {
400
+            $currentUser = $currentUser->getUID();
401
+        } else {
402
+            $currentUser = $owner;
403
+        }
404
+
405
+        $object = $this->getObjectNameAndType($objectData);
406
+        $action = $action . '_' . $object['type'];
407
+
408
+        if ($object['type'] === 'todo' && strpos($action, Event::SUBJECT_OBJECT_UPDATE) === 0 && $object['status'] === 'COMPLETED') {
409
+            $action .= '_completed';
410
+        } else if ($object['type'] === 'todo' && strpos($action, Event::SUBJECT_OBJECT_UPDATE) === 0 && $object['status'] === 'NEEDS-ACTION') {
411
+            $action .= '_needs_action';
412
+        }
413
+
414
+        $event = $this->activityManager->generateEvent();
415
+        $event->setApp('dav')
416
+            ->setObject('calendar', (int) $calendarData['id'])
417
+            ->setType($object['type'] === 'event' ? 'calendar_event' : 'calendar_todo')
418
+            ->setAuthor($currentUser);
419
+
420
+        $users = $this->getUsersForShares($shares);
421
+        $users[] = $owner;
422
+
423
+        foreach ($users as $user) {
424
+            $event->setAffectedUser($user)
425
+                ->setSubject(
426
+                    $user === $currentUser ? $action . '_self' : $action,
427
+                    [
428
+                        'actor' => $event->getAuthor(),
429
+                        'calendar' => [
430
+                            'id' => (int) $calendarData['id'],
431
+                            'uri' => $calendarData['uri'],
432
+                            'name' => $calendarData['{DAV:}displayname'],
433
+                        ],
434
+                        'object' => [
435
+                            'id' => $object['id'],
436
+                            'name' => $object['name'],
437
+                        ],
438
+                    ]
439
+                );
440
+            $this->activityManager->publish($event);
441
+        }
442
+    }
443
+
444
+    /**
445
+     * @param array $objectData
446
+     * @return string[]|bool
447
+     */
448
+    protected function getObjectNameAndType(array $objectData) {
449
+        $vObject = Reader::read($objectData['calendardata']);
450
+        $component = $componentType = null;
451
+        foreach($vObject->getComponents() as $component) {
452
+            if (in_array($component->name, ['VEVENT', 'VTODO'])) {
453
+                $componentType = $component->name;
454
+                break;
455
+            }
456
+        }
457
+
458
+        if (!$componentType) {
459
+            // Calendar objects must have a VEVENT or VTODO component
460
+            return false;
461
+        }
462
+
463
+        if ($componentType === 'VEVENT') {
464
+            return ['id' => (string) $component->UID, 'name' => (string) $component->SUMMARY, 'type' => 'event'];
465
+        }
466
+        return ['id' => (string) $component->UID, 'name' => (string) $component->SUMMARY, 'type' => 'todo', 'status' => (string) $component->STATUS];
467
+    }
468
+
469
+    /**
470
+     * Get all users that have access to a given calendar
471
+     *
472
+     * @param array $shares
473
+     * @return string[]
474
+     */
475
+    protected function getUsersForShares(array $shares) {
476
+        $users = $groups = [];
477
+        foreach ($shares as $share) {
478
+            $prinical = explode('/', $share['{http://owncloud.org/ns}principal']);
479
+            if ($prinical[1] === 'users') {
480
+                $users[] = $prinical[2];
481
+            } else if ($prinical[1] === 'groups') {
482
+                $groups[] = $prinical[2];
483
+            }
484
+        }
485
+
486
+        if (!empty($groups)) {
487
+            foreach ($groups as $gid) {
488
+                $group = $this->groupManager->get($gid);
489
+                if ($group instanceof IGroup) {
490
+                    foreach ($group->getUsers() as $user) {
491
+                        $users[] = $user->getUID();
492
+                    }
493
+                }
494
+            }
495
+        }
496
+
497
+        return array_unique($users);
498
+    }
499 499
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -133,7 +133,7 @@  discard block
 block discarded – undo
133 133
 		foreach ($users as $user) {
134 134
 			$event->setAffectedUser($user)
135 135
 				->setSubject(
136
-					$user === $currentUser ? $action . '_self' : $action,
136
+					$user === $currentUser ? $action.'_self' : $action,
137 137
 					[
138 138
 						'actor' => $currentUser,
139 139
 						'calendar' => [
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
 					$event,
187 187
 					$calendarData,
188 188
 					Calendar::SUBJECT_UNSHARE_USER,
189
-					Calendar::SUBJECT_DELETE . '_self'
189
+					Calendar::SUBJECT_DELETE.'_self'
190 190
 				);
191 191
 
192 192
 				if ($owner !== $principal[2]) {
@@ -201,15 +201,15 @@  discard block
 block discarded – undo
201 201
 					];
202 202
 
203 203
 					if ($owner === $event->getAuthor()) {
204
-						$subject = Calendar::SUBJECT_UNSHARE_USER . '_you';
204
+						$subject = Calendar::SUBJECT_UNSHARE_USER.'_you';
205 205
 					} else if ($principal[2] === $event->getAuthor()) {
206
-						$subject = Calendar::SUBJECT_UNSHARE_USER . '_self';
206
+						$subject = Calendar::SUBJECT_UNSHARE_USER.'_self';
207 207
 					} else {
208 208
 						$event->setAffectedUser($event->getAuthor())
209
-							->setSubject(Calendar::SUBJECT_UNSHARE_USER . '_you', $parameters);
209
+							->setSubject(Calendar::SUBJECT_UNSHARE_USER.'_you', $parameters);
210 210
 						$this->activityManager->publish($event);
211 211
 
212
-						$subject = Calendar::SUBJECT_UNSHARE_USER . '_by';
212
+						$subject = Calendar::SUBJECT_UNSHARE_USER.'_by';
213 213
 					}
214 214
 
215 215
 					$event->setAffectedUser($owner)
@@ -230,13 +230,13 @@  discard block
 block discarded – undo
230 230
 				];
231 231
 
232 232
 				if ($owner === $event->getAuthor()) {
233
-					$subject = Calendar::SUBJECT_UNSHARE_GROUP . '_you';
233
+					$subject = Calendar::SUBJECT_UNSHARE_GROUP.'_you';
234 234
 				} else {
235 235
 					$event->setAffectedUser($event->getAuthor())
236
-						->setSubject(Calendar::SUBJECT_UNSHARE_GROUP . '_you', $parameters);
236
+						->setSubject(Calendar::SUBJECT_UNSHARE_GROUP.'_you', $parameters);
237 237
 					$this->activityManager->publish($event);
238 238
 
239
-					$subject = Calendar::SUBJECT_UNSHARE_GROUP . '_by';
239
+					$subject = Calendar::SUBJECT_UNSHARE_GROUP.'_by';
240 240
 				}
241 241
 
242 242
 				$event->setAffectedUser($owner)
@@ -272,13 +272,13 @@  discard block
 block discarded – undo
272 272
 					];
273 273
 
274 274
 					if ($owner === $event->getAuthor()) {
275
-						$subject = Calendar::SUBJECT_SHARE_USER . '_you';
275
+						$subject = Calendar::SUBJECT_SHARE_USER.'_you';
276 276
 					} else {
277 277
 						$event->setAffectedUser($event->getAuthor())
278
-							->setSubject(Calendar::SUBJECT_SHARE_USER . '_you', $parameters);
278
+							->setSubject(Calendar::SUBJECT_SHARE_USER.'_you', $parameters);
279 279
 						$this->activityManager->publish($event);
280 280
 
281
-						$subject = Calendar::SUBJECT_SHARE_USER . '_by';
281
+						$subject = Calendar::SUBJECT_SHARE_USER.'_by';
282 282
 					}
283 283
 
284 284
 					$event->setAffectedUser($owner)
@@ -299,13 +299,13 @@  discard block
 block discarded – undo
299 299
 				];
300 300
 
301 301
 				if ($owner === $event->getAuthor()) {
302
-					$subject = Calendar::SUBJECT_SHARE_GROUP . '_you';
302
+					$subject = Calendar::SUBJECT_SHARE_GROUP.'_you';
303 303
 				} else {
304 304
 					$event->setAffectedUser($event->getAuthor())
305
-						->setSubject(Calendar::SUBJECT_SHARE_GROUP . '_you', $parameters);
305
+						->setSubject(Calendar::SUBJECT_SHARE_GROUP.'_you', $parameters);
306 306
 					$this->activityManager->publish($event);
307 307
 
308
-					$subject = Calendar::SUBJECT_SHARE_GROUP . '_by';
308
+					$subject = Calendar::SUBJECT_SHARE_GROUP.'_by';
309 309
 				}
310 310
 
311 311
 				$event->setAffectedUser($owner)
@@ -403,7 +403,7 @@  discard block
 block discarded – undo
403 403
 		}
404 404
 
405 405
 		$object = $this->getObjectNameAndType($objectData);
406
-		$action = $action . '_' . $object['type'];
406
+		$action = $action.'_'.$object['type'];
407 407
 
408 408
 		if ($object['type'] === 'todo' && strpos($action, Event::SUBJECT_OBJECT_UPDATE) === 0 && $object['status'] === 'COMPLETED') {
409 409
 			$action .= '_completed';
@@ -423,7 +423,7 @@  discard block
 block discarded – undo
423 423
 		foreach ($users as $user) {
424 424
 			$event->setAffectedUser($user)
425 425
 				->setSubject(
426
-					$user === $currentUser ? $action . '_self' : $action,
426
+					$user === $currentUser ? $action.'_self' : $action,
427 427
 					[
428 428
 						'actor' => $event->getAuthor(),
429 429
 						'calendar' => [
@@ -448,7 +448,7 @@  discard block
 block discarded – undo
448 448
 	protected function getObjectNameAndType(array $objectData) {
449 449
 		$vObject = Reader::read($objectData['calendardata']);
450 450
 		$component = $componentType = null;
451
-		foreach($vObject->getComponents() as $component) {
451
+		foreach ($vObject->getComponents() as $component) {
452 452
 			if (in_array($component->name, ['VEVENT', 'VTODO'])) {
453 453
 				$componentType = $component->name;
454 454
 				break;
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Provider/Base.php 1 patch
Indentation   +120 added lines, -120 removed lines patch added patch discarded remove patch
@@ -30,124 +30,124 @@
 block discarded – undo
30 30
 
31 31
 abstract class Base implements IProvider {
32 32
 
33
-	/** @var IUserManager */
34
-	protected $userManager;
35
-
36
-	/** @var string[] cached displayNames - key is the UID and value the displayname */
37
-	protected $displayNames = [];
38
-
39
-	/**
40
-	 * @param IUserManager $userManager
41
-	 */
42
-	public function __construct(IUserManager $userManager) {
43
-		$this->userManager = $userManager;
44
-	}
45
-
46
-	/**
47
-	 * @param IEvent $event
48
-	 * @param string $subject
49
-	 * @param array $parameters
50
-	 */
51
-	protected function setSubjects(IEvent $event, $subject, array $parameters) {
52
-		$placeholders = $replacements = [];
53
-		foreach ($parameters as $placeholder => $parameter) {
54
-			$placeholders[] = '{' . $placeholder . '}';
55
-			$replacements[] = $parameter['name'];
56
-		}
57
-
58
-		$event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
59
-			->setRichSubject($subject, $parameters);
60
-	}
61
-
62
-	/**
63
-	 * @param array $eventData
64
-	 * @return array
65
-	 */
66
-	protected function generateObjectParameter($eventData) {
67
-		if (!is_array($eventData) || !isset($eventData['id']) || !isset($eventData['name'])) {
68
-			throw new \InvalidArgumentException();
69
-		}
70
-
71
-		return [
72
-			'type' => 'calendar-event',
73
-			'id' => $eventData['id'],
74
-			'name' => $eventData['name'],
75
-		];
76
-	}
77
-
78
-	/**
79
-	 * @param array $data
80
-	 * @param IL10N $l
81
-	 * @return array
82
-	 */
83
-	protected function generateCalendarParameter($data, IL10N $l) {
84
-		if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI &&
85
-			$data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) {
86
-			return [
87
-				'type' => 'calendar',
88
-				'id' => $data['id'],
89
-				'name' => $l->t('Personal'),
90
-			];
91
-		}
92
-
93
-		return [
94
-			'type' => 'calendar',
95
-			'id' => $data['id'],
96
-			'name' => $data['name'],
97
-		];
98
-	}
99
-
100
-	/**
101
-	 * @param int $id
102
-	 * @param string $name
103
-	 * @return array
104
-	 */
105
-	protected function generateLegacyCalendarParameter($id, $name) {
106
-		return [
107
-			'type' => 'calendar',
108
-			'id' => $id,
109
-			'name' => $name,
110
-		];
111
-	}
112
-
113
-	/**
114
-	 * @param string $id
115
-	 * @return array
116
-	 */
117
-	protected function generateGroupParameter($id) {
118
-		return [
119
-			'type' => 'group',
120
-			'id' => $id,
121
-			'name' => $id,
122
-		];
123
-	}
124
-
125
-	/**
126
-	 * @param string $uid
127
-	 * @return array
128
-	 */
129
-	protected function generateUserParameter($uid) {
130
-		if (!isset($this->displayNames[$uid])) {
131
-			$this->displayNames[$uid] = $this->getDisplayName($uid);
132
-		}
133
-
134
-		return [
135
-			'type' => 'user',
136
-			'id' => $uid,
137
-			'name' => $this->displayNames[$uid],
138
-		];
139
-	}
140
-
141
-	/**
142
-	 * @param string $uid
143
-	 * @return string
144
-	 */
145
-	protected function getDisplayName($uid) {
146
-		$user = $this->userManager->get($uid);
147
-		if ($user instanceof IUser) {
148
-			return $user->getDisplayName();
149
-		} else {
150
-			return $uid;
151
-		}
152
-	}
33
+    /** @var IUserManager */
34
+    protected $userManager;
35
+
36
+    /** @var string[] cached displayNames - key is the UID and value the displayname */
37
+    protected $displayNames = [];
38
+
39
+    /**
40
+     * @param IUserManager $userManager
41
+     */
42
+    public function __construct(IUserManager $userManager) {
43
+        $this->userManager = $userManager;
44
+    }
45
+
46
+    /**
47
+     * @param IEvent $event
48
+     * @param string $subject
49
+     * @param array $parameters
50
+     */
51
+    protected function setSubjects(IEvent $event, $subject, array $parameters) {
52
+        $placeholders = $replacements = [];
53
+        foreach ($parameters as $placeholder => $parameter) {
54
+            $placeholders[] = '{' . $placeholder . '}';
55
+            $replacements[] = $parameter['name'];
56
+        }
57
+
58
+        $event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
59
+            ->setRichSubject($subject, $parameters);
60
+    }
61
+
62
+    /**
63
+     * @param array $eventData
64
+     * @return array
65
+     */
66
+    protected function generateObjectParameter($eventData) {
67
+        if (!is_array($eventData) || !isset($eventData['id']) || !isset($eventData['name'])) {
68
+            throw new \InvalidArgumentException();
69
+        }
70
+
71
+        return [
72
+            'type' => 'calendar-event',
73
+            'id' => $eventData['id'],
74
+            'name' => $eventData['name'],
75
+        ];
76
+    }
77
+
78
+    /**
79
+     * @param array $data
80
+     * @param IL10N $l
81
+     * @return array
82
+     */
83
+    protected function generateCalendarParameter($data, IL10N $l) {
84
+        if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI &&
85
+            $data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) {
86
+            return [
87
+                'type' => 'calendar',
88
+                'id' => $data['id'],
89
+                'name' => $l->t('Personal'),
90
+            ];
91
+        }
92
+
93
+        return [
94
+            'type' => 'calendar',
95
+            'id' => $data['id'],
96
+            'name' => $data['name'],
97
+        ];
98
+    }
99
+
100
+    /**
101
+     * @param int $id
102
+     * @param string $name
103
+     * @return array
104
+     */
105
+    protected function generateLegacyCalendarParameter($id, $name) {
106
+        return [
107
+            'type' => 'calendar',
108
+            'id' => $id,
109
+            'name' => $name,
110
+        ];
111
+    }
112
+
113
+    /**
114
+     * @param string $id
115
+     * @return array
116
+     */
117
+    protected function generateGroupParameter($id) {
118
+        return [
119
+            'type' => 'group',
120
+            'id' => $id,
121
+            'name' => $id,
122
+        ];
123
+    }
124
+
125
+    /**
126
+     * @param string $uid
127
+     * @return array
128
+     */
129
+    protected function generateUserParameter($uid) {
130
+        if (!isset($this->displayNames[$uid])) {
131
+            $this->displayNames[$uid] = $this->getDisplayName($uid);
132
+        }
133
+
134
+        return [
135
+            'type' => 'user',
136
+            'id' => $uid,
137
+            'name' => $this->displayNames[$uid],
138
+        ];
139
+    }
140
+
141
+    /**
142
+     * @param string $uid
143
+     * @return string
144
+     */
145
+    protected function getDisplayName($uid) {
146
+        $user = $this->userManager->get($uid);
147
+        if ($user instanceof IUser) {
148
+            return $user->getDisplayName();
149
+        } else {
150
+            return $uid;
151
+        }
152
+    }
153 153
 }
Please login to merge, or discard this patch.
apps/comments/lib/Activity/Provider.php 1 patch
Indentation   +236 added lines, -236 removed lines patch added patch discarded remove patch
@@ -34,240 +34,240 @@
 block discarded – undo
34 34
 
35 35
 class Provider implements IProvider {
36 36
 
37
-	/** @var IFactory */
38
-	protected $languageFactory;
39
-
40
-	/** @var IL10N */
41
-	protected $l;
42
-
43
-	/** @var IURLGenerator */
44
-	protected $url;
45
-
46
-	/** @var ICommentsManager */
47
-	protected $commentsManager;
48
-
49
-	/** @var IUserManager */
50
-	protected $userManager;
51
-
52
-	/** @var IManager */
53
-	protected $activityManager;
54
-
55
-	/** @var string[] */
56
-	protected $displayNames = [];
57
-
58
-	/**
59
-	 * @param IFactory $languageFactory
60
-	 * @param IURLGenerator $url
61
-	 * @param ICommentsManager $commentsManager
62
-	 * @param IUserManager $userManager
63
-	 * @param IManager $activityManager
64
-	 */
65
-	public function __construct(IFactory $languageFactory, IURLGenerator $url, ICommentsManager $commentsManager, IUserManager $userManager, IManager $activityManager) {
66
-		$this->languageFactory = $languageFactory;
67
-		$this->url = $url;
68
-		$this->commentsManager = $commentsManager;
69
-		$this->userManager = $userManager;
70
-		$this->activityManager = $activityManager;
71
-	}
72
-
73
-	/**
74
-	 * @param string $language
75
-	 * @param IEvent $event
76
-	 * @param IEvent|null $previousEvent
77
-	 * @return IEvent
78
-	 * @throws \InvalidArgumentException
79
-	 * @since 11.0.0
80
-	 */
81
-	public function parse($language, IEvent $event, IEvent $previousEvent = null) {
82
-		if ($event->getApp() !== 'comments') {
83
-			throw new \InvalidArgumentException();
84
-		}
85
-
86
-		$this->l = $this->languageFactory->get('comments', $language);
87
-
88
-		if ($event->getSubject() === 'add_comment_subject') {
89
-			$this->parseMessage($event);
90
-			if ($this->activityManager->getRequirePNG()) {
91
-				$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.png')));
92
-			} else {
93
-				$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')));
94
-			}
95
-
96
-			if ($this->activityManager->isFormattingFilteredObject()) {
97
-				try {
98
-					return $this->parseShortVersion($event);
99
-				} catch (\InvalidArgumentException $e) {
100
-					// Ignore and simply use the long version...
101
-				}
102
-			}
103
-
104
-			return $this->parseLongVersion($event);
105
-		} else {
106
-			throw new \InvalidArgumentException();
107
-		}
108
-	}
109
-
110
-	/**
111
-	 * @param IEvent $event
112
-	 * @return IEvent
113
-	 * @throws \InvalidArgumentException
114
-	 */
115
-	protected function parseShortVersion(IEvent $event) {
116
-		$subjectParameters = $this->getSubjectParameters($event);
117
-
118
-		if ($event->getSubject() === 'add_comment_subject') {
119
-			if ($subjectParameters['actor'] === $this->activityManager->getCurrentUserId()) {
120
-				$event->setParsedSubject($this->l->t('You commented'))
121
-					->setRichSubject($this->l->t('You commented'), []);
122
-			} else {
123
-				$author = $this->generateUserParameter($subjectParameters['actor']);
124
-				$event->setParsedSubject($this->l->t('%1$s commented', [$author['name']]))
125
-					->setRichSubject($this->l->t('{author} commented'), [
126
-						'author' => $author,
127
-					]);
128
-			}
129
-		} else {
130
-			throw new \InvalidArgumentException();
131
-		}
132
-
133
-		return $event;
134
-	}
135
-
136
-	/**
137
-	 * @param IEvent $event
138
-	 * @return IEvent
139
-	 * @throws \InvalidArgumentException
140
-	 */
141
-	protected function parseLongVersion(IEvent $event) {
142
-		$subjectParameters = $this->getSubjectParameters($event);
143
-
144
-		if ($event->getSubject() === 'add_comment_subject') {
145
-			if ($subjectParameters['actor'] === $this->activityManager->getCurrentUserId()) {
146
-				$event->setParsedSubject($this->l->t('You commented on %1$s', [
147
-						$subjectParameters['filePath'],
148
-					]))
149
-					->setRichSubject($this->l->t('You commented on {file}'), [
150
-						'file' => $this->generateFileParameter($subjectParameters['fileId'], $subjectParameters['filePath']),
151
-					]);
152
-			} else {
153
-				$author = $this->generateUserParameter($subjectParameters['actor']);
154
-				$event->setParsedSubject($this->l->t('%1$s commented on %2$s', [
155
-						$author['name'],
156
-						$subjectParameters['filePath'],
157
-					]))
158
-					->setRichSubject($this->l->t('{author} commented on {file}'), [
159
-						'author' => $author,
160
-						'file' => $this->generateFileParameter($subjectParameters['fileId'], $subjectParameters['filePath']),
161
-					]);
162
-			}
163
-		} else {
164
-			throw new \InvalidArgumentException();
165
-		}
166
-
167
-		return $event;
168
-	}
169
-
170
-	protected function getSubjectParameters(IEvent $event) {
171
-		$subjectParameters = $event->getSubjectParameters();
172
-		if (isset($subjectParameters['fileId'])) {
173
-			return $subjectParameters;
174
-		}
175
-
176
-		// Fix subjects from 12.0.3 and older
177
-		//
178
-		// Do NOT Remove unless necessary
179
-		// Removing this will break parsing of activities that were created on
180
-		// Nextcloud 12, so we should keep this as long as it's acceptable.
181
-		// Otherwise if people upgrade over multiple releases in a short period,
182
-		// they will get the dead entries in their stream.
183
-		return [
184
-			'actor' => $subjectParameters[0],
185
-			'fileId' => (int) $event->getObjectId(),
186
-			'filePath' => trim($subjectParameters[1], '/'),
187
-		];
188
-	}
189
-
190
-	/**
191
-	 * @param IEvent $event
192
-	 */
193
-	protected function parseMessage(IEvent $event) {
194
-		$messageParameters = $event->getMessageParameters();
195
-		if (empty($messageParameters)) {
196
-			// Email
197
-			return;
198
-		}
199
-
200
-		$commentId = isset($messageParameters['commentId']) ? $messageParameters['commentId'] : $messageParameters[0];
201
-
202
-		try {
203
-			$comment = $this->commentsManager->get((string) $commentId);
204
-			$message = $comment->getMessage();
205
-			$message = str_replace("\n", '<br />', str_replace(['<', '>'], ['&lt;', '&gt;'], $message));
206
-
207
-			$mentionCount = 1;
208
-			$mentions = [];
209
-			foreach ($comment->getMentions() as $mention) {
210
-				if ($mention['type'] !== 'user') {
211
-					continue;
212
-				}
213
-
214
-				$message = preg_replace(
215
-					'/(^|\s)(' . '@' . $mention['id'] . ')(\b)/',
216
-					//'${1}' . $this->regexSafeUser($mention['id'], $displayName) . '${3}',
217
-					'${1}' . '{mention' . $mentionCount . '}' . '${3}',
218
-					$message
219
-				);
220
-				$mentions['mention' . $mentionCount] = $this->generateUserParameter($mention['id']);
221
-				$mentionCount++;
222
-			}
223
-
224
-			$event->setParsedMessage($comment->getMessage())
225
-				->setRichMessage($message, $mentions);
226
-		} catch (NotFoundException $e) {
227
-		}
228
-	}
229
-
230
-	/**
231
-	 * @param int $id
232
-	 * @param string $path
233
-	 * @return array
234
-	 */
235
-	protected function generateFileParameter($id, $path) {
236
-		return [
237
-			'type' => 'file',
238
-			'id' => $id,
239
-			'name' => basename($path),
240
-			'path' => $path,
241
-			'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
242
-		];
243
-	}
244
-
245
-	/**
246
-	 * @param string $uid
247
-	 * @return array
248
-	 */
249
-	protected function generateUserParameter($uid) {
250
-		if (!isset($this->displayNames[$uid])) {
251
-			$this->displayNames[$uid] = $this->getDisplayName($uid);
252
-		}
253
-
254
-		return [
255
-			'type' => 'user',
256
-			'id' => $uid,
257
-			'name' => $this->displayNames[$uid],
258
-		];
259
-	}
260
-
261
-	/**
262
-	 * @param string $uid
263
-	 * @return string
264
-	 */
265
-	protected function getDisplayName($uid) {
266
-		$user = $this->userManager->get($uid);
267
-		if ($user instanceof IUser) {
268
-			return $user->getDisplayName();
269
-		} else {
270
-			return $uid;
271
-		}
272
-	}
37
+    /** @var IFactory */
38
+    protected $languageFactory;
39
+
40
+    /** @var IL10N */
41
+    protected $l;
42
+
43
+    /** @var IURLGenerator */
44
+    protected $url;
45
+
46
+    /** @var ICommentsManager */
47
+    protected $commentsManager;
48
+
49
+    /** @var IUserManager */
50
+    protected $userManager;
51
+
52
+    /** @var IManager */
53
+    protected $activityManager;
54
+
55
+    /** @var string[] */
56
+    protected $displayNames = [];
57
+
58
+    /**
59
+     * @param IFactory $languageFactory
60
+     * @param IURLGenerator $url
61
+     * @param ICommentsManager $commentsManager
62
+     * @param IUserManager $userManager
63
+     * @param IManager $activityManager
64
+     */
65
+    public function __construct(IFactory $languageFactory, IURLGenerator $url, ICommentsManager $commentsManager, IUserManager $userManager, IManager $activityManager) {
66
+        $this->languageFactory = $languageFactory;
67
+        $this->url = $url;
68
+        $this->commentsManager = $commentsManager;
69
+        $this->userManager = $userManager;
70
+        $this->activityManager = $activityManager;
71
+    }
72
+
73
+    /**
74
+     * @param string $language
75
+     * @param IEvent $event
76
+     * @param IEvent|null $previousEvent
77
+     * @return IEvent
78
+     * @throws \InvalidArgumentException
79
+     * @since 11.0.0
80
+     */
81
+    public function parse($language, IEvent $event, IEvent $previousEvent = null) {
82
+        if ($event->getApp() !== 'comments') {
83
+            throw new \InvalidArgumentException();
84
+        }
85
+
86
+        $this->l = $this->languageFactory->get('comments', $language);
87
+
88
+        if ($event->getSubject() === 'add_comment_subject') {
89
+            $this->parseMessage($event);
90
+            if ($this->activityManager->getRequirePNG()) {
91
+                $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.png')));
92
+            } else {
93
+                $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')));
94
+            }
95
+
96
+            if ($this->activityManager->isFormattingFilteredObject()) {
97
+                try {
98
+                    return $this->parseShortVersion($event);
99
+                } catch (\InvalidArgumentException $e) {
100
+                    // Ignore and simply use the long version...
101
+                }
102
+            }
103
+
104
+            return $this->parseLongVersion($event);
105
+        } else {
106
+            throw new \InvalidArgumentException();
107
+        }
108
+    }
109
+
110
+    /**
111
+     * @param IEvent $event
112
+     * @return IEvent
113
+     * @throws \InvalidArgumentException
114
+     */
115
+    protected function parseShortVersion(IEvent $event) {
116
+        $subjectParameters = $this->getSubjectParameters($event);
117
+
118
+        if ($event->getSubject() === 'add_comment_subject') {
119
+            if ($subjectParameters['actor'] === $this->activityManager->getCurrentUserId()) {
120
+                $event->setParsedSubject($this->l->t('You commented'))
121
+                    ->setRichSubject($this->l->t('You commented'), []);
122
+            } else {
123
+                $author = $this->generateUserParameter($subjectParameters['actor']);
124
+                $event->setParsedSubject($this->l->t('%1$s commented', [$author['name']]))
125
+                    ->setRichSubject($this->l->t('{author} commented'), [
126
+                        'author' => $author,
127
+                    ]);
128
+            }
129
+        } else {
130
+            throw new \InvalidArgumentException();
131
+        }
132
+
133
+        return $event;
134
+    }
135
+
136
+    /**
137
+     * @param IEvent $event
138
+     * @return IEvent
139
+     * @throws \InvalidArgumentException
140
+     */
141
+    protected function parseLongVersion(IEvent $event) {
142
+        $subjectParameters = $this->getSubjectParameters($event);
143
+
144
+        if ($event->getSubject() === 'add_comment_subject') {
145
+            if ($subjectParameters['actor'] === $this->activityManager->getCurrentUserId()) {
146
+                $event->setParsedSubject($this->l->t('You commented on %1$s', [
147
+                        $subjectParameters['filePath'],
148
+                    ]))
149
+                    ->setRichSubject($this->l->t('You commented on {file}'), [
150
+                        'file' => $this->generateFileParameter($subjectParameters['fileId'], $subjectParameters['filePath']),
151
+                    ]);
152
+            } else {
153
+                $author = $this->generateUserParameter($subjectParameters['actor']);
154
+                $event->setParsedSubject($this->l->t('%1$s commented on %2$s', [
155
+                        $author['name'],
156
+                        $subjectParameters['filePath'],
157
+                    ]))
158
+                    ->setRichSubject($this->l->t('{author} commented on {file}'), [
159
+                        'author' => $author,
160
+                        'file' => $this->generateFileParameter($subjectParameters['fileId'], $subjectParameters['filePath']),
161
+                    ]);
162
+            }
163
+        } else {
164
+            throw new \InvalidArgumentException();
165
+        }
166
+
167
+        return $event;
168
+    }
169
+
170
+    protected function getSubjectParameters(IEvent $event) {
171
+        $subjectParameters = $event->getSubjectParameters();
172
+        if (isset($subjectParameters['fileId'])) {
173
+            return $subjectParameters;
174
+        }
175
+
176
+        // Fix subjects from 12.0.3 and older
177
+        //
178
+        // Do NOT Remove unless necessary
179
+        // Removing this will break parsing of activities that were created on
180
+        // Nextcloud 12, so we should keep this as long as it's acceptable.
181
+        // Otherwise if people upgrade over multiple releases in a short period,
182
+        // they will get the dead entries in their stream.
183
+        return [
184
+            'actor' => $subjectParameters[0],
185
+            'fileId' => (int) $event->getObjectId(),
186
+            'filePath' => trim($subjectParameters[1], '/'),
187
+        ];
188
+    }
189
+
190
+    /**
191
+     * @param IEvent $event
192
+     */
193
+    protected function parseMessage(IEvent $event) {
194
+        $messageParameters = $event->getMessageParameters();
195
+        if (empty($messageParameters)) {
196
+            // Email
197
+            return;
198
+        }
199
+
200
+        $commentId = isset($messageParameters['commentId']) ? $messageParameters['commentId'] : $messageParameters[0];
201
+
202
+        try {
203
+            $comment = $this->commentsManager->get((string) $commentId);
204
+            $message = $comment->getMessage();
205
+            $message = str_replace("\n", '<br />', str_replace(['<', '>'], ['&lt;', '&gt;'], $message));
206
+
207
+            $mentionCount = 1;
208
+            $mentions = [];
209
+            foreach ($comment->getMentions() as $mention) {
210
+                if ($mention['type'] !== 'user') {
211
+                    continue;
212
+                }
213
+
214
+                $message = preg_replace(
215
+                    '/(^|\s)(' . '@' . $mention['id'] . ')(\b)/',
216
+                    //'${1}' . $this->regexSafeUser($mention['id'], $displayName) . '${3}',
217
+                    '${1}' . '{mention' . $mentionCount . '}' . '${3}',
218
+                    $message
219
+                );
220
+                $mentions['mention' . $mentionCount] = $this->generateUserParameter($mention['id']);
221
+                $mentionCount++;
222
+            }
223
+
224
+            $event->setParsedMessage($comment->getMessage())
225
+                ->setRichMessage($message, $mentions);
226
+        } catch (NotFoundException $e) {
227
+        }
228
+    }
229
+
230
+    /**
231
+     * @param int $id
232
+     * @param string $path
233
+     * @return array
234
+     */
235
+    protected function generateFileParameter($id, $path) {
236
+        return [
237
+            'type' => 'file',
238
+            'id' => $id,
239
+            'name' => basename($path),
240
+            'path' => $path,
241
+            'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
242
+        ];
243
+    }
244
+
245
+    /**
246
+     * @param string $uid
247
+     * @return array
248
+     */
249
+    protected function generateUserParameter($uid) {
250
+        if (!isset($this->displayNames[$uid])) {
251
+            $this->displayNames[$uid] = $this->getDisplayName($uid);
252
+        }
253
+
254
+        return [
255
+            'type' => 'user',
256
+            'id' => $uid,
257
+            'name' => $this->displayNames[$uid],
258
+        ];
259
+    }
260
+
261
+    /**
262
+     * @param string $uid
263
+     * @return string
264
+     */
265
+    protected function getDisplayName($uid) {
266
+        $user = $this->userManager->get($uid);
267
+        if ($user instanceof IUser) {
268
+            return $user->getDisplayName();
269
+        } else {
270
+            return $uid;
271
+        }
272
+    }
273 273
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Provider/Todo.php 2 patches
Indentation   +105 added lines, -105 removed lines patch added patch discarded remove patch
@@ -25,120 +25,120 @@
 block discarded – undo
25 25
 
26 26
 class Todo extends Event {
27 27
 
28
-	/**
29
-	 * @param string $language
30
-	 * @param IEvent $event
31
-	 * @param IEvent|null $previousEvent
32
-	 * @return IEvent
33
-	 * @throws \InvalidArgumentException
34
-	 * @since 11.0.0
35
-	 */
36
-	public function parse($language, IEvent $event, IEvent $previousEvent = null) {
37
-		if ($event->getApp() !== 'dav' || $event->getType() !== 'calendar_todo') {
38
-			throw new \InvalidArgumentException();
39
-		}
28
+    /**
29
+     * @param string $language
30
+     * @param IEvent $event
31
+     * @param IEvent|null $previousEvent
32
+     * @return IEvent
33
+     * @throws \InvalidArgumentException
34
+     * @since 11.0.0
35
+     */
36
+    public function parse($language, IEvent $event, IEvent $previousEvent = null) {
37
+        if ($event->getApp() !== 'dav' || $event->getType() !== 'calendar_todo') {
38
+            throw new \InvalidArgumentException();
39
+        }
40 40
 
41
-		$this->l = $this->languageFactory->get('dav', $language);
41
+        $this->l = $this->languageFactory->get('dav', $language);
42 42
 
43
-		if ($this->activityManager->getRequirePNG()) {
44
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/checkmark.png')));
45
-		} else {
46
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/checkmark.svg')));
47
-		}
43
+        if ($this->activityManager->getRequirePNG()) {
44
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/checkmark.png')));
45
+        } else {
46
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/checkmark.svg')));
47
+        }
48 48
 
49
-		if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_todo') {
50
-			$subject = $this->l->t('{actor} created todo {todo} in list {calendar}');
51
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_todo_self') {
52
-			$subject = $this->l->t('You created todo {todo} in list {calendar}');
53
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_todo') {
54
-			$subject = $this->l->t('{actor} deleted todo {todo} from list {calendar}');
55
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_todo_self') {
56
-			$subject = $this->l->t('You deleted todo {todo} from list {calendar}');
57
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo') {
58
-			$subject = $this->l->t('{actor} updated todo {todo} in list {calendar}');
59
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_self') {
60
-			$subject = $this->l->t('You updated todo {todo} in list {calendar}');
49
+        if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_todo') {
50
+            $subject = $this->l->t('{actor} created todo {todo} in list {calendar}');
51
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_todo_self') {
52
+            $subject = $this->l->t('You created todo {todo} in list {calendar}');
53
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_todo') {
54
+            $subject = $this->l->t('{actor} deleted todo {todo} from list {calendar}');
55
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_todo_self') {
56
+            $subject = $this->l->t('You deleted todo {todo} from list {calendar}');
57
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo') {
58
+            $subject = $this->l->t('{actor} updated todo {todo} in list {calendar}');
59
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_self') {
60
+            $subject = $this->l->t('You updated todo {todo} in list {calendar}');
61 61
 
62
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_completed') {
63
-			$subject = $this->l->t('{actor} solved todo {todo} in list {calendar}');
64
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self') {
65
-			$subject = $this->l->t('You solved todo {todo} in list {calendar}');
66
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action') {
67
-			$subject = $this->l->t('{actor} reopened todo {todo} in list {calendar}');
68
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self') {
69
-			$subject = $this->l->t('You reopened todo {todo} in list {calendar}');
70
-		} else {
71
-			throw new \InvalidArgumentException();
72
-		}
62
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_completed') {
63
+            $subject = $this->l->t('{actor} solved todo {todo} in list {calendar}');
64
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self') {
65
+            $subject = $this->l->t('You solved todo {todo} in list {calendar}');
66
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action') {
67
+            $subject = $this->l->t('{actor} reopened todo {todo} in list {calendar}');
68
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self') {
69
+            $subject = $this->l->t('You reopened todo {todo} in list {calendar}');
70
+        } else {
71
+            throw new \InvalidArgumentException();
72
+        }
73 73
 
74
-		$parsedParameters = $this->getParameters($event);
75
-		$this->setSubjects($event, $subject, $parsedParameters);
74
+        $parsedParameters = $this->getParameters($event);
75
+        $this->setSubjects($event, $subject, $parsedParameters);
76 76
 
77
-		$event = $this->eventMerger->mergeEvents('todo', $event, $previousEvent);
77
+        $event = $this->eventMerger->mergeEvents('todo', $event, $previousEvent);
78 78
 
79
-		return $event;
80
-	}
79
+        return $event;
80
+    }
81 81
 
82
-	/**
83
-	 * @param IEvent $event
84
-	 * @return array
85
-	 */
86
-	protected function getParameters(IEvent $event) {
87
-		$subject = $event->getSubject();
88
-		$parameters = $event->getSubjectParameters();
82
+    /**
83
+     * @param IEvent $event
84
+     * @return array
85
+     */
86
+    protected function getParameters(IEvent $event) {
87
+        $subject = $event->getSubject();
88
+        $parameters = $event->getSubjectParameters();
89 89
 
90
-		// Nextcloud 13+
91
-		if (isset($parameters['calendar'])) {
92
-			switch ($subject) {
93
-				case self::SUBJECT_OBJECT_ADD . '_todo':
94
-				case self::SUBJECT_OBJECT_DELETE . '_todo':
95
-				case self::SUBJECT_OBJECT_UPDATE . '_todo':
96
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
97
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
98
-					return [
99
-						'actor' => $this->generateUserParameter($parameters['actor']),
100
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
101
-						'todo' => $this->generateObjectParameter($parameters['object']),
102
-					];
103
-				case self::SUBJECT_OBJECT_ADD . '_todo_self':
104
-				case self::SUBJECT_OBJECT_DELETE . '_todo_self':
105
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
106
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
107
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
108
-					return [
109
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
110
-						'todo' => $this->generateObjectParameter($parameters['object']),
111
-					];
112
-			}
113
-		}
90
+        // Nextcloud 13+
91
+        if (isset($parameters['calendar'])) {
92
+            switch ($subject) {
93
+                case self::SUBJECT_OBJECT_ADD . '_todo':
94
+                case self::SUBJECT_OBJECT_DELETE . '_todo':
95
+                case self::SUBJECT_OBJECT_UPDATE . '_todo':
96
+                case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
97
+                case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
98
+                    return [
99
+                        'actor' => $this->generateUserParameter($parameters['actor']),
100
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
101
+                        'todo' => $this->generateObjectParameter($parameters['object']),
102
+                    ];
103
+                case self::SUBJECT_OBJECT_ADD . '_todo_self':
104
+                case self::SUBJECT_OBJECT_DELETE . '_todo_self':
105
+                case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
106
+                case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
107
+                case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
108
+                    return [
109
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
110
+                        'todo' => $this->generateObjectParameter($parameters['object']),
111
+                    ];
112
+            }
113
+        }
114 114
 
115
-		// Legacy - Do NOT Remove unless necessary
116
-		// Removing this will break parsing of activities that were created on
117
-		// Nextcloud 12, so we should keep this as long as it's acceptable.
118
-		// Otherwise if people upgrade over multiple releases in a short period,
119
-		// they will get the dead entries in their stream.
120
-		switch ($subject) {
121
-			case self::SUBJECT_OBJECT_ADD . '_todo':
122
-			case self::SUBJECT_OBJECT_DELETE . '_todo':
123
-			case self::SUBJECT_OBJECT_UPDATE . '_todo':
124
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
125
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
126
-				return [
127
-					'actor' => $this->generateUserParameter($parameters[0]),
128
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
129
-					'todo' => $this->generateObjectParameter($parameters[2]),
130
-				];
131
-			case self::SUBJECT_OBJECT_ADD . '_todo_self':
132
-			case self::SUBJECT_OBJECT_DELETE . '_todo_self':
133
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
134
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
135
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
136
-				return [
137
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
138
-					'todo' => $this->generateObjectParameter($parameters[2]),
139
-				];
140
-		}
115
+        // Legacy - Do NOT Remove unless necessary
116
+        // Removing this will break parsing of activities that were created on
117
+        // Nextcloud 12, so we should keep this as long as it's acceptable.
118
+        // Otherwise if people upgrade over multiple releases in a short period,
119
+        // they will get the dead entries in their stream.
120
+        switch ($subject) {
121
+            case self::SUBJECT_OBJECT_ADD . '_todo':
122
+            case self::SUBJECT_OBJECT_DELETE . '_todo':
123
+            case self::SUBJECT_OBJECT_UPDATE . '_todo':
124
+            case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
125
+            case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
126
+                return [
127
+                    'actor' => $this->generateUserParameter($parameters[0]),
128
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
129
+                    'todo' => $this->generateObjectParameter($parameters[2]),
130
+                ];
131
+            case self::SUBJECT_OBJECT_ADD . '_todo_self':
132
+            case self::SUBJECT_OBJECT_DELETE . '_todo_self':
133
+            case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
134
+            case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
135
+            case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
136
+                return [
137
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
138
+                    'todo' => $this->generateObjectParameter($parameters[2]),
139
+                ];
140
+        }
141 141
 
142
-		throw new \InvalidArgumentException();
143
-	}
142
+        throw new \InvalidArgumentException();
143
+    }
144 144
 }
Please login to merge, or discard this patch.
Spacing   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -46,26 +46,26 @@  discard block
 block discarded – undo
46 46
 			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/checkmark.svg')));
47 47
 		}
48 48
 
49
-		if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_todo') {
49
+		if ($event->getSubject() === self::SUBJECT_OBJECT_ADD.'_todo') {
50 50
 			$subject = $this->l->t('{actor} created todo {todo} in list {calendar}');
51
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_todo_self') {
51
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD.'_todo_self') {
52 52
 			$subject = $this->l->t('You created todo {todo} in list {calendar}');
53
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_todo') {
53
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE.'_todo') {
54 54
 			$subject = $this->l->t('{actor} deleted todo {todo} from list {calendar}');
55
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_todo_self') {
55
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE.'_todo_self') {
56 56
 			$subject = $this->l->t('You deleted todo {todo} from list {calendar}');
57
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo') {
57
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_todo') {
58 58
 			$subject = $this->l->t('{actor} updated todo {todo} in list {calendar}');
59
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_self') {
59
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_todo_self') {
60 60
 			$subject = $this->l->t('You updated todo {todo} in list {calendar}');
61 61
 
62
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_completed') {
62
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_todo_completed') {
63 63
 			$subject = $this->l->t('{actor} solved todo {todo} in list {calendar}');
64
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self') {
64
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_todo_completed_self') {
65 65
 			$subject = $this->l->t('You solved todo {todo} in list {calendar}');
66
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action') {
66
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_todo_needs_action') {
67 67
 			$subject = $this->l->t('{actor} reopened todo {todo} in list {calendar}');
68
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self') {
68
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_todo_needs_action_self') {
69 69
 			$subject = $this->l->t('You reopened todo {todo} in list {calendar}');
70 70
 		} else {
71 71
 			throw new \InvalidArgumentException();
@@ -90,21 +90,21 @@  discard block
 block discarded – undo
90 90
 		// Nextcloud 13+
91 91
 		if (isset($parameters['calendar'])) {
92 92
 			switch ($subject) {
93
-				case self::SUBJECT_OBJECT_ADD . '_todo':
94
-				case self::SUBJECT_OBJECT_DELETE . '_todo':
95
-				case self::SUBJECT_OBJECT_UPDATE . '_todo':
96
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
97
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
93
+				case self::SUBJECT_OBJECT_ADD.'_todo':
94
+				case self::SUBJECT_OBJECT_DELETE.'_todo':
95
+				case self::SUBJECT_OBJECT_UPDATE.'_todo':
96
+				case self::SUBJECT_OBJECT_UPDATE.'_todo_completed':
97
+				case self::SUBJECT_OBJECT_UPDATE.'_todo_needs_action':
98 98
 					return [
99 99
 						'actor' => $this->generateUserParameter($parameters['actor']),
100 100
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
101 101
 						'todo' => $this->generateObjectParameter($parameters['object']),
102 102
 					];
103
-				case self::SUBJECT_OBJECT_ADD . '_todo_self':
104
-				case self::SUBJECT_OBJECT_DELETE . '_todo_self':
105
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
106
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
107
-				case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
103
+				case self::SUBJECT_OBJECT_ADD.'_todo_self':
104
+				case self::SUBJECT_OBJECT_DELETE.'_todo_self':
105
+				case self::SUBJECT_OBJECT_UPDATE.'_todo_self':
106
+				case self::SUBJECT_OBJECT_UPDATE.'_todo_completed_self':
107
+				case self::SUBJECT_OBJECT_UPDATE.'_todo_needs_action_self':
108 108
 					return [
109 109
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
110 110
 						'todo' => $this->generateObjectParameter($parameters['object']),
@@ -118,23 +118,23 @@  discard block
 block discarded – undo
118 118
 		// Otherwise if people upgrade over multiple releases in a short period,
119 119
 		// they will get the dead entries in their stream.
120 120
 		switch ($subject) {
121
-			case self::SUBJECT_OBJECT_ADD . '_todo':
122
-			case self::SUBJECT_OBJECT_DELETE . '_todo':
123
-			case self::SUBJECT_OBJECT_UPDATE . '_todo':
124
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
125
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
121
+			case self::SUBJECT_OBJECT_ADD.'_todo':
122
+			case self::SUBJECT_OBJECT_DELETE.'_todo':
123
+			case self::SUBJECT_OBJECT_UPDATE.'_todo':
124
+			case self::SUBJECT_OBJECT_UPDATE.'_todo_completed':
125
+			case self::SUBJECT_OBJECT_UPDATE.'_todo_needs_action':
126 126
 				return [
127 127
 					'actor' => $this->generateUserParameter($parameters[0]),
128
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
128
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
129 129
 					'todo' => $this->generateObjectParameter($parameters[2]),
130 130
 				];
131
-			case self::SUBJECT_OBJECT_ADD . '_todo_self':
132
-			case self::SUBJECT_OBJECT_DELETE . '_todo_self':
133
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
134
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
135
-			case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
131
+			case self::SUBJECT_OBJECT_ADD.'_todo_self':
132
+			case self::SUBJECT_OBJECT_DELETE.'_todo_self':
133
+			case self::SUBJECT_OBJECT_UPDATE.'_todo_self':
134
+			case self::SUBJECT_OBJECT_UPDATE.'_todo_completed_self':
135
+			case self::SUBJECT_OBJECT_UPDATE.'_todo_needs_action_self':
136 136
 				return [
137
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
137
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
138 138
 					'todo' => $this->generateObjectParameter($parameters[2]),
139 139
 				];
140 140
 		}
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Provider/Calendar.php 2 patches
Indentation   +219 added lines, -219 removed lines patch added patch discarded remove patch
@@ -31,223 +31,223 @@
 block discarded – undo
31 31
 
32 32
 class Calendar extends Base {
33 33
 
34
-	const SUBJECT_ADD = 'calendar_add';
35
-	const SUBJECT_UPDATE = 'calendar_update';
36
-	const SUBJECT_DELETE = 'calendar_delete';
37
-	const SUBJECT_SHARE_USER = 'calendar_user_share';
38
-	const SUBJECT_SHARE_GROUP = 'calendar_group_share';
39
-	const SUBJECT_UNSHARE_USER = 'calendar_user_unshare';
40
-	const SUBJECT_UNSHARE_GROUP = 'calendar_group_unshare';
41
-
42
-	/** @var IFactory */
43
-	protected $languageFactory;
44
-
45
-	/** @var IL10N */
46
-	protected $l;
47
-
48
-	/** @var IURLGenerator */
49
-	protected $url;
50
-
51
-	/** @var IManager */
52
-	protected $activityManager;
53
-
54
-	/** @var IEventMerger */
55
-	protected $eventMerger;
56
-
57
-	/**
58
-	 * @param IFactory $languageFactory
59
-	 * @param IURLGenerator $url
60
-	 * @param IManager $activityManager
61
-	 * @param IUserManager $userManager
62
-	 * @param IEventMerger $eventMerger
63
-	 */
64
-	public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager, IEventMerger $eventMerger) {
65
-		parent::__construct($userManager);
66
-		$this->languageFactory = $languageFactory;
67
-		$this->url = $url;
68
-		$this->activityManager = $activityManager;
69
-		$this->eventMerger = $eventMerger;
70
-	}
71
-
72
-	/**
73
-	 * @param string $language
74
-	 * @param IEvent $event
75
-	 * @param IEvent|null $previousEvent
76
-	 * @return IEvent
77
-	 * @throws \InvalidArgumentException
78
-	 * @since 11.0.0
79
-	 */
80
-	public function parse($language, IEvent $event, IEvent $previousEvent = null) {
81
-		if ($event->getApp() !== 'dav' || $event->getType() !== 'calendar') {
82
-			throw new \InvalidArgumentException();
83
-		}
84
-
85
-		$this->l = $this->languageFactory->get('dav', $language);
86
-
87
-		if ($this->activityManager->getRequirePNG()) {
88
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.png')));
89
-		} else {
90
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg')));
91
-		}
92
-
93
-		if ($event->getSubject() === self::SUBJECT_ADD) {
94
-			$subject = $this->l->t('{actor} created calendar {calendar}');
95
-		} else if ($event->getSubject() === self::SUBJECT_ADD . '_self') {
96
-			$subject = $this->l->t('You created calendar {calendar}');
97
-		} else if ($event->getSubject() === self::SUBJECT_DELETE) {
98
-			$subject = $this->l->t('{actor} deleted calendar {calendar}');
99
-		} else if ($event->getSubject() === self::SUBJECT_DELETE . '_self') {
100
-			$subject = $this->l->t('You deleted calendar {calendar}');
101
-		} else if ($event->getSubject() === self::SUBJECT_UPDATE) {
102
-			$subject = $this->l->t('{actor} updated calendar {calendar}');
103
-		} else if ($event->getSubject() === self::SUBJECT_UPDATE . '_self') {
104
-			$subject = $this->l->t('You updated calendar {calendar}');
105
-
106
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER) {
107
-			$subject = $this->l->t('{actor} shared calendar {calendar} with you');
108
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER . '_you') {
109
-			$subject = $this->l->t('You shared calendar {calendar} with {user}');
110
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER . '_by') {
111
-			$subject = $this->l->t('{actor} shared calendar {calendar} with {user}');
112
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER) {
113
-			$subject = $this->l->t('{actor} unshared calendar {calendar} from you');
114
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_you') {
115
-			$subject = $this->l->t('You unshared calendar {calendar} from {user}');
116
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_by') {
117
-			$subject = $this->l->t('{actor} unshared calendar {calendar} from {user}');
118
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_self') {
119
-			$subject = $this->l->t('{actor} unshared calendar {calendar} from themselves');
120
-
121
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP . '_you') {
122
-			$subject = $this->l->t('You shared calendar {calendar} with group {group}');
123
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP . '_by') {
124
-			$subject = $this->l->t('{actor} shared calendar {calendar} with group {group}');
125
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP . '_you') {
126
-			$subject = $this->l->t('You unshared calendar {calendar} from group {group}');
127
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP . '_by') {
128
-			$subject = $this->l->t('{actor} unshared calendar {calendar} from group {group}');
129
-		} else {
130
-			throw new \InvalidArgumentException();
131
-		}
132
-
133
-		$parsedParameters = $this->getParameters($event);
134
-		$this->setSubjects($event, $subject, $parsedParameters);
135
-
136
-		$event = $this->eventMerger->mergeEvents('calendar', $event, $previousEvent);
137
-
138
-		if ($event->getChildEvent() === null) {
139
-			if (isset($parsedParameters['user'])) {
140
-				// Couldn't group by calendar, maybe we can group by users
141
-				$event = $this->eventMerger->mergeEvents('user', $event, $previousEvent);
142
-			} else if (isset($parsedParameters['group'])) {
143
-				// Couldn't group by calendar, maybe we can group by groups
144
-				$event = $this->eventMerger->mergeEvents('group', $event, $previousEvent);
145
-			}
146
-		}
147
-
148
-		return $event;
149
-	}
150
-
151
-	/**
152
-	 * @param IEvent $event
153
-	 * @return array
154
-	 */
155
-	protected function getParameters(IEvent $event) {
156
-		$subject = $event->getSubject();
157
-		$parameters = $event->getSubjectParameters();
158
-
159
-		// Nextcloud 13+
160
-		if (isset($parameters['calendar'])) {
161
-			switch ($subject) {
162
-				case self::SUBJECT_ADD:
163
-				case self::SUBJECT_ADD . '_self':
164
-				case self::SUBJECT_DELETE:
165
-				case self::SUBJECT_DELETE . '_self':
166
-				case self::SUBJECT_UPDATE:
167
-				case self::SUBJECT_UPDATE . '_self':
168
-				case self::SUBJECT_SHARE_USER:
169
-				case self::SUBJECT_UNSHARE_USER:
170
-				case self::SUBJECT_UNSHARE_USER . '_self':
171
-					return [
172
-						'actor' => $this->generateUserParameter($parameters['actor']),
173
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
174
-					];
175
-				case self::SUBJECT_SHARE_USER . '_you':
176
-				case self::SUBJECT_UNSHARE_USER . '_you':
177
-					return [
178
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
179
-						'user' => $this->generateUserParameter($parameters['user']),
180
-					];
181
-				case self::SUBJECT_SHARE_USER . '_by':
182
-				case self::SUBJECT_UNSHARE_USER . '_by':
183
-					return [
184
-						'actor' => $this->generateUserParameter($parameters['actor']),
185
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
186
-						'user' => $this->generateUserParameter($parameters['user']),
187
-					];
188
-				case self::SUBJECT_SHARE_GROUP . '_you':
189
-				case self::SUBJECT_UNSHARE_GROUP . '_you':
190
-					return [
191
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
192
-						'group' => $this->generateGroupParameter($parameters['group']),
193
-					];
194
-				case self::SUBJECT_SHARE_GROUP . '_by':
195
-				case self::SUBJECT_UNSHARE_GROUP . '_by':
196
-					return [
197
-						'actor' => $this->generateUserParameter($parameters['actor']),
198
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
199
-						'group' => $this->generateGroupParameter($parameters['group']),
200
-					];
201
-			}
202
-		}
203
-
204
-		// Legacy - Do NOT Remove unless necessary
205
-		// Removing this will break parsing of activities that were created on
206
-		// Nextcloud 12, so we should keep this as long as it's acceptable.
207
-		// Otherwise if people upgrade over multiple releases in a short period,
208
-		// they will get the dead entries in their stream.
209
-		switch ($subject) {
210
-			case self::SUBJECT_ADD:
211
-			case self::SUBJECT_ADD . '_self':
212
-			case self::SUBJECT_DELETE:
213
-			case self::SUBJECT_DELETE . '_self':
214
-			case self::SUBJECT_UPDATE:
215
-			case self::SUBJECT_UPDATE . '_self':
216
-			case self::SUBJECT_SHARE_USER:
217
-			case self::SUBJECT_UNSHARE_USER:
218
-			case self::SUBJECT_UNSHARE_USER . '_self':
219
-				return [
220
-					'actor' => $this->generateUserParameter($parameters[0]),
221
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
222
-				];
223
-			case self::SUBJECT_SHARE_USER . '_you':
224
-			case self::SUBJECT_UNSHARE_USER . '_you':
225
-				return [
226
-					'user' => $this->generateUserParameter($parameters[0]),
227
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
228
-				];
229
-			case self::SUBJECT_SHARE_USER . '_by':
230
-			case self::SUBJECT_UNSHARE_USER . '_by':
231
-				return [
232
-					'user' => $this->generateUserParameter($parameters[0]),
233
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
234
-					'actor' => $this->generateUserParameter($parameters[2]),
235
-				];
236
-			case self::SUBJECT_SHARE_GROUP . '_you':
237
-			case self::SUBJECT_UNSHARE_GROUP . '_you':
238
-				return [
239
-					'group' => $this->generateGroupParameter($parameters[0]),
240
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
241
-				];
242
-			case self::SUBJECT_SHARE_GROUP . '_by':
243
-			case self::SUBJECT_UNSHARE_GROUP . '_by':
244
-				return [
245
-					'group' => $this->generateGroupParameter($parameters[0]),
246
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
247
-					'actor' => $this->generateUserParameter($parameters[2]),
248
-				];
249
-		}
250
-
251
-		throw new \InvalidArgumentException();
252
-	}
34
+    const SUBJECT_ADD = 'calendar_add';
35
+    const SUBJECT_UPDATE = 'calendar_update';
36
+    const SUBJECT_DELETE = 'calendar_delete';
37
+    const SUBJECT_SHARE_USER = 'calendar_user_share';
38
+    const SUBJECT_SHARE_GROUP = 'calendar_group_share';
39
+    const SUBJECT_UNSHARE_USER = 'calendar_user_unshare';
40
+    const SUBJECT_UNSHARE_GROUP = 'calendar_group_unshare';
41
+
42
+    /** @var IFactory */
43
+    protected $languageFactory;
44
+
45
+    /** @var IL10N */
46
+    protected $l;
47
+
48
+    /** @var IURLGenerator */
49
+    protected $url;
50
+
51
+    /** @var IManager */
52
+    protected $activityManager;
53
+
54
+    /** @var IEventMerger */
55
+    protected $eventMerger;
56
+
57
+    /**
58
+     * @param IFactory $languageFactory
59
+     * @param IURLGenerator $url
60
+     * @param IManager $activityManager
61
+     * @param IUserManager $userManager
62
+     * @param IEventMerger $eventMerger
63
+     */
64
+    public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager, IEventMerger $eventMerger) {
65
+        parent::__construct($userManager);
66
+        $this->languageFactory = $languageFactory;
67
+        $this->url = $url;
68
+        $this->activityManager = $activityManager;
69
+        $this->eventMerger = $eventMerger;
70
+    }
71
+
72
+    /**
73
+     * @param string $language
74
+     * @param IEvent $event
75
+     * @param IEvent|null $previousEvent
76
+     * @return IEvent
77
+     * @throws \InvalidArgumentException
78
+     * @since 11.0.0
79
+     */
80
+    public function parse($language, IEvent $event, IEvent $previousEvent = null) {
81
+        if ($event->getApp() !== 'dav' || $event->getType() !== 'calendar') {
82
+            throw new \InvalidArgumentException();
83
+        }
84
+
85
+        $this->l = $this->languageFactory->get('dav', $language);
86
+
87
+        if ($this->activityManager->getRequirePNG()) {
88
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.png')));
89
+        } else {
90
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg')));
91
+        }
92
+
93
+        if ($event->getSubject() === self::SUBJECT_ADD) {
94
+            $subject = $this->l->t('{actor} created calendar {calendar}');
95
+        } else if ($event->getSubject() === self::SUBJECT_ADD . '_self') {
96
+            $subject = $this->l->t('You created calendar {calendar}');
97
+        } else if ($event->getSubject() === self::SUBJECT_DELETE) {
98
+            $subject = $this->l->t('{actor} deleted calendar {calendar}');
99
+        } else if ($event->getSubject() === self::SUBJECT_DELETE . '_self') {
100
+            $subject = $this->l->t('You deleted calendar {calendar}');
101
+        } else if ($event->getSubject() === self::SUBJECT_UPDATE) {
102
+            $subject = $this->l->t('{actor} updated calendar {calendar}');
103
+        } else if ($event->getSubject() === self::SUBJECT_UPDATE . '_self') {
104
+            $subject = $this->l->t('You updated calendar {calendar}');
105
+
106
+        } else if ($event->getSubject() === self::SUBJECT_SHARE_USER) {
107
+            $subject = $this->l->t('{actor} shared calendar {calendar} with you');
108
+        } else if ($event->getSubject() === self::SUBJECT_SHARE_USER . '_you') {
109
+            $subject = $this->l->t('You shared calendar {calendar} with {user}');
110
+        } else if ($event->getSubject() === self::SUBJECT_SHARE_USER . '_by') {
111
+            $subject = $this->l->t('{actor} shared calendar {calendar} with {user}');
112
+        } else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER) {
113
+            $subject = $this->l->t('{actor} unshared calendar {calendar} from you');
114
+        } else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_you') {
115
+            $subject = $this->l->t('You unshared calendar {calendar} from {user}');
116
+        } else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_by') {
117
+            $subject = $this->l->t('{actor} unshared calendar {calendar} from {user}');
118
+        } else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_self') {
119
+            $subject = $this->l->t('{actor} unshared calendar {calendar} from themselves');
120
+
121
+        } else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP . '_you') {
122
+            $subject = $this->l->t('You shared calendar {calendar} with group {group}');
123
+        } else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP . '_by') {
124
+            $subject = $this->l->t('{actor} shared calendar {calendar} with group {group}');
125
+        } else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP . '_you') {
126
+            $subject = $this->l->t('You unshared calendar {calendar} from group {group}');
127
+        } else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP . '_by') {
128
+            $subject = $this->l->t('{actor} unshared calendar {calendar} from group {group}');
129
+        } else {
130
+            throw new \InvalidArgumentException();
131
+        }
132
+
133
+        $parsedParameters = $this->getParameters($event);
134
+        $this->setSubjects($event, $subject, $parsedParameters);
135
+
136
+        $event = $this->eventMerger->mergeEvents('calendar', $event, $previousEvent);
137
+
138
+        if ($event->getChildEvent() === null) {
139
+            if (isset($parsedParameters['user'])) {
140
+                // Couldn't group by calendar, maybe we can group by users
141
+                $event = $this->eventMerger->mergeEvents('user', $event, $previousEvent);
142
+            } else if (isset($parsedParameters['group'])) {
143
+                // Couldn't group by calendar, maybe we can group by groups
144
+                $event = $this->eventMerger->mergeEvents('group', $event, $previousEvent);
145
+            }
146
+        }
147
+
148
+        return $event;
149
+    }
150
+
151
+    /**
152
+     * @param IEvent $event
153
+     * @return array
154
+     */
155
+    protected function getParameters(IEvent $event) {
156
+        $subject = $event->getSubject();
157
+        $parameters = $event->getSubjectParameters();
158
+
159
+        // Nextcloud 13+
160
+        if (isset($parameters['calendar'])) {
161
+            switch ($subject) {
162
+                case self::SUBJECT_ADD:
163
+                case self::SUBJECT_ADD . '_self':
164
+                case self::SUBJECT_DELETE:
165
+                case self::SUBJECT_DELETE . '_self':
166
+                case self::SUBJECT_UPDATE:
167
+                case self::SUBJECT_UPDATE . '_self':
168
+                case self::SUBJECT_SHARE_USER:
169
+                case self::SUBJECT_UNSHARE_USER:
170
+                case self::SUBJECT_UNSHARE_USER . '_self':
171
+                    return [
172
+                        'actor' => $this->generateUserParameter($parameters['actor']),
173
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
174
+                    ];
175
+                case self::SUBJECT_SHARE_USER . '_you':
176
+                case self::SUBJECT_UNSHARE_USER . '_you':
177
+                    return [
178
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
179
+                        'user' => $this->generateUserParameter($parameters['user']),
180
+                    ];
181
+                case self::SUBJECT_SHARE_USER . '_by':
182
+                case self::SUBJECT_UNSHARE_USER . '_by':
183
+                    return [
184
+                        'actor' => $this->generateUserParameter($parameters['actor']),
185
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
186
+                        'user' => $this->generateUserParameter($parameters['user']),
187
+                    ];
188
+                case self::SUBJECT_SHARE_GROUP . '_you':
189
+                case self::SUBJECT_UNSHARE_GROUP . '_you':
190
+                    return [
191
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
192
+                        'group' => $this->generateGroupParameter($parameters['group']),
193
+                    ];
194
+                case self::SUBJECT_SHARE_GROUP . '_by':
195
+                case self::SUBJECT_UNSHARE_GROUP . '_by':
196
+                    return [
197
+                        'actor' => $this->generateUserParameter($parameters['actor']),
198
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
199
+                        'group' => $this->generateGroupParameter($parameters['group']),
200
+                    ];
201
+            }
202
+        }
203
+
204
+        // Legacy - Do NOT Remove unless necessary
205
+        // Removing this will break parsing of activities that were created on
206
+        // Nextcloud 12, so we should keep this as long as it's acceptable.
207
+        // Otherwise if people upgrade over multiple releases in a short period,
208
+        // they will get the dead entries in their stream.
209
+        switch ($subject) {
210
+            case self::SUBJECT_ADD:
211
+            case self::SUBJECT_ADD . '_self':
212
+            case self::SUBJECT_DELETE:
213
+            case self::SUBJECT_DELETE . '_self':
214
+            case self::SUBJECT_UPDATE:
215
+            case self::SUBJECT_UPDATE . '_self':
216
+            case self::SUBJECT_SHARE_USER:
217
+            case self::SUBJECT_UNSHARE_USER:
218
+            case self::SUBJECT_UNSHARE_USER . '_self':
219
+                return [
220
+                    'actor' => $this->generateUserParameter($parameters[0]),
221
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
222
+                ];
223
+            case self::SUBJECT_SHARE_USER . '_you':
224
+            case self::SUBJECT_UNSHARE_USER . '_you':
225
+                return [
226
+                    'user' => $this->generateUserParameter($parameters[0]),
227
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
228
+                ];
229
+            case self::SUBJECT_SHARE_USER . '_by':
230
+            case self::SUBJECT_UNSHARE_USER . '_by':
231
+                return [
232
+                    'user' => $this->generateUserParameter($parameters[0]),
233
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
234
+                    'actor' => $this->generateUserParameter($parameters[2]),
235
+                ];
236
+            case self::SUBJECT_SHARE_GROUP . '_you':
237
+            case self::SUBJECT_UNSHARE_GROUP . '_you':
238
+                return [
239
+                    'group' => $this->generateGroupParameter($parameters[0]),
240
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
241
+                ];
242
+            case self::SUBJECT_SHARE_GROUP . '_by':
243
+            case self::SUBJECT_UNSHARE_GROUP . '_by':
244
+                return [
245
+                    'group' => $this->generateGroupParameter($parameters[0]),
246
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
247
+                    'actor' => $this->generateUserParameter($parameters[2]),
248
+                ];
249
+        }
250
+
251
+        throw new \InvalidArgumentException();
252
+    }
253 253
 }
Please login to merge, or discard this patch.
Spacing   +41 added lines, -41 removed lines patch added patch discarded remove patch
@@ -92,39 +92,39 @@  discard block
 block discarded – undo
92 92
 
93 93
 		if ($event->getSubject() === self::SUBJECT_ADD) {
94 94
 			$subject = $this->l->t('{actor} created calendar {calendar}');
95
-		} else if ($event->getSubject() === self::SUBJECT_ADD . '_self') {
95
+		} else if ($event->getSubject() === self::SUBJECT_ADD.'_self') {
96 96
 			$subject = $this->l->t('You created calendar {calendar}');
97 97
 		} else if ($event->getSubject() === self::SUBJECT_DELETE) {
98 98
 			$subject = $this->l->t('{actor} deleted calendar {calendar}');
99
-		} else if ($event->getSubject() === self::SUBJECT_DELETE . '_self') {
99
+		} else if ($event->getSubject() === self::SUBJECT_DELETE.'_self') {
100 100
 			$subject = $this->l->t('You deleted calendar {calendar}');
101 101
 		} else if ($event->getSubject() === self::SUBJECT_UPDATE) {
102 102
 			$subject = $this->l->t('{actor} updated calendar {calendar}');
103
-		} else if ($event->getSubject() === self::SUBJECT_UPDATE . '_self') {
103
+		} else if ($event->getSubject() === self::SUBJECT_UPDATE.'_self') {
104 104
 			$subject = $this->l->t('You updated calendar {calendar}');
105 105
 
106 106
 		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER) {
107 107
 			$subject = $this->l->t('{actor} shared calendar {calendar} with you');
108
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER . '_you') {
108
+		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER.'_you') {
109 109
 			$subject = $this->l->t('You shared calendar {calendar} with {user}');
110
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER . '_by') {
110
+		} else if ($event->getSubject() === self::SUBJECT_SHARE_USER.'_by') {
111 111
 			$subject = $this->l->t('{actor} shared calendar {calendar} with {user}');
112 112
 		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER) {
113 113
 			$subject = $this->l->t('{actor} unshared calendar {calendar} from you');
114
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_you') {
114
+		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER.'_you') {
115 115
 			$subject = $this->l->t('You unshared calendar {calendar} from {user}');
116
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_by') {
116
+		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER.'_by') {
117 117
 			$subject = $this->l->t('{actor} unshared calendar {calendar} from {user}');
118
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER . '_self') {
118
+		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_USER.'_self') {
119 119
 			$subject = $this->l->t('{actor} unshared calendar {calendar} from themselves');
120 120
 
121
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP . '_you') {
121
+		} else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP.'_you') {
122 122
 			$subject = $this->l->t('You shared calendar {calendar} with group {group}');
123
-		} else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP . '_by') {
123
+		} else if ($event->getSubject() === self::SUBJECT_SHARE_GROUP.'_by') {
124 124
 			$subject = $this->l->t('{actor} shared calendar {calendar} with group {group}');
125
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP . '_you') {
125
+		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP.'_you') {
126 126
 			$subject = $this->l->t('You unshared calendar {calendar} from group {group}');
127
-		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP . '_by') {
127
+		} else if ($event->getSubject() === self::SUBJECT_UNSHARE_GROUP.'_by') {
128 128
 			$subject = $this->l->t('{actor} unshared calendar {calendar} from group {group}');
129 129
 		} else {
130 130
 			throw new \InvalidArgumentException();
@@ -160,39 +160,39 @@  discard block
 block discarded – undo
160 160
 		if (isset($parameters['calendar'])) {
161 161
 			switch ($subject) {
162 162
 				case self::SUBJECT_ADD:
163
-				case self::SUBJECT_ADD . '_self':
163
+				case self::SUBJECT_ADD.'_self':
164 164
 				case self::SUBJECT_DELETE:
165
-				case self::SUBJECT_DELETE . '_self':
165
+				case self::SUBJECT_DELETE.'_self':
166 166
 				case self::SUBJECT_UPDATE:
167
-				case self::SUBJECT_UPDATE . '_self':
167
+				case self::SUBJECT_UPDATE.'_self':
168 168
 				case self::SUBJECT_SHARE_USER:
169 169
 				case self::SUBJECT_UNSHARE_USER:
170
-				case self::SUBJECT_UNSHARE_USER . '_self':
170
+				case self::SUBJECT_UNSHARE_USER.'_self':
171 171
 					return [
172 172
 						'actor' => $this->generateUserParameter($parameters['actor']),
173 173
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
174 174
 					];
175
-				case self::SUBJECT_SHARE_USER . '_you':
176
-				case self::SUBJECT_UNSHARE_USER . '_you':
175
+				case self::SUBJECT_SHARE_USER.'_you':
176
+				case self::SUBJECT_UNSHARE_USER.'_you':
177 177
 					return [
178 178
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
179 179
 						'user' => $this->generateUserParameter($parameters['user']),
180 180
 					];
181
-				case self::SUBJECT_SHARE_USER . '_by':
182
-				case self::SUBJECT_UNSHARE_USER . '_by':
181
+				case self::SUBJECT_SHARE_USER.'_by':
182
+				case self::SUBJECT_UNSHARE_USER.'_by':
183 183
 					return [
184 184
 						'actor' => $this->generateUserParameter($parameters['actor']),
185 185
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
186 186
 						'user' => $this->generateUserParameter($parameters['user']),
187 187
 					];
188
-				case self::SUBJECT_SHARE_GROUP . '_you':
189
-				case self::SUBJECT_UNSHARE_GROUP . '_you':
188
+				case self::SUBJECT_SHARE_GROUP.'_you':
189
+				case self::SUBJECT_UNSHARE_GROUP.'_you':
190 190
 					return [
191 191
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
192 192
 						'group' => $this->generateGroupParameter($parameters['group']),
193 193
 					];
194
-				case self::SUBJECT_SHARE_GROUP . '_by':
195
-				case self::SUBJECT_UNSHARE_GROUP . '_by':
194
+				case self::SUBJECT_SHARE_GROUP.'_by':
195
+				case self::SUBJECT_UNSHARE_GROUP.'_by':
196 196
 					return [
197 197
 						'actor' => $this->generateUserParameter($parameters['actor']),
198 198
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
@@ -208,42 +208,42 @@  discard block
 block discarded – undo
208 208
 		// they will get the dead entries in their stream.
209 209
 		switch ($subject) {
210 210
 			case self::SUBJECT_ADD:
211
-			case self::SUBJECT_ADD . '_self':
211
+			case self::SUBJECT_ADD.'_self':
212 212
 			case self::SUBJECT_DELETE:
213
-			case self::SUBJECT_DELETE . '_self':
213
+			case self::SUBJECT_DELETE.'_self':
214 214
 			case self::SUBJECT_UPDATE:
215
-			case self::SUBJECT_UPDATE . '_self':
215
+			case self::SUBJECT_UPDATE.'_self':
216 216
 			case self::SUBJECT_SHARE_USER:
217 217
 			case self::SUBJECT_UNSHARE_USER:
218
-			case self::SUBJECT_UNSHARE_USER . '_self':
218
+			case self::SUBJECT_UNSHARE_USER.'_self':
219 219
 				return [
220 220
 					'actor' => $this->generateUserParameter($parameters[0]),
221
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
221
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
222 222
 				];
223
-			case self::SUBJECT_SHARE_USER . '_you':
224
-			case self::SUBJECT_UNSHARE_USER . '_you':
223
+			case self::SUBJECT_SHARE_USER.'_you':
224
+			case self::SUBJECT_UNSHARE_USER.'_you':
225 225
 				return [
226 226
 					'user' => $this->generateUserParameter($parameters[0]),
227
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
227
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
228 228
 				];
229
-			case self::SUBJECT_SHARE_USER . '_by':
230
-			case self::SUBJECT_UNSHARE_USER . '_by':
229
+			case self::SUBJECT_SHARE_USER.'_by':
230
+			case self::SUBJECT_UNSHARE_USER.'_by':
231 231
 				return [
232 232
 					'user' => $this->generateUserParameter($parameters[0]),
233
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
233
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
234 234
 					'actor' => $this->generateUserParameter($parameters[2]),
235 235
 				];
236
-			case self::SUBJECT_SHARE_GROUP . '_you':
237
-			case self::SUBJECT_UNSHARE_GROUP . '_you':
236
+			case self::SUBJECT_SHARE_GROUP.'_you':
237
+			case self::SUBJECT_UNSHARE_GROUP.'_you':
238 238
 				return [
239 239
 					'group' => $this->generateGroupParameter($parameters[0]),
240
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
240
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
241 241
 				];
242
-			case self::SUBJECT_SHARE_GROUP . '_by':
243
-			case self::SUBJECT_UNSHARE_GROUP . '_by':
242
+			case self::SUBJECT_SHARE_GROUP.'_by':
243
+			case self::SUBJECT_UNSHARE_GROUP.'_by':
244 244
 				return [
245 245
 					'group' => $this->generateGroupParameter($parameters[0]),
246
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
246
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
247 247
 					'actor' => $this->generateUserParameter($parameters[2]),
248 248
 				];
249 249
 		}
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Provider/Event.php 2 patches
Indentation   +133 added lines, -133 removed lines patch added patch discarded remove patch
@@ -31,137 +31,137 @@
 block discarded – undo
31 31
 
32 32
 class Event extends Base {
33 33
 
34
-	const SUBJECT_OBJECT_ADD = 'object_add';
35
-	const SUBJECT_OBJECT_UPDATE = 'object_update';
36
-	const SUBJECT_OBJECT_DELETE = 'object_delete';
37
-
38
-	/** @var IFactory */
39
-	protected $languageFactory;
40
-
41
-	/** @var IL10N */
42
-	protected $l;
43
-
44
-	/** @var IURLGenerator */
45
-	protected $url;
46
-
47
-	/** @var IManager */
48
-	protected $activityManager;
49
-
50
-	/** @var IEventMerger */
51
-	protected $eventMerger;
52
-
53
-	/**
54
-	 * @param IFactory $languageFactory
55
-	 * @param IURLGenerator $url
56
-	 * @param IManager $activityManager
57
-	 * @param IUserManager $userManager
58
-	 * @param IEventMerger $eventMerger
59
-	 */
60
-	public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager, IEventMerger $eventMerger) {
61
-		parent::__construct($userManager);
62
-		$this->languageFactory = $languageFactory;
63
-		$this->url = $url;
64
-		$this->activityManager = $activityManager;
65
-		$this->eventMerger = $eventMerger;
66
-	}
67
-
68
-	/**
69
-	 * @param string $language
70
-	 * @param IEvent $event
71
-	 * @param IEvent|null $previousEvent
72
-	 * @return IEvent
73
-	 * @throws \InvalidArgumentException
74
-	 * @since 11.0.0
75
-	 */
76
-	public function parse($language, IEvent $event, IEvent $previousEvent = null) {
77
-		if ($event->getApp() !== 'dav' || $event->getType() !== 'calendar_event') {
78
-			throw new \InvalidArgumentException();
79
-		}
80
-
81
-		$this->l = $this->languageFactory->get('dav', $language);
82
-
83
-		if ($this->activityManager->getRequirePNG()) {
84
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.png')));
85
-		} else {
86
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg')));
87
-		}
88
-
89
-		if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_event') {
90
-			$subject = $this->l->t('{actor} created event {event} in calendar {calendar}');
91
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_event_self') {
92
-			$subject = $this->l->t('You created event {event} in calendar {calendar}');
93
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_event') {
94
-			$subject = $this->l->t('{actor} deleted event {event} from calendar {calendar}');
95
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_event_self') {
96
-			$subject = $this->l->t('You deleted event {event} from calendar {calendar}');
97
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_event') {
98
-			$subject = $this->l->t('{actor} updated event {event} in calendar {calendar}');
99
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_event_self') {
100
-			$subject = $this->l->t('You updated event {event} in calendar {calendar}');
101
-		} else {
102
-			throw new \InvalidArgumentException();
103
-		}
104
-
105
-		$parsedParameters = $this->getParameters($event);
106
-		$this->setSubjects($event, $subject, $parsedParameters);
107
-
108
-		$event = $this->eventMerger->mergeEvents('event', $event, $previousEvent);
109
-
110
-		return $event;
111
-	}
112
-
113
-	/**
114
-	 * @param IEvent $event
115
-	 * @return array
116
-	 */
117
-	protected function getParameters(IEvent $event) {
118
-		$subject = $event->getSubject();
119
-		$parameters = $event->getSubjectParameters();
120
-
121
-		// Nextcloud 13+
122
-		if (isset($parameters['calendar'])) {
123
-			switch ($subject) {
124
-				case self::SUBJECT_OBJECT_ADD . '_event':
125
-				case self::SUBJECT_OBJECT_DELETE . '_event':
126
-				case self::SUBJECT_OBJECT_UPDATE . '_event':
127
-					return [
128
-						'actor' => $this->generateUserParameter($parameters['actor']),
129
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
130
-						'event' => $this->generateObjectParameter($parameters['object']),
131
-					];
132
-				case self::SUBJECT_OBJECT_ADD . '_event_self':
133
-				case self::SUBJECT_OBJECT_DELETE . '_event_self':
134
-				case self::SUBJECT_OBJECT_UPDATE . '_event_self':
135
-					return [
136
-						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
137
-						'event' => $this->generateObjectParameter($parameters['object']),
138
-					];
139
-			}
140
-		}
141
-
142
-		// Legacy - Do NOT Remove unless necessary
143
-		// Removing this will break parsing of activities that were created on
144
-		// Nextcloud 12, so we should keep this as long as it's acceptable.
145
-		// Otherwise if people upgrade over multiple releases in a short period,
146
-		// they will get the dead entries in their stream.
147
-		switch ($subject) {
148
-			case self::SUBJECT_OBJECT_ADD . '_event':
149
-			case self::SUBJECT_OBJECT_DELETE . '_event':
150
-			case self::SUBJECT_OBJECT_UPDATE . '_event':
151
-				return [
152
-					'actor' => $this->generateUserParameter($parameters[0]),
153
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
154
-					'event' => $this->generateObjectParameter($parameters[2]),
155
-				];
156
-			case self::SUBJECT_OBJECT_ADD . '_event_self':
157
-			case self::SUBJECT_OBJECT_DELETE . '_event_self':
158
-			case self::SUBJECT_OBJECT_UPDATE . '_event_self':
159
-				return [
160
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
161
-					'event' => $this->generateObjectParameter($parameters[2]),
162
-				];
163
-		}
164
-
165
-		throw new \InvalidArgumentException();
166
-	}
34
+    const SUBJECT_OBJECT_ADD = 'object_add';
35
+    const SUBJECT_OBJECT_UPDATE = 'object_update';
36
+    const SUBJECT_OBJECT_DELETE = 'object_delete';
37
+
38
+    /** @var IFactory */
39
+    protected $languageFactory;
40
+
41
+    /** @var IL10N */
42
+    protected $l;
43
+
44
+    /** @var IURLGenerator */
45
+    protected $url;
46
+
47
+    /** @var IManager */
48
+    protected $activityManager;
49
+
50
+    /** @var IEventMerger */
51
+    protected $eventMerger;
52
+
53
+    /**
54
+     * @param IFactory $languageFactory
55
+     * @param IURLGenerator $url
56
+     * @param IManager $activityManager
57
+     * @param IUserManager $userManager
58
+     * @param IEventMerger $eventMerger
59
+     */
60
+    public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager, IEventMerger $eventMerger) {
61
+        parent::__construct($userManager);
62
+        $this->languageFactory = $languageFactory;
63
+        $this->url = $url;
64
+        $this->activityManager = $activityManager;
65
+        $this->eventMerger = $eventMerger;
66
+    }
67
+
68
+    /**
69
+     * @param string $language
70
+     * @param IEvent $event
71
+     * @param IEvent|null $previousEvent
72
+     * @return IEvent
73
+     * @throws \InvalidArgumentException
74
+     * @since 11.0.0
75
+     */
76
+    public function parse($language, IEvent $event, IEvent $previousEvent = null) {
77
+        if ($event->getApp() !== 'dav' || $event->getType() !== 'calendar_event') {
78
+            throw new \InvalidArgumentException();
79
+        }
80
+
81
+        $this->l = $this->languageFactory->get('dav', $language);
82
+
83
+        if ($this->activityManager->getRequirePNG()) {
84
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.png')));
85
+        } else {
86
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg')));
87
+        }
88
+
89
+        if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_event') {
90
+            $subject = $this->l->t('{actor} created event {event} in calendar {calendar}');
91
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_event_self') {
92
+            $subject = $this->l->t('You created event {event} in calendar {calendar}');
93
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_event') {
94
+            $subject = $this->l->t('{actor} deleted event {event} from calendar {calendar}');
95
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_event_self') {
96
+            $subject = $this->l->t('You deleted event {event} from calendar {calendar}');
97
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_event') {
98
+            $subject = $this->l->t('{actor} updated event {event} in calendar {calendar}');
99
+        } else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_event_self') {
100
+            $subject = $this->l->t('You updated event {event} in calendar {calendar}');
101
+        } else {
102
+            throw new \InvalidArgumentException();
103
+        }
104
+
105
+        $parsedParameters = $this->getParameters($event);
106
+        $this->setSubjects($event, $subject, $parsedParameters);
107
+
108
+        $event = $this->eventMerger->mergeEvents('event', $event, $previousEvent);
109
+
110
+        return $event;
111
+    }
112
+
113
+    /**
114
+     * @param IEvent $event
115
+     * @return array
116
+     */
117
+    protected function getParameters(IEvent $event) {
118
+        $subject = $event->getSubject();
119
+        $parameters = $event->getSubjectParameters();
120
+
121
+        // Nextcloud 13+
122
+        if (isset($parameters['calendar'])) {
123
+            switch ($subject) {
124
+                case self::SUBJECT_OBJECT_ADD . '_event':
125
+                case self::SUBJECT_OBJECT_DELETE . '_event':
126
+                case self::SUBJECT_OBJECT_UPDATE . '_event':
127
+                    return [
128
+                        'actor' => $this->generateUserParameter($parameters['actor']),
129
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
130
+                        'event' => $this->generateObjectParameter($parameters['object']),
131
+                    ];
132
+                case self::SUBJECT_OBJECT_ADD . '_event_self':
133
+                case self::SUBJECT_OBJECT_DELETE . '_event_self':
134
+                case self::SUBJECT_OBJECT_UPDATE . '_event_self':
135
+                    return [
136
+                        'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
137
+                        'event' => $this->generateObjectParameter($parameters['object']),
138
+                    ];
139
+            }
140
+        }
141
+
142
+        // Legacy - Do NOT Remove unless necessary
143
+        // Removing this will break parsing of activities that were created on
144
+        // Nextcloud 12, so we should keep this as long as it's acceptable.
145
+        // Otherwise if people upgrade over multiple releases in a short period,
146
+        // they will get the dead entries in their stream.
147
+        switch ($subject) {
148
+            case self::SUBJECT_OBJECT_ADD . '_event':
149
+            case self::SUBJECT_OBJECT_DELETE . '_event':
150
+            case self::SUBJECT_OBJECT_UPDATE . '_event':
151
+                return [
152
+                    'actor' => $this->generateUserParameter($parameters[0]),
153
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
154
+                    'event' => $this->generateObjectParameter($parameters[2]),
155
+                ];
156
+            case self::SUBJECT_OBJECT_ADD . '_event_self':
157
+            case self::SUBJECT_OBJECT_DELETE . '_event_self':
158
+            case self::SUBJECT_OBJECT_UPDATE . '_event_self':
159
+                return [
160
+                    'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
161
+                    'event' => $this->generateObjectParameter($parameters[2]),
162
+                ];
163
+        }
164
+
165
+        throw new \InvalidArgumentException();
166
+    }
167 167
 }
Please login to merge, or discard this patch.
Spacing   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -86,17 +86,17 @@  discard block
 block discarded – undo
86 86
 			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg')));
87 87
 		}
88 88
 
89
-		if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_event') {
89
+		if ($event->getSubject() === self::SUBJECT_OBJECT_ADD.'_event') {
90 90
 			$subject = $this->l->t('{actor} created event {event} in calendar {calendar}');
91
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD . '_event_self') {
91
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_ADD.'_event_self') {
92 92
 			$subject = $this->l->t('You created event {event} in calendar {calendar}');
93
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_event') {
93
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE.'_event') {
94 94
 			$subject = $this->l->t('{actor} deleted event {event} from calendar {calendar}');
95
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE . '_event_self') {
95
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_DELETE.'_event_self') {
96 96
 			$subject = $this->l->t('You deleted event {event} from calendar {calendar}');
97
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_event') {
97
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_event') {
98 98
 			$subject = $this->l->t('{actor} updated event {event} in calendar {calendar}');
99
-		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_event_self') {
99
+		} else if ($event->getSubject() === self::SUBJECT_OBJECT_UPDATE.'_event_self') {
100 100
 			$subject = $this->l->t('You updated event {event} in calendar {calendar}');
101 101
 		} else {
102 102
 			throw new \InvalidArgumentException();
@@ -121,17 +121,17 @@  discard block
 block discarded – undo
121 121
 		// Nextcloud 13+
122 122
 		if (isset($parameters['calendar'])) {
123 123
 			switch ($subject) {
124
-				case self::SUBJECT_OBJECT_ADD . '_event':
125
-				case self::SUBJECT_OBJECT_DELETE . '_event':
126
-				case self::SUBJECT_OBJECT_UPDATE . '_event':
124
+				case self::SUBJECT_OBJECT_ADD.'_event':
125
+				case self::SUBJECT_OBJECT_DELETE.'_event':
126
+				case self::SUBJECT_OBJECT_UPDATE.'_event':
127 127
 					return [
128 128
 						'actor' => $this->generateUserParameter($parameters['actor']),
129 129
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
130 130
 						'event' => $this->generateObjectParameter($parameters['object']),
131 131
 					];
132
-				case self::SUBJECT_OBJECT_ADD . '_event_self':
133
-				case self::SUBJECT_OBJECT_DELETE . '_event_self':
134
-				case self::SUBJECT_OBJECT_UPDATE . '_event_self':
132
+				case self::SUBJECT_OBJECT_ADD.'_event_self':
133
+				case self::SUBJECT_OBJECT_DELETE.'_event_self':
134
+				case self::SUBJECT_OBJECT_UPDATE.'_event_self':
135 135
 					return [
136 136
 						'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
137 137
 						'event' => $this->generateObjectParameter($parameters['object']),
@@ -145,19 +145,19 @@  discard block
 block discarded – undo
145 145
 		// Otherwise if people upgrade over multiple releases in a short period,
146 146
 		// they will get the dead entries in their stream.
147 147
 		switch ($subject) {
148
-			case self::SUBJECT_OBJECT_ADD . '_event':
149
-			case self::SUBJECT_OBJECT_DELETE . '_event':
150
-			case self::SUBJECT_OBJECT_UPDATE . '_event':
148
+			case self::SUBJECT_OBJECT_ADD.'_event':
149
+			case self::SUBJECT_OBJECT_DELETE.'_event':
150
+			case self::SUBJECT_OBJECT_UPDATE.'_event':
151 151
 				return [
152 152
 					'actor' => $this->generateUserParameter($parameters[0]),
153
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
153
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
154 154
 					'event' => $this->generateObjectParameter($parameters[2]),
155 155
 				];
156
-			case self::SUBJECT_OBJECT_ADD . '_event_self':
157
-			case self::SUBJECT_OBJECT_DELETE . '_event_self':
158
-			case self::SUBJECT_OBJECT_UPDATE . '_event_self':
156
+			case self::SUBJECT_OBJECT_ADD.'_event_self':
157
+			case self::SUBJECT_OBJECT_DELETE.'_event_self':
158
+			case self::SUBJECT_OBJECT_UPDATE.'_event_self':
159 159
 				return [
160
-					'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
160
+					'calendar' => $this->generateLegacyCalendarParameter((int) $event->getObjectId(), $parameters[1]),
161 161
 					'event' => $this->generateObjectParameter($parameters[2]),
162 162
 				];
163 163
 		}
Please login to merge, or discard this patch.