From bff02f5e51e6c04c28a410be1c6920b3b89cebbb Mon Sep 17 00:00:00 2001 From: Christopher Ng Date: Wed, 20 Oct 2021 00:27:37 +0000 Subject: [PATCH] Populate defaults into exising profile config Signed-off-by: Christopher Ng --- lib/private/Profile/ProfileManager.php | 88 ++++++++++++++------------ 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/lib/private/Profile/ProfileManager.php b/lib/private/Profile/ProfileManager.php index 3c975de9a34..e0c619725e7 100644 --- a/lib/private/Profile/ProfileManager.php +++ b/lib/private/Profile/ProfileManager.php @@ -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(); } -- 2.39.5