Completed
Pull Request — master (#4969)
by Joas
14:50
created
apps/files/lib/Activity/Provider.php 1 patch
Indentation   +298 added lines, -298 removed lines patch added patch discarded remove patch
@@ -33,302 +33,302 @@
 block discarded – undo
33 33
 
34 34
 class Provider implements IProvider {
35 35
 
36
-	/** @var IFactory */
37
-	protected $languageFactory;
38
-
39
-	/** @var IL10N */
40
-	protected $l;
41
-	/** @var IL10N */
42
-	protected $activityLang;
43
-
44
-	/** @var IURLGenerator */
45
-	protected $url;
46
-
47
-	/** @var IManager */
48
-	protected $activityManager;
49
-
50
-	/** @var IUserManager */
51
-	protected $userManager;
52
-
53
-	/** @var IEventMerger */
54
-	protected $eventMerger;
55
-
56
-	/** @var string[] cached displayNames - key is the UID and value the displayname */
57
-	protected $displayNames = [];
58
-
59
-	/**
60
-	 * @param IFactory $languageFactory
61
-	 * @param IURLGenerator $url
62
-	 * @param IManager $activityManager
63
-	 * @param IUserManager $userManager
64
-	 * @param IEventMerger $eventMerger
65
-	 */
66
-	public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager, IEventMerger $eventMerger) {
67
-		$this->languageFactory = $languageFactory;
68
-		$this->url = $url;
69
-		$this->activityManager = $activityManager;
70
-		$this->userManager = $userManager;
71
-		$this->eventMerger = $eventMerger;
72
-	}
73
-
74
-	/**
75
-	 * @param string $language
76
-	 * @param IEvent $event
77
-	 * @param IEvent|null $previousEvent
78
-	 * @return IEvent
79
-	 * @throws \InvalidArgumentException
80
-	 * @since 11.0.0
81
-	 */
82
-	public function parse($language, IEvent $event, IEvent $previousEvent = null) {
83
-		if ($event->getApp() !== 'files') {
84
-			throw new \InvalidArgumentException();
85
-		}
86
-
87
-		$this->l = $this->languageFactory->get('files', $language);
88
-		$this->activityLang = $this->languageFactory->get('activity', $language);
89
-
90
-		if ($this->activityManager->isFormattingFilteredObject()) {
91
-			try {
92
-				return $this->parseShortVersion($event, $previousEvent);
93
-			} catch (\InvalidArgumentException $e) {
94
-				// Ignore and simply use the long version...
95
-			}
96
-		}
97
-
98
-		return $this->parseLongVersion($event, $previousEvent);
99
-	}
100
-
101
-	/**
102
-	 * @param IEvent $event
103
-	 * @param IEvent|null $previousEvent
104
-	 * @return IEvent
105
-	 * @throws \InvalidArgumentException
106
-	 * @since 11.0.0
107
-	 */
108
-	public function parseShortVersion(IEvent $event, IEvent $previousEvent = null) {
109
-		$parsedParameters = $this->getParameters($event);
110
-
111
-		if ($event->getSubject() === 'created_by') {
112
-			$subject = $this->l->t('Created by {user}');
113
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
114
-		} else if ($event->getSubject() === 'changed_by') {
115
-			$subject = $this->l->t('Changed by {user}');
116
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
117
-		} else if ($event->getSubject() === 'deleted_by') {
118
-			$subject = $this->l->t('Deleted by {user}');
119
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'delete-color.svg')));
120
-		} else if ($event->getSubject() === 'restored_by') {
121
-			$subject = $this->l->t('Restored by {user}');
122
-		} else if ($event->getSubject() === 'renamed_by') {
123
-			$subject = $this->l->t('Renamed by {user}');
124
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
125
-		} else if ($event->getSubject() === 'moved_by') {
126
-			$subject = $this->l->t('Moved by {user}');
127
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
128
-		} else {
129
-			throw new \InvalidArgumentException();
130
-		}
131
-
132
-		if (!isset($parsedParameters['user'])) {
133
-			// External user via public link share
134
-			$subject = str_replace('{user}', $this->activityLang->t('"remote user"'), $subject);
135
-		}
136
-
137
-		$this->setSubjects($event, $subject, $parsedParameters);
138
-
139
-		return $this->eventMerger->mergeEvents('user', $event, $previousEvent);
140
-	}
141
-
142
-	/**
143
-	 * @param IEvent $event
144
-	 * @param IEvent|null $previousEvent
145
-	 * @return IEvent
146
-	 * @throws \InvalidArgumentException
147
-	 * @since 11.0.0
148
-	 */
149
-	public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) {
150
-		$parsedParameters = $this->getParameters($event);
151
-
152
-		if ($event->getSubject() === 'created_self') {
153
-			$subject = $this->l->t('You created {file}');
154
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
155
-		} else if ($event->getSubject() === 'created_by') {
156
-			$subject = $this->l->t('{user} created {file}');
157
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
158
-		} else if ($event->getSubject() === 'created_public') {
159
-			$subject = $this->l->t('{file} was created in a public folder');
160
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
161
-		} else if ($event->getSubject() === 'changed_self') {
162
-			$subject = $this->l->t('You changed {file}');
163
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
164
-		} else if ($event->getSubject() === 'changed_by') {
165
-			$subject = $this->l->t('{user} changed {file}');
166
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
167
-		} else if ($event->getSubject() === 'deleted_self') {
168
-			$subject = $this->l->t('You deleted {file}');
169
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'delete-color.svg')));
170
-		} else if ($event->getSubject() === 'deleted_by') {
171
-			$subject = $this->l->t('{user} deleted {file}');
172
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'delete-color.svg')));
173
-		} else if ($event->getSubject() === 'restored_self') {
174
-			$subject = $this->l->t('You restored {file}');
175
-		} else if ($event->getSubject() === 'restored_by') {
176
-			$subject = $this->l->t('{user} restored {file}');
177
-		} else if ($event->getSubject() === 'renamed_self') {
178
-			$subject = $this->l->t('You renamed {oldfile} to {newfile}');
179
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
180
-		} else if ($event->getSubject() === 'renamed_by') {
181
-			$subject = $this->l->t('{user} renamed {oldfile} to {newfile}');
182
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
183
-		} else if ($event->getSubject() === 'moved_self') {
184
-			$subject = $this->l->t('You moved {oldfile} to {newfile}');
185
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
186
-		} else if ($event->getSubject() === 'moved_by') {
187
-			$subject = $this->l->t('{user} moved {oldfile} to {newfile}');
188
-			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
189
-		} else {
190
-			throw new \InvalidArgumentException();
191
-		}
192
-
193
-		if (!isset($parsedParameters['user'])) {
194
-			// External user via public link share
195
-			$subject = str_replace('{user}', $this->activityLang->t('"remote user"'), $subject);
196
-		}
197
-
198
-		$this->setSubjects($event, $subject, $parsedParameters);
199
-
200
-		$event = $this->eventMerger->mergeEvents('file', $event, $previousEvent);
201
-
202
-		if ($event->getChildEvent() === null) {
203
-			// Couldn't group by file, maybe we can group by user
204
-			$event = $this->eventMerger->mergeEvents('user', $event, $previousEvent);
205
-		}
206
-
207
-		return $event;
208
-	}
209
-
210
-	protected function setSubjects(IEvent $event, $subject, array $parameters) {
211
-		$placeholders = $replacements = [];
212
-		foreach ($parameters as $placeholder => $parameter) {
213
-			$placeholders[] = '{' . $placeholder . '}';
214
-			if ($parameter['type'] === 'file') {
215
-				$replacements[] = $parameter['path'];
216
-			} else {
217
-				$replacements[] = $parameter['name'];
218
-			}
219
-		}
220
-
221
-		$event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
222
-			->setRichSubject($subject, $parameters);
223
-	}
224
-
225
-	/**
226
-	 * @param IEvent $event
227
-	 * @return array
228
-	 * @throws \InvalidArgumentException
229
-	 */
230
-	protected function getParameters(IEvent $event) {
231
-		$parameters = $event->getSubjectParameters();
232
-		switch ($event->getSubject()) {
233
-			case 'created_self':
234
-			case 'created_public':
235
-			case 'changed_self':
236
-			case 'deleted_self':
237
-			case 'restored_self':
238
-				return [
239
-					'file' => $this->getFile($parameters[0], $event),
240
-				];
241
-			case 'created_by':
242
-			case 'changed_by':
243
-			case 'deleted_by':
244
-			case 'restored_by':
245
-				if ($parameters[1] === '') {
246
-					// External user via public link share
247
-					return [
248
-						'file' => $this->getFile($parameters[0], $event),
249
-					];
250
-				}
251
-				return [
252
-					'file' => $this->getFile($parameters[0], $event),
253
-					'user' => $this->getUser($parameters[1]),
254
-				];
255
-			case 'renamed_self':
256
-			case 'moved_self':
257
-				return [
258
-					'newfile' => $this->getFile($parameters[0]),
259
-					'oldfile' => $this->getFile($parameters[1]),
260
-				];
261
-			case 'renamed_by':
262
-			case 'moved_by':
263
-				if ($parameters[1] === '') {
264
-					// External user via public link share
265
-					return [
266
-						'newfile' => $this->getFile($parameters[0]),
267
-						'oldfile' => $this->getFile($parameters[2]),
268
-					];
269
-				}
270
-				return [
271
-					'newfile' => $this->getFile($parameters[0]),
272
-					'user' => $this->getUser($parameters[1]),
273
-					'oldfile' => $this->getFile($parameters[2]),
274
-				];
275
-		}
276
-		return [];
277
-	}
278
-
279
-	/**
280
-	 * @param array|string $parameter
281
-	 * @param IEvent|null $event
282
-	 * @return array
283
-	 * @throws \InvalidArgumentException
284
-	 */
285
-	protected function getFile($parameter, IEvent $event = null) {
286
-		if (is_array($parameter)) {
287
-			$path = reset($parameter);
288
-			$id = (string) key($parameter);
289
-		} else if ($event !== null) {
290
-			// Legacy from before ownCloud 8.2
291
-			$path = $parameter;
292
-			$id = $event->getObjectId();
293
-		} else {
294
-			throw new \InvalidArgumentException('Could not generate file parameter');
295
-		}
296
-
297
-		return [
298
-			'type' => 'file',
299
-			'id' => $id,
300
-			'name' => basename($path),
301
-			'path' => trim($path, '/'),
302
-			'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
303
-		];
304
-	}
305
-
306
-	/**
307
-	 * @param string $uid
308
-	 * @return array
309
-	 */
310
-	protected function getUser($uid) {
311
-		if (!isset($this->displayNames[$uid])) {
312
-			$this->displayNames[$uid] = $this->getDisplayName($uid);
313
-		}
314
-
315
-		return [
316
-			'type' => 'user',
317
-			'id' => $uid,
318
-			'name' => $this->displayNames[$uid],
319
-		];
320
-	}
321
-
322
-	/**
323
-	 * @param string $uid
324
-	 * @return string
325
-	 */
326
-	protected function getDisplayName($uid) {
327
-		$user = $this->userManager->get($uid);
328
-		if ($user instanceof IUser) {
329
-			return $user->getDisplayName();
330
-		} else {
331
-			return $uid;
332
-		}
333
-	}
36
+    /** @var IFactory */
37
+    protected $languageFactory;
38
+
39
+    /** @var IL10N */
40
+    protected $l;
41
+    /** @var IL10N */
42
+    protected $activityLang;
43
+
44
+    /** @var IURLGenerator */
45
+    protected $url;
46
+
47
+    /** @var IManager */
48
+    protected $activityManager;
49
+
50
+    /** @var IUserManager */
51
+    protected $userManager;
52
+
53
+    /** @var IEventMerger */
54
+    protected $eventMerger;
55
+
56
+    /** @var string[] cached displayNames - key is the UID and value the displayname */
57
+    protected $displayNames = [];
58
+
59
+    /**
60
+     * @param IFactory $languageFactory
61
+     * @param IURLGenerator $url
62
+     * @param IManager $activityManager
63
+     * @param IUserManager $userManager
64
+     * @param IEventMerger $eventMerger
65
+     */
66
+    public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager, IEventMerger $eventMerger) {
67
+        $this->languageFactory = $languageFactory;
68
+        $this->url = $url;
69
+        $this->activityManager = $activityManager;
70
+        $this->userManager = $userManager;
71
+        $this->eventMerger = $eventMerger;
72
+    }
73
+
74
+    /**
75
+     * @param string $language
76
+     * @param IEvent $event
77
+     * @param IEvent|null $previousEvent
78
+     * @return IEvent
79
+     * @throws \InvalidArgumentException
80
+     * @since 11.0.0
81
+     */
82
+    public function parse($language, IEvent $event, IEvent $previousEvent = null) {
83
+        if ($event->getApp() !== 'files') {
84
+            throw new \InvalidArgumentException();
85
+        }
86
+
87
+        $this->l = $this->languageFactory->get('files', $language);
88
+        $this->activityLang = $this->languageFactory->get('activity', $language);
89
+
90
+        if ($this->activityManager->isFormattingFilteredObject()) {
91
+            try {
92
+                return $this->parseShortVersion($event, $previousEvent);
93
+            } catch (\InvalidArgumentException $e) {
94
+                // Ignore and simply use the long version...
95
+            }
96
+        }
97
+
98
+        return $this->parseLongVersion($event, $previousEvent);
99
+    }
100
+
101
+    /**
102
+     * @param IEvent $event
103
+     * @param IEvent|null $previousEvent
104
+     * @return IEvent
105
+     * @throws \InvalidArgumentException
106
+     * @since 11.0.0
107
+     */
108
+    public function parseShortVersion(IEvent $event, IEvent $previousEvent = null) {
109
+        $parsedParameters = $this->getParameters($event);
110
+
111
+        if ($event->getSubject() === 'created_by') {
112
+            $subject = $this->l->t('Created by {user}');
113
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
114
+        } else if ($event->getSubject() === 'changed_by') {
115
+            $subject = $this->l->t('Changed by {user}');
116
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
117
+        } else if ($event->getSubject() === 'deleted_by') {
118
+            $subject = $this->l->t('Deleted by {user}');
119
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'delete-color.svg')));
120
+        } else if ($event->getSubject() === 'restored_by') {
121
+            $subject = $this->l->t('Restored by {user}');
122
+        } else if ($event->getSubject() === 'renamed_by') {
123
+            $subject = $this->l->t('Renamed by {user}');
124
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
125
+        } else if ($event->getSubject() === 'moved_by') {
126
+            $subject = $this->l->t('Moved by {user}');
127
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
128
+        } else {
129
+            throw new \InvalidArgumentException();
130
+        }
131
+
132
+        if (!isset($parsedParameters['user'])) {
133
+            // External user via public link share
134
+            $subject = str_replace('{user}', $this->activityLang->t('"remote user"'), $subject);
135
+        }
136
+
137
+        $this->setSubjects($event, $subject, $parsedParameters);
138
+
139
+        return $this->eventMerger->mergeEvents('user', $event, $previousEvent);
140
+    }
141
+
142
+    /**
143
+     * @param IEvent $event
144
+     * @param IEvent|null $previousEvent
145
+     * @return IEvent
146
+     * @throws \InvalidArgumentException
147
+     * @since 11.0.0
148
+     */
149
+    public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) {
150
+        $parsedParameters = $this->getParameters($event);
151
+
152
+        if ($event->getSubject() === 'created_self') {
153
+            $subject = $this->l->t('You created {file}');
154
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
155
+        } else if ($event->getSubject() === 'created_by') {
156
+            $subject = $this->l->t('{user} created {file}');
157
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
158
+        } else if ($event->getSubject() === 'created_public') {
159
+            $subject = $this->l->t('{file} was created in a public folder');
160
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'add-color.svg')));
161
+        } else if ($event->getSubject() === 'changed_self') {
162
+            $subject = $this->l->t('You changed {file}');
163
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
164
+        } else if ($event->getSubject() === 'changed_by') {
165
+            $subject = $this->l->t('{user} changed {file}');
166
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
167
+        } else if ($event->getSubject() === 'deleted_self') {
168
+            $subject = $this->l->t('You deleted {file}');
169
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'delete-color.svg')));
170
+        } else if ($event->getSubject() === 'deleted_by') {
171
+            $subject = $this->l->t('{user} deleted {file}');
172
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'delete-color.svg')));
173
+        } else if ($event->getSubject() === 'restored_self') {
174
+            $subject = $this->l->t('You restored {file}');
175
+        } else if ($event->getSubject() === 'restored_by') {
176
+            $subject = $this->l->t('{user} restored {file}');
177
+        } else if ($event->getSubject() === 'renamed_self') {
178
+            $subject = $this->l->t('You renamed {oldfile} to {newfile}');
179
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
180
+        } else if ($event->getSubject() === 'renamed_by') {
181
+            $subject = $this->l->t('{user} renamed {oldfile} to {newfile}');
182
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
183
+        } else if ($event->getSubject() === 'moved_self') {
184
+            $subject = $this->l->t('You moved {oldfile} to {newfile}');
185
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
186
+        } else if ($event->getSubject() === 'moved_by') {
187
+            $subject = $this->l->t('{user} moved {oldfile} to {newfile}');
188
+            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files', 'change.svg')));
189
+        } else {
190
+            throw new \InvalidArgumentException();
191
+        }
192
+
193
+        if (!isset($parsedParameters['user'])) {
194
+            // External user via public link share
195
+            $subject = str_replace('{user}', $this->activityLang->t('"remote user"'), $subject);
196
+        }
197
+
198
+        $this->setSubjects($event, $subject, $parsedParameters);
199
+
200
+        $event = $this->eventMerger->mergeEvents('file', $event, $previousEvent);
201
+
202
+        if ($event->getChildEvent() === null) {
203
+            // Couldn't group by file, maybe we can group by user
204
+            $event = $this->eventMerger->mergeEvents('user', $event, $previousEvent);
205
+        }
206
+
207
+        return $event;
208
+    }
209
+
210
+    protected function setSubjects(IEvent $event, $subject, array $parameters) {
211
+        $placeholders = $replacements = [];
212
+        foreach ($parameters as $placeholder => $parameter) {
213
+            $placeholders[] = '{' . $placeholder . '}';
214
+            if ($parameter['type'] === 'file') {
215
+                $replacements[] = $parameter['path'];
216
+            } else {
217
+                $replacements[] = $parameter['name'];
218
+            }
219
+        }
220
+
221
+        $event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
222
+            ->setRichSubject($subject, $parameters);
223
+    }
224
+
225
+    /**
226
+     * @param IEvent $event
227
+     * @return array
228
+     * @throws \InvalidArgumentException
229
+     */
230
+    protected function getParameters(IEvent $event) {
231
+        $parameters = $event->getSubjectParameters();
232
+        switch ($event->getSubject()) {
233
+            case 'created_self':
234
+            case 'created_public':
235
+            case 'changed_self':
236
+            case 'deleted_self':
237
+            case 'restored_self':
238
+                return [
239
+                    'file' => $this->getFile($parameters[0], $event),
240
+                ];
241
+            case 'created_by':
242
+            case 'changed_by':
243
+            case 'deleted_by':
244
+            case 'restored_by':
245
+                if ($parameters[1] === '') {
246
+                    // External user via public link share
247
+                    return [
248
+                        'file' => $this->getFile($parameters[0], $event),
249
+                    ];
250
+                }
251
+                return [
252
+                    'file' => $this->getFile($parameters[0], $event),
253
+                    'user' => $this->getUser($parameters[1]),
254
+                ];
255
+            case 'renamed_self':
256
+            case 'moved_self':
257
+                return [
258
+                    'newfile' => $this->getFile($parameters[0]),
259
+                    'oldfile' => $this->getFile($parameters[1]),
260
+                ];
261
+            case 'renamed_by':
262
+            case 'moved_by':
263
+                if ($parameters[1] === '') {
264
+                    // External user via public link share
265
+                    return [
266
+                        'newfile' => $this->getFile($parameters[0]),
267
+                        'oldfile' => $this->getFile($parameters[2]),
268
+                    ];
269
+                }
270
+                return [
271
+                    'newfile' => $this->getFile($parameters[0]),
272
+                    'user' => $this->getUser($parameters[1]),
273
+                    'oldfile' => $this->getFile($parameters[2]),
274
+                ];
275
+        }
276
+        return [];
277
+    }
278
+
279
+    /**
280
+     * @param array|string $parameter
281
+     * @param IEvent|null $event
282
+     * @return array
283
+     * @throws \InvalidArgumentException
284
+     */
285
+    protected function getFile($parameter, IEvent $event = null) {
286
+        if (is_array($parameter)) {
287
+            $path = reset($parameter);
288
+            $id = (string) key($parameter);
289
+        } else if ($event !== null) {
290
+            // Legacy from before ownCloud 8.2
291
+            $path = $parameter;
292
+            $id = $event->getObjectId();
293
+        } else {
294
+            throw new \InvalidArgumentException('Could not generate file parameter');
295
+        }
296
+
297
+        return [
298
+            'type' => 'file',
299
+            'id' => $id,
300
+            'name' => basename($path),
301
+            'path' => trim($path, '/'),
302
+            'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
303
+        ];
304
+    }
305
+
306
+    /**
307
+     * @param string $uid
308
+     * @return array
309
+     */
310
+    protected function getUser($uid) {
311
+        if (!isset($this->displayNames[$uid])) {
312
+            $this->displayNames[$uid] = $this->getDisplayName($uid);
313
+        }
314
+
315
+        return [
316
+            'type' => 'user',
317
+            'id' => $uid,
318
+            'name' => $this->displayNames[$uid],
319
+        ];
320
+    }
321
+
322
+    /**
323
+     * @param string $uid
324
+     * @return string
325
+     */
326
+    protected function getDisplayName($uid) {
327
+        $user = $this->userManager->get($uid);
328
+        if ($user instanceof IUser) {
329
+            return $user->getDisplayName();
330
+        } else {
331
+            return $uid;
332
+        }
333
+    }
334 334
 }
Please login to merge, or discard this patch.