You are here

function social_profile_privacy_update_8002 in Open Social 10.0.x

Same name and namespace in other branches
  1. 10.3.x modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.install \social_profile_privacy_update_8002()
  2. 10.1.x modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.install \social_profile_privacy_update_8002()
  3. 10.2.x modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.install \social_profile_privacy_update_8002()

Prepare settings of fields based on settings of groups of fields.

File

modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.install, line 182
The social profile privacy install file.

Code

function social_profile_privacy_update_8002() {
  $config = \Drupal::configFactory()
    ->getEditable('social_profile_privacy.settings');
  $fields_groups = [];
  $disclaimer = array_fill_keys([
    'title',
    'text.value',
    'text.format',
  ], NULL);
  foreach ([
    'user',
    'profile',
  ] as $entity_type_id) {
    if ($config
      ->get($form = $entity_type_id . '_form_display')) {
      foreach (array_filter((array) $config
        ->get($form . '_field_groups')) as $fields_group) {
        $fields_groups[] = $fields_group;
      }
    }
    foreach ($disclaimer as $key => &$value) {
      if ($form_value = $config
        ->get($form . '_disclaimer.' . $key)) {
        $value = $form_value;
      }
    }
    foreach ([
      '',
      '_field_groups',
      '_disclaimer',
    ] as $suffix) {
      $config
        ->clear($form . $suffix);
    }
  }
  $text = '';
  if ($disclaimer['title']) {
    $text .= '<strong>' . $disclaimer['title'] . ':</strong>';
  }
  if ($disclaimer['text.value']) {
    $text .= ($text ? "\r\n" : '') . $disclaimer['text.value'];
  }
  if ($text) {
    $config
      ->set('disclaimer', [
      'value' => $text,
      'format' => $disclaimer['text.format'] ?: 'basic_html',
    ]);
  }
  if ($fields_groups) {

    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $display */
    $display = \Drupal::entityTypeManager()
      ->getStorage('entity_form_display')
      ->load('profile.profile.default');
    $states = [];
    foreach (array_unique($fields_groups) as $fields_group) {
      $settings = $display
        ->getThirdPartySetting('field_group', $fields_group);
      foreach ($settings['children'] as $field) {
        $states[$field] = SocialProfilePrivacyHelperInterface::CONFIGURABLE;
      }
    }
    $config
      ->set('fields', $states);
    $output = t('The visibility option has been changed to configurable for the following fields: @list', [
      '@list' => implode(', ', array_keys($states)),
    ]);
  }
  else {
    $output = t('The visibility option for no one field has been changed.');
  }
  $config
    ->save();
  return $output;
}