]> source.dussan.org Git - nextcloud-server.git/commitdiff
Populate defaults into exising profile config 29330/head
authorChristopher Ng <chrng8@gmail.com>
Wed, 20 Oct 2021 00:27:37 +0000 (00:27 +0000)
committerChristopher Ng <chrng8@gmail.com>
Wed, 20 Oct 2021 01:07:38 +0000 (01:07 +0000)
Signed-off-by: Christopher Ng <chrng8@gmail.com>
lib/private/Profile/ProfileManager.php

index 3c975de9a3472ead4939513a22025c8cedb25d3b..e0c619725e7cf638ec098622a0da29467713dad0 100644 (file)
@@ -278,51 +278,61 @@ class ProfileManager {
        }
 
        /**
-        * @inheritDoc
+        * Return the default profile config
+        */
+       private function getDefaultProfileConfig(IUser $targetUser, ?IUser $visitingUser): array {
+               // Contruct the default config for actions
+               $actionsConfig = [];
+               foreach ($this->getActions($targetUser, $visitingUser) as $action) {
+                       $actionsConfig[$action->getId()] = [
+                               'displayId' => $action->getDisplayId(),
+                               'visibility' => ProfileConfig::DEFAULT_VISIBILITY,
+                       ];
+               }
+
+               // Map of account properties to display IDs
+               $propertyDisplayMap = [
+                       IAccountManager::PROPERTY_ADDRESS => $this->l10nFactory->get('core')->t('Address'),
+                       IAccountManager::PROPERTY_AVATAR => $this->l10nFactory->get('core')->t('Avatar'),
+                       IAccountManager::PROPERTY_BIOGRAPHY => $this->l10nFactory->get('core')->t('About'),
+                       IAccountManager::PROPERTY_DISPLAYNAME => $this->l10nFactory->get('core')->t('Full name'),
+                       IAccountManager::PROPERTY_HEADLINE => $this->l10nFactory->get('core')->t('Headline'),
+                       IAccountManager::PROPERTY_ORGANISATION => $this->l10nFactory->get('core')->t('Organisation'),
+                       IAccountManager::PROPERTY_ROLE => $this->l10nFactory->get('core')->t('Role'),
+                       IAccountManager::PROPERTY_EMAIL => $this->l10nFactory->get('core')->t('Email'),
+                       IAccountManager::PROPERTY_PHONE => $this->l10nFactory->get('core')->t('Phone'),
+                       IAccountManager::PROPERTY_TWITTER => $this->l10nFactory->get('core')->t('Twitter'),
+                       IAccountManager::PROPERTY_WEBSITE => $this->l10nFactory->get('core')->t('Website'),
+               ];
+
+               // Contruct the default config for account properties
+               $propertiesConfig = [];
+               foreach ($propertyDisplayMap as $property => $displayId) {
+                       $propertiesConfig[$property] = [
+                               'displayId' => $displayId,
+                               'visibility' => ProfileConfig::DEFAULT_PROPERTY_VISIBILITY[$property],
+                       ];
+               }
+
+               return array_merge($actionsConfig, $propertiesConfig);
+       }
+
+       /**
+        * Return the profile config
         */
        public function getProfileConfig(IUser $targetUser, ?IUser $visitingUser): array {
+               $defaultProfileConfig = $this->getDefaultProfileConfig($targetUser, $visitingUser);
                try {
-                       $configArray = $this->configMapper->getArray($targetUser->getUID());
+                       $config = $this->configMapper->get($targetUser->getUID());
+                       // Merge defaults with the existing config in case the defaults are missing
+                       $config->setConfigArray(array_merge($defaultProfileConfig, $config->getConfigArray()));
+                       $this->configMapper->update($config);
+                       $configArray = $config->getConfigArray();
                } catch (DoesNotExistException $e) {
+                       // Create a new default config if it does not exist
                        $config = new ProfileConfig();
                        $config->setUserId($targetUser->getUID());
-
-                       // Map of account properties to display IDs
-                       $propertyDisplayMap = [
-                               IAccountManager::PROPERTY_ADDRESS => $this->l10nFactory->get('core')->t('Address'),
-                               IAccountManager::PROPERTY_AVATAR => $this->l10nFactory->get('core')->t('Avatar'),
-                               IAccountManager::PROPERTY_BIOGRAPHY => $this->l10nFactory->get('core')->t('About'),
-                               IAccountManager::PROPERTY_DISPLAYNAME => $this->l10nFactory->get('core')->t('Full name'),
-                               IAccountManager::PROPERTY_HEADLINE => $this->l10nFactory->get('core')->t('Headline'),
-                               IAccountManager::PROPERTY_ORGANISATION => $this->l10nFactory->get('core')->t('Organisation'),
-                               IAccountManager::PROPERTY_ROLE => $this->l10nFactory->get('core')->t('Role'),
-                               IAccountManager::PROPERTY_EMAIL => $this->l10nFactory->get('core')->t('Email'),
-                               IAccountManager::PROPERTY_PHONE => $this->l10nFactory->get('core')->t('Phone'),
-                               IAccountManager::PROPERTY_TWITTER => $this->l10nFactory->get('core')->t('Twitter'),
-                               IAccountManager::PROPERTY_WEBSITE => $this->l10nFactory->get('core')->t('Website'),
-                       ];
-
-                       // Contruct the default config for account properties
-                       $propertiesConfig = [];
-                       foreach ($propertyDisplayMap as $property => $displayId) {
-                               $propertiesConfig[$property] = [
-                                       'displayId' => $displayId,
-                                       'visibility' => ProfileConfig::DEFAULT_PROPERTY_VISIBILITY[$property] ?: ProfileConfig::DEFAULT_VISIBILITY,
-                               ];
-                       }
-
-                       // Contruct the default config for actions
-                       $actionsConfig = [];
-                       /** @var ILinkAction $action */
-                       foreach ($this->getActions($targetUser, $visitingUser) as $action) {
-                               $actionsConfig[$action->getId()] = [
-                                       'displayId' => $action->getDisplayId(),
-                                       'visibility' => ProfileConfig::DEFAULT_VISIBILITY,
-                               ];
-                       }
-
-                       // Set the default config
-                       $config->setConfigArray(array_merge($propertiesConfig, $actionsConfig));
+                       $config->setConfigArray($defaultProfileConfig);
                        $this->configMapper->insert($config);
                        $configArray = $config->getConfigArray();
                }