You are here

function permissions_by_term_user_form_submit in Permissions by Term 8.2

Form submission handler for permissions_by_term_form_user_form_alter.

Parameters

array $form: The complete form array.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

1 string reference to 'permissions_by_term_user_form_submit'
permissions_by_term_form_user_form_alter in ./permissions_by_term.module
Implements hook_form_FORM_ID_alter() for 'user_form'.

File

./permissions_by_term.module, line 288
Allows access to terms in a vocabulary to be limited by user or role.

Code

function permissions_by_term_user_form_submit(array &$form, FormStateInterface $form_state) {

  /** @var \Drupal\permissions_by_term\Service\AccessStorage $access_storage */
  $access_storage = \Drupal::service('permissions_by_term.access_storage');

  /** @var \Drupal\user\UserInterface $user */
  $user = $form_state
    ->getFormObject()
    ->getEntity();
  $uid = $user
    ->id();
  $origPerms = $access_storage
    ->getAllTermPermissionsByUserId($uid);

  // First, we delete existing values from the db.
  $access_storage
    ->deleteAllTermPermissionsByUserId($uid);
  if ($tids = $form_state
    ->getValue('terms')) {

    // For term permissions use user preferred language.
    $langcode = $user
      ->getPreferredLangcode();

    // Second, we insert updated values.
    foreach ($tids as $tid) {
      $access_storage
        ->addTermPermissionsByUserIds([
        $uid,
      ], $tid, $langcode);
    }
  }
  $newPerms = $access_storage
    ->getAllTermPermissionsByUserId($uid);

  // Rebuild permissions for nodes if needed.
  if (!\Drupal::config('permissions_by_term.settings')
    ->get('disable_node_access_records') && !empty(array_diff($origPerms, $newPerms))) {
    \Drupal::service('permissions_by_term.node_access')
      ->rebuildAccess($uid);
  }
}