diff --git a/lib/Action/EmailSync.php b/lib/Action/EmailSync.php index cded1c2..f6ceba4 100644 --- a/lib/Action/EmailSync.php +++ b/lib/Action/EmailSync.php @@ -111,7 +111,7 @@ class EmailSync implements IUserAction } $user->email = $ncMail; - $result = $this->userRepository->save($user); + $result = $this->userRepository->save($user, UserRepository::EMAIL_FIELD); } break; diff --git a/lib/Action/QuotaSync.php b/lib/Action/QuotaSync.php index 7f73c9b..699b1e4 100644 --- a/lib/Action/QuotaSync.php +++ b/lib/Action/QuotaSync.php @@ -111,7 +111,7 @@ class QuotaSync implements IUserAction } $user->quota = $ncQuota; - $result = $this->userRepository->save($user); + $result = $this->userRepository->save($user, UserRepository::QUOTA_FIELD); } break; diff --git a/lib/Backend/UserBackend.php b/lib/Backend/UserBackend.php index 306fb17..a5d3b3a 100644 --- a/lib/Backend/UserBackend.php +++ b/lib/Backend/UserBackend.php @@ -484,7 +484,7 @@ final class UserBackend extends ABackend implements } $user->password = $passwordHash; - $result = $this->userRepository->save($user); + $result = $this->userRepository->save($user, UserRepository::PASSWORD_FIELD); if ($result === true) { $this->logger->info( @@ -588,7 +588,7 @@ final class UserBackend extends ABackend implements } $user->name = $displayName; - $result = $this->userRepository->save($user); + $result = $this->userRepository->save($user, UserRepository::DISPLAY_NAME_FIELD); if ($result === true) { $this->logger->info( diff --git a/lib/Constant/Query.php b/lib/Constant/Query.php index 86511e0..35eceb7 100644 --- a/lib/Constant/Query.php +++ b/lib/Constant/Query.php @@ -37,7 +37,10 @@ final class Query const FIND_USER = "find_user"; const FIND_USER_GROUPS = "find_user_groups"; const FIND_USERS = "find_users"; - const SAVE_USER = "save_user"; + const UPDATE_DISPLAY_NAME = "update_display_name"; + const UPDATE_EMAIL = "update_email"; + const UPDATE_PASSWORD = "update_password"; + const UPDATE_QUOTA = "update_quota"; const EMAIL_PARAM = "email"; const GID_PARAM = "gid"; diff --git a/lib/Query/QueryProvider.php b/lib/Query/QueryProvider.php index 6600a2f..f13a18d 100644 --- a/lib/Query/QueryProvider.php +++ b/lib/Query/QueryProvider.php @@ -157,12 +157,24 @@ class QueryProvider implements \ArrayAccess "WHERE $uUID LIKE :$searchParam " . "ORDER BY $uUID", - Query::SAVE_USER => + Query::UPDATE_DISPLAY_NAME => "UPDATE $user " . - "SET $uPassword = :$passwordParam, " . - "$uName = :$nameParam, " . - "$uEmail = :$emailParam, " . - "$uQuota = :$quotaParam " . + "SET $uName = :$nameParam " . + "WHERE $uUID = :$uidParam", + + Query::UPDATE_EMAIL => + "UPDATE $user " . + "SET $uEmail = :$emailParam " . + "WHERE $uUID = :$uidParam", + + Query::UPDATE_PASSWORD => + "UPDATE $user " . + "SET $uPassword = :$passwordParam " . + "WHERE $uUID = :$uidParam", + + Query::UPDATE_QUOTA => + "UPDATE $user " . + "SET $uQuota = :$quotaParam " . "WHERE $uUID = :$uidParam", ]; } diff --git a/lib/Repository/UserRepository.php b/lib/Repository/UserRepository.php index 8ba593b..c23d13e 100644 --- a/lib/Repository/UserRepository.php +++ b/lib/Repository/UserRepository.php @@ -32,6 +32,11 @@ use OCA\UserSQL\Query\DataQuery; */ class UserRepository { + const DISPLAY_NAME_FIELD = 0b001; + const EMAIL_FIELD = 0b0010; + const PASSWORD_FIELD = 0b0100; + const QUOTA_FIELD = 0b1000; + /** * @var DataQuery The data query object. */ @@ -97,20 +102,48 @@ class UserRepository /** * Save an user entity object. * - * @param User $user The user entity. + * @param User $user The user entity. + * @param int $fields Fields to update. * * @return bool TRUE on success, FALSE otherwise. */ - public function save($user) + public function save($user, $fields) { - return $this->dataQuery->update( - Query::SAVE_USER, [ - Query::NAME_PARAM => $user->name, - Query::PASSWORD_PARAM => $user->password, - Query::EMAIL_PARAM => $user->email, - Query::QUOTA_PARAM => $user->quota, - Query::UID_PARAM => $user->uid - ] - ); + $status = true; + + if ($fields & self::DISPLAY_NAME_FIELD) { + $status =& $this->dataQuery->update( + Query::UPDATE_DISPLAY_NAME, [ + Query::NAME_PARAM => $user->name, + Query::UID_PARAM => $user->uid + ] + ); + } + if ($fields & self::PASSWORD_FIELD) { + $status =& $this->dataQuery->update( + Query::UPDATE_PASSWORD, [ + Query::PASSWORD_PARAM => $user->password, + Query::UID_PARAM => $user->uid + ] + ); + } + if ($fields & self::EMAIL_FIELD) { + $status =& $this->dataQuery->update( + Query::UPDATE_EMAIL, [ + Query::EMAIL_PARAM => $user->email, + Query::UID_PARAM => $user->uid + ] + ); + } + if ($fields & self::QUOTA_FIELD) { + $status =& $this->dataQuery->update( + Query::UPDATE_QUOTA, [ + Query::QUOTA_PARAM => $user->quota, + Query::UID_PARAM => $user->uid + ] + ); + } + + return $status; } }