}
/**
- * @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();
}