}
$user = $this->userSession->getUser();
$data = $this->accountManager->getUser($user);
- $data[IAccountManager::PROPERTY_AVATAR]['scope'] = $avatarScope;
+ if (!is_null($avatarScope)) {
+ $data[IAccountManager::PROPERTY_AVATAR]['scope'] = $avatarScope;
+ }
if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) {
- $data[IAccountManager::PROPERTY_DISPLAYNAME]['value'] = $displayname;
- $data[IAccountManager::PROPERTY_DISPLAYNAME]['scope'] = $displaynameScope;
- $data[IAccountManager::PROPERTY_EMAIL]['value'] = $email;
- $data[IAccountManager::PROPERTY_EMAIL]['scope'] = $emailScope;
+ if (!is_null($displayname)) {
+ $data[IAccountManager::PROPERTY_DISPLAYNAME]['value'] = $displayname;
+ }
+ if (!is_null($displaynameScope)) {
+ $data[IAccountManager::PROPERTY_DISPLAYNAME]['scope'] = $displaynameScope;
+ }
+ if (!is_null($email)) {
+ $data[IAccountManager::PROPERTY_EMAIL]['value'] = $email;
+ }
+ if (!is_null($emailScope)) {
+ $data[IAccountManager::PROPERTY_EMAIL]['scope'] = $emailScope;
+ }
}
if ($this->appManager->isEnabledForUser('federatedfilesharing')) {
$shareProvider = \OC::$server->query(FederatedShareProvider::class);
if ($shareProvider->isLookupServerUploadEnabled()) {
- $data[IAccountManager::PROPERTY_WEBSITE]['value'] = $website;
- $data[IAccountManager::PROPERTY_WEBSITE]['scope'] = $websiteScope;
- $data[IAccountManager::PROPERTY_ADDRESS]['value'] = $address;
- $data[IAccountManager::PROPERTY_ADDRESS]['scope'] = $addressScope;
- $data[IAccountManager::PROPERTY_PHONE]['value'] = $phone;
- $data[IAccountManager::PROPERTY_PHONE]['scope'] = $phoneScope;
- $data[IAccountManager::PROPERTY_TWITTER]['value'] = $twitter;
- $data[IAccountManager::PROPERTY_TWITTER]['scope'] = $twitterScope;
+ if (!is_null($website)) {
+ $data[IAccountManager::PROPERTY_WEBSITE]['value'] = $website;
+ }
+ if (!is_null($websiteScope)) {
+ $data[IAccountManager::PROPERTY_WEBSITE]['scope'] = $websiteScope;
+ }
+ if (!is_null($address)) {
+ $data[IAccountManager::PROPERTY_ADDRESS]['value'] = $address;
+ }
+ if (!is_null($addressScope)) {
+ $data[IAccountManager::PROPERTY_ADDRESS]['scope'] = $addressScope;
+ }
+ if (!is_null($phone)) {
+ $data[IAccountManager::PROPERTY_PHONE]['value'] = $phone;
+ }
+ if (!is_null($phoneScope)) {
+ $data[IAccountManager::PROPERTY_PHONE]['scope'] = $phoneScope;
+ }
+ if (!is_null($twitter)) {
+ $data[IAccountManager::PROPERTY_TWITTER]['value'] = $twitter;
+ }
+ if (!is_null($twitterScope)) {
+ $data[IAccountManager::PROPERTY_TWITTER]['scope'] = $twitterScope;
+ }
}
}
try {
);
}
+ /**
+ * @dataProvider dataTestSetUserSettingsSubset
+ *
+ * @param string $property
+ * @param string $propertyValue
+ */
+ public function testSetUserSettingsSubset($property, $propertyValue) {
+ $controller = $this->getController(false, ['saveUserSettings']);
+ $user = $this->createMock(IUser::class);
+
+ $this->userSession->method('getUser')->willReturn($user);
+
+ $defaultProperties = $this->getDefaultAccountManagerUserData();
+
+ $this->accountManager->expects($this->once())
+ ->method('getUser')
+ ->with($user)
+ ->willReturn($defaultProperties);
+
+ $this->appManager->expects($this->once())
+ ->method('isEnabledForUser')
+ ->with('federatedfilesharing')
+ ->willReturn(true);
+
+ $avatarScope = ($property === 'avatarScope') ? $propertyValue : null;
+ $displayName = ($property === 'displayName') ? $propertyValue : null;
+ $displayNameScope = ($property === 'displayNameScope') ? $propertyValue : null;
+ $phone = ($property === 'phone') ? $propertyValue : null;
+ $phoneScope = ($property === 'phoneScope') ? $propertyValue : null;
+ $email = ($property === 'email') ? $propertyValue : null;
+ $emailScope = ($property === 'emailScope') ? $propertyValue : null;
+ $website = ($property === 'website') ? $propertyValue : null;
+ $websiteScope = ($property === 'websiteScope') ? $propertyValue : null;
+ $address = ($property === 'address') ? $propertyValue : null;
+ $addressScope = ($property === 'addressScope') ? $propertyValue : null;
+ $twitter = ($property === 'twitter') ? $propertyValue : null;
+ $twitterScope = ($property === 'twitterScope') ? $propertyValue : null;
+
+ $expectedProperties = $defaultProperties;
+ if ($property === 'avatarScope') {
+ $expectedProperties[IAccountManager::PROPERTY_AVATAR]['scope'] = $propertyValue;
+ }
+ if ($property === 'displayName') {
+ $expectedProperties[IAccountManager::PROPERTY_DISPLAYNAME]['value'] = $propertyValue;
+ }
+ if ($property === 'displayNameScope') {
+ $expectedProperties[IAccountManager::PROPERTY_DISPLAYNAME]['scope'] = $propertyValue;
+ }
+ if ($property === 'phone') {
+ $expectedProperties[IAccountManager::PROPERTY_PHONE]['value'] = $propertyValue;
+ }
+ if ($property === 'phoneScope') {
+ $expectedProperties[IAccountManager::PROPERTY_PHONE]['scope'] = $propertyValue;
+ }
+ if ($property === 'email') {
+ $expectedProperties[IAccountManager::PROPERTY_EMAIL]['value'] = $propertyValue;
+ }
+ if ($property === 'emailScope') {
+ $expectedProperties[IAccountManager::PROPERTY_EMAIL]['scope'] = $propertyValue;
+ }
+ if ($property === 'website') {
+ $expectedProperties[IAccountManager::PROPERTY_WEBSITE]['value'] = $propertyValue;
+ }
+ if ($property === 'websiteScope') {
+ $expectedProperties[IAccountManager::PROPERTY_WEBSITE]['scope'] = $propertyValue;
+ }
+ if ($property === 'address') {
+ $expectedProperties[IAccountManager::PROPERTY_ADDRESS]['value'] = $propertyValue;
+ }
+ if ($property === 'addressScope') {
+ $expectedProperties[IAccountManager::PROPERTY_ADDRESS]['scope'] = $propertyValue;
+ }
+ if ($property === 'twitter') {
+ $expectedProperties[IAccountManager::PROPERTY_TWITTER]['value'] = $propertyValue;
+ }
+ if ($property === 'twitterScope') {
+ $expectedProperties[IAccountManager::PROPERTY_TWITTER]['scope'] = $propertyValue;
+ }
+
+ if (!empty($email)) {
+ $this->mailer->expects($this->once())->method('validateMailAddress')
+ ->willReturn(true);
+ }
+
+ $controller->expects($this->once())
+ ->method('saveUserSettings')
+ ->with($user, $expectedProperties)
+ ->willReturnArgument(1);
+
+ $result = $controller->setUserSettings(
+ $avatarScope,
+ $displayName,
+ $displayNameScope,
+ $phone,
+ $phoneScope,
+ $email,
+ $emailScope,
+ $website,
+ $websiteScope,
+ $address,
+ $addressScope,
+ $twitter,
+ $twitterScope
+ );
+ }
+
+ public function dataTestSetUserSettingsSubset() {
+ return [
+ ['avatarScope', IAccountManager::VISIBILITY_PUBLIC],
+ ['displayName', 'Display name'],
+ ['displayNameScope', IAccountManager::VISIBILITY_PUBLIC],
+ ['phone', '47658468'],
+ ['phoneScope', IAccountManager::VISIBILITY_PUBLIC],
+ ['email', 'john@example.com'],
+ ['emailScope', IAccountManager::VISIBILITY_PUBLIC],
+ ['website', 'nextcloud.com'],
+ ['websiteScope', IAccountManager::VISIBILITY_PUBLIC],
+ ['address', 'street and city'],
+ ['addressScope', IAccountManager::VISIBILITY_PUBLIC],
+ ['twitter', '@nextclouders'],
+ ['twitterScope', IAccountManager::VISIBILITY_PUBLIC],
+ ];
+ }
+
/**
* @dataProvider dataTestSaveUserSettings
*