You are here

function _social_profile_privacy_fields_submit in Open Social 10.3.x

Same name and namespace in other branches
  1. 10.0.x modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.module \_social_profile_privacy_fields_submit()
  2. 10.1.x modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.module \_social_profile_privacy_fields_submit()
  3. 10.2.x modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.module \_social_profile_privacy_fields_submit()

Save fields visibility options for a user.

1 string reference to '_social_profile_privacy_fields_submit'
social_profile_privacy_form_user_form_alter in modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.module
Implements hook_form_FORM_ID_alter().

File

modules/social_features/social_profile/modules/social_profile_privacy/social_profile_privacy.module, line 274
The Social profile privacy module file.

Code

function _social_profile_privacy_fields_submit($form, FormStateInterface $form_state) {

  /** @var \Drupal\user\UserDataInterface $user_data */
  $user_data = \Drupal::service('user.data');
  $uid = $form_state
    ->get('account_id');
  $values = (array) $user_data
    ->get('social_profile_privacy', $uid, 'fields');

  // An array with fields, visibility settings that have been changed.
  $updated_fields = [];
  foreach ($form_state
    ->getValue([
    'profile_privacy',
    'fields',
  ]) as $field => $value) {
    if (!$form['profile_privacy']['fields'][$field]['#disabled']) {

      // We need to check if the setting of the current field was changed and
      // add the field to the appropriate array if so.
      if (!isset($values[$field]) || $values[$field] !== $value) {
        $updated_fields[] = $field;
      }
      $values[$field] = $value;
    }
  }
  $user_data
    ->set('social_profile_privacy', $uid, 'fields', $values);
  $tags = [
    'user:' . $uid,
  ];
  $profiles = \Drupal::entityQuery('profile')
    ->condition('uid', $uid)
    ->execute();
  if ($profiles) {
    $profile = reset($profiles);
    $tags[] = 'profile:' . $profile;
    $tags[] = 'entity_view:profile:' . $profile;
  }
  \Drupal::service('cache_tags.invalidator')
    ->invalidateTags($tags);
  if (!isset($profile) || empty($updated_fields) || empty(array_intersect(SocialProfileNameService::getProfileNameFields(), $updated_fields))) {
    return;
  }

  /** @var \Drupal\profile\ProfileStorageInterface $profile_storage */
  $profile_storage = \Drupal::entityTypeManager()
    ->getStorage('profile');
  if (!empty($profile_storage)) {
    $profile = $profile_storage
      ->load($profile);
    if ($profile instanceof ProfileInterface) {
      SocialProfilePrivacyBatchHelper::updateProfileName($profile);
    }
  }
}