From f5bdf02695b3f1b7cf76fa3744a4eb84538d5120 Mon Sep 17 00:00:00 2001 From: Christopher Ng Date: Wed, 20 Oct 2021 00:17:22 +0000 Subject: [PATCH 1/2] Cleanup Signed-off-by: Christopher Ng --- lib/private/Profile/ProfileManager.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/private/Profile/ProfileManager.php b/lib/private/Profile/ProfileManager.php index 6a38f4ae16d85..3c975de9a3472 100644 --- a/lib/private/Profile/ProfileManager.php +++ b/lib/private/Profile/ProfileManager.php @@ -27,7 +27,6 @@ namespace OC\Profile; use function Safe\usort; - use OC\AppFramework\Bootstrap\Coordinator; use OC\Core\Db\ProfileConfig; use OC\Core\Db\ProfileConfigMapper; @@ -46,9 +45,6 @@ use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; -/** - * @inheritDoc - */ class ProfileManager { /** @var IAccountManager */ @@ -78,6 +74,9 @@ class ProfileManager { /** @var ILinkAction[] */ private $actions = []; + /** + * Array of account property actions + */ private const ACCOUNT_PROPERTY_ACTIONS = [ EmailAction::class, PhoneAction::class, @@ -233,7 +232,7 @@ private function isParameterVisible(IUser $targetUser, ?IUser $visitingUser, str } /** - * @inheritDoc + * Return the profile parameters */ public function getProfileParams(IUser $targetUser, ?IUser $visitingUser): array { $account = $this->accountManager->getAccount($targetUser); From bff02f5e51e6c04c28a410be1c6920b3b89cebbb Mon Sep 17 00:00:00 2001 From: Christopher Ng Date: Wed, 20 Oct 2021 00:27:37 +0000 Subject: [PATCH 2/2] 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 3c975de9a3472..e0c619725e7cf 100644 --- a/lib/private/Profile/ProfileManager.php +++ b/lib/private/Profile/ProfileManager.php @@ -278,51 +278,61 @@ function (ILinkAction $action) use ($targetUser, $visitingUser) { } /** - * @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(); }