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 1891f45..99c860b 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; @@ -151,6 +152,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 + ); + } } /**