From 41bf08165b2b3891599f6141328ec88646779615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Kinscher?= Date: Mon, 30 Sep 2019 22:11:14 +0200 Subject: [PATCH] propagate changes to display name and email columns in user table to anyone it might affect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Björn Kinscher --- lib/Action/EmailSync.php | 1 + lib/Action/NameSync.php | 114 ++++++++++++++++++++++++++++++++++++ lib/Backend/UserBackend.php | 8 +++ 3 files changed, 123 insertions(+) create mode 100644 lib/Action/NameSync.php diff --git a/lib/Action/EmailSync.php b/lib/Action/EmailSync.php index f6ceba4..e8b68ea 100644 --- a/lib/Action/EmailSync.php +++ b/lib/Action/EmailSync.php @@ -120,6 +120,7 @@ class EmailSync implements IUserAction $this->config->setUserValue( $user->uid, "settings", "email", $user->email ); + \OC::$server->getUserManager()->get($user->uid)->triggerChange('eMailAddress', $user->email, null); } $result = true; diff --git a/lib/Action/NameSync.php b/lib/Action/NameSync.php new file mode 100644 index 0000000..3005c0e --- /dev/null +++ b/lib/Action/NameSync.php @@ -0,0 +1,114 @@ + + * @author Björn Kinscher + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace OCA\UserSQL\Action; + +use OCA\UserSQL\Constant\App; +use OCA\UserSQL\Constant\Opt; +use OCA\UserSQL\Model\User; +use OCA\UserSQL\Properties; +use OCA\UserSQL\Repository\UserRepository; +use OCP\IConfig; +use OCP\ILogger; + +/** + * Synchronizes the user name. + * + * @author Björn Kinscher + */ +class NameSync implements IUserAction +{ + /** + * @var string The application name. + */ + private $appName; + /** + * @var ILogger The logger instance. + */ + private $logger; + /** + * @var Properties The properties array. + */ + private $properties; + /** + * @var IConfig The config instance. + */ + private $config; + /** + * @var UserRepository The user repository. + */ + private $userRepository; + + /** + * The default constructor. + * + * @param string $appName The application name. + * @param ILogger $logger The logger instance. + * @param Properties $properties The properties array. + * @param IConfig $config The config instance. + * @param UserRepository $userRepository The user repository. + */ + public function __construct( + $appName, ILogger $logger, Properties $properties, IConfig $config, + UserRepository $userRepository + ) { + $this->appName = $appName; + $this->logger = $logger; + $this->properties = $properties; + $this->config = $config; + $this->userRepository = $userRepository; + } + + /** + * @inheritdoc + * @throws \OCP\PreConditionNotMetException + */ + public function doAction(User $user) + { + $this->logger->debug( + "Entering NameSync#doAction($user->uid)", ["app" => $this->appName] + ); + + $ncName = $this->config->getUserValue( + $user->uid, "settings", "displayName", "" + ); + + $result = false; + + if (!empty($user->name) && $user->name !== $ncName) { + $this->config->setUserValue( + $user->uid, "settings", "displayName", $user->name + ); + \OC::$server->getUserManager()->get($user->uid)->triggerChange('displayName', $user->name, null); + } + + $result = true; + + + $this->logger->debug( + "Returning NameSync#doAction($user->uid): " . ($result ? "true" + : "false"), + ["app" => $this->appName] + ); + + return $result; + } +} diff --git a/lib/Backend/UserBackend.php b/lib/Backend/UserBackend.php index d8c6ae8..67dcc7f 100644 --- a/lib/Backend/UserBackend.php +++ b/lib/Backend/UserBackend.php @@ -25,6 +25,7 @@ use OC\User\Backend; use OCA\UserSQL\Action\EmailSync; use OCA\UserSQL\Action\IUserAction; use OCA\UserSQL\Action\QuotaSync; +use OCA\UserSQL\Action\NameSync; use OCA\UserSQL\Cache; use OCA\UserSQL\Constant\App; use OCA\UserSQL\Constant\DB; @@ -140,6 +141,13 @@ final class UserBackend extends ABackend implements $this->userRepository ); } + if (!empty($this->properties[DB::USER_NAME_COLUMN]) + ) { + $this->actions[] = new NameSync( + $this->appName, $this->logger, $this->properties, $this->config, + $this->userRepository + ); + } } /**