diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2017-12-13 20:21:00 +0100 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2017-12-19 18:49:26 +0100 |
commit | a4ca92f29a24de2868c7149c2cff8550bc0ca55e (patch) | |
tree | f4c423bd022417c1e034e5b30caffa92f67b29f4 | |
parent | 6371b765984a8dc9201f37ca89ce2dcf5d6fb78c (diff) | |
download | nextcloud-server-a4ca92f29a24de2868c7149c2cff8550bc0ca55e.tar.gz nextcloud-server-a4ca92f29a24de2868c7149c2cff8550bc0ca55e.zip |
Remove generated avatar on displayname change
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
-rw-r--r-- | lib/private/Avatar.php | 14 | ||||
-rw-r--r-- | lib/private/Server.php | 19 | ||||
-rw-r--r-- | lib/public/IAvatar.php | 6 |
3 files changed, 38 insertions, 1 deletions
diff --git a/lib/private/Avatar.php b/lib/private/Avatar.php index 5893daa1804..3b1aac4b514 100644 --- a/lib/private/Avatar.php +++ b/lib/private/Avatar.php @@ -393,4 +393,18 @@ class Avatar implements IAvatar { return array(round($r * 255), round($g * 255), round($b * 255)); } + public function userChanged($feature, $oldValue, $newValue) { + // We only change the avatar on display name changes + if ($feature !== 'displayName') { + return; + } + + // If the avatar is not generated (so an uploaded image) we skip this + if (!$this->folder->fileExists('generated')) { + return; + } + + $this->remove(); + } + } diff --git a/lib/private/Server.php b/lib/private/Server.php index 44f5ea80cb7..4a851d67226 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -394,9 +394,10 @@ class Server extends ServerContainer implements IServerContainer { $userSession->listen('\OC\User', 'logout', function () { \OC_Hook::emit('OC_User', 'logout', array()); }); - $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value, $oldValue) { + $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value, $oldValue) use ($dispatcher) { /** @var $user \OC\User\User */ \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value, 'old_value' => $oldValue)); + $dispatcher->dispatch('OCP\IUser::changeUser', new GenericEvent($user, ['feature' => $feature, 'oldValue' => $oldValue, 'value' => $value])); }); return $userSession; }); @@ -1175,6 +1176,22 @@ class Server extends ServerContainer implements IServerContainer { $logger->info('Could not cleanup avatar of ' . $user->getUID()); } }); + + $dispatcher->addListener('OCP\IUser::changeUser', function (GenericEvent $e) { + $manager = $this->getAvatarManager(); + /** @var IUser $user */ + $user = $e->getSubject(); + $feature = $e->getArgument('feature'); + $oldValue = $e->getArgument('oldValue'); + $value = $e->getArgument('value'); + + try { + $avatar = $manager->getAvatar($user->getUID()); + $avatar->userChanged($feature, $oldValue, $value); + } catch (NotFoundException $e) { + // no avatar to remove + } + }); } /** diff --git a/lib/public/IAvatar.php b/lib/public/IAvatar.php index 369cafa00c1..a6731b63be9 100644 --- a/lib/public/IAvatar.php +++ b/lib/public/IAvatar.php @@ -77,4 +77,10 @@ interface IAvatar { * @since 9.0.0 */ public function getFile($size); + + /** + * Handle a changed user + * @since 13.0.0 + */ + public function userChanged($feature, $oldValue, $newValue); } |