Skip to content

Commit 20499c1

Browse files
committed
Add activity for display name change
Signed-off-by: Morris Jobke <[email protected]>
1 parent d3ab26c commit 20499c1

File tree

3 files changed

+51
-5
lines changed

3 files changed

+51
-5
lines changed

apps/settings/lib/Activity/Provider.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ class Provider implements IProvider {
4646
public const EMAIL_CHANGED_BY = 'email_changed_by';
4747
public const EMAIL_CHANGED_SELF = 'email_changed_self';
4848
public const EMAIL_CHANGED = 'email_changed';
49+
public const DISPLAY_NAME_CHANGED_BY = 'displayname_changed_by';
50+
public const DISPLAY_NAME_CHANGED_SELF = 'displayname_changed_self';
51+
public const DISPLAY_NAME_CHANGED = 'displayname_changed';
4952
public const APP_TOKEN_CREATED = 'app_token_created';
5053
public const APP_TOKEN_DELETED = 'app_token_deleted';
5154
public const APP_TOKEN_RENAMED = 'app_token_renamed';
@@ -115,6 +118,12 @@ public function parse($language, IEvent $event, IEvent $previousEvent = null): I
115118
$subject = $this->l->t('You changed your email address');
116119
} elseif ($event->getSubject() === self::EMAIL_CHANGED) {
117120
$subject = $this->l->t('Your email address was changed by an administrator');
121+
} elseif ($event->getSubject() === self::DISPLAY_NAME_CHANGED_BY) {
122+
$subject = $this->l->t('{actor} changed your display name');
123+
} elseif ($event->getSubject() === self::DISPLAY_NAME_CHANGED_SELF) {
124+
$subject = $this->l->t('You changed your display name');
125+
} elseif ($event->getSubject() === self::DISPLAY_NAME_CHANGED) {
126+
$subject = $this->l->t('Your display name was changed by an administrator');
118127
} elseif ($event->getSubject() === self::APP_TOKEN_CREATED) {
119128
$subject = $this->l->t('You created app password "{token}"');
120129
} elseif ($event->getSubject() === self::APP_TOKEN_DELETED) {
@@ -150,12 +159,18 @@ protected function getParameters(IEvent $event): array {
150159
case self::PASSWORD_RESET_SELF:
151160
case self::EMAIL_CHANGED_SELF:
152161
case self::EMAIL_CHANGED:
162+
case self::DISPLAY_NAME_CHANGED_SELF:
163+
case self::DISPLAY_NAME_CHANGED:
153164
return [];
154165
case self::PASSWORD_CHANGED_BY:
155166
case self::EMAIL_CHANGED_BY:
156167
return [
157168
'actor' => $this->generateUserParameter($parameters[0]),
158169
];
170+
case self::DISPLAY_NAME_CHANGED_BY:
171+
return [
172+
'actor' => $this->generateUserParameter($parameters['actor']),
173+
];
159174
case self::APP_TOKEN_CREATED:
160175
case self::APP_TOKEN_DELETED:
161176
case self::APP_TOKEN_FILESYSTEM_GRANTED:

apps/settings/lib/AppInfo/Application.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,16 @@ public function onChangePassword(array $parameters) {
198198
* @throws \OCP\AppFramework\QueryException
199199
*/
200200
public function onChangeInfo(array $parameters) {
201-
if ($parameters['feature'] !== 'eMailAddress') {
202-
return;
201+
if ($parameters['feature'] === 'eMailAddress') {
202+
/** @var Hooks $hooks */
203+
$hooks = $this->getContainer()->query(Hooks::class);
204+
$hooks->onChangeEmail($parameters['user'], $parameters['old_value']);
203205
}
204206

205-
/** @var Hooks $hooks */
206-
$hooks = $this->getContainer()->query(Hooks::class);
207-
$hooks->onChangeEmail($parameters['user'], $parameters['old_value']);
207+
if ($parameters['feature'] === 'displayName') {
208+
/** @var Hooks $hooks */
209+
$hooks = $this->getContainer()->query(Hooks::class);
210+
$hooks->onChangeDisplayName($parameters['user'], $parameters['old_value']);
211+
}
208212
}
209213
}

apps/settings/lib/Hooks.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,33 @@ public function onChangeEmail(IUser $user, $oldMailAddress) {
215215
}
216216
}
217217

218+
public function onChangeDisplayName(IUser $user, string $oldDisplayName) {
219+
if ($oldDisplayName === $user->getDisplayName() ||
220+
$user->getLastLogin() === 0) {
221+
// display name didn't really change or user didn't login,
222+
// so don't create activities.
223+
return;
224+
}
225+
226+
$event = $this->activityManager->generateEvent();
227+
$event->setApp('settings')
228+
->setType('personal_settings')
229+
->setAffectedUser($user->getUID());
230+
231+
$actor = $this->userSession->getUser();
232+
if ($actor instanceof IUser) {
233+
$subject = Provider::DISPLAY_NAME_CHANGED_SELF;
234+
if ($actor->getUID() !== $user->getUID()) {
235+
$subject = Provider::DISPLAY_NAME_CHANGED_BY;
236+
}
237+
$event->setAuthor($actor->getUID())
238+
->setSubject($subject, ['actor' => $actor->getUID()]);
239+
} else {
240+
$event->setSubject(Provider::DISPLAY_NAME_CHANGED);
241+
}
242+
$this->activityManager->publish($event);
243+
}
244+
218245
/**
219246
* @param IGroup $group
220247
* @param IUser $user

0 commit comments

Comments
 (0)