You are here

function hide_revision_field_form_alter in Hide Revision Field 8

Same name and namespace in other branches
  1. 8.2 hide_revision_field.module \hide_revision_field_form_alter()

Implements hook_form_alter().

Alter entity bundle forms to add checkbox to control visibility of revision information fields per bundle. Also alter entity create/edit forms to disable the visibility of revision information field if it is disabled for the bundle.

File

./hide_revision_field.module, line 20
hide_revision_field.module Manages hiding revision information fields on revisionable entities (ie Node or Media) edit/create forms.

Code

function hide_revision_field_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if (in_array($form_id, [
    'node_type_edit_form',
    'media_bundle_edit_form',
  ])) {
    $entity = $form_state
      ->getFormObject()
      ->getEntity();
    $form['workflow']['hide_revision_fieldset'] = [
      '#type' => 'fieldset',
      '#title' => t('Revision Field Visibility'),
      'hide_revision_field' => [
        '#type' => 'checkbox',
        '#title' => t('Hide'),
        '#default_value' => $entity
          ->getThirdPartySetting('hide_revision_field', 'hide', 0),
      ],
      'hide_revision_field_personalizable' => [
        '#type' => 'checkbox',
        '#title' => t('Allow Per User Settings'),
        '#default_value' => $entity
          ->getThirdPartySetting('hide_revision_field', 'personalizable', TRUE),
      ],
    ];
    $form['#entity_builders'][] = 'hide_revision_field_bundle_builder';
  }
  $info = $form_state
    ->getBuildInfo();
  if (isset($info['base_form_id']) && in_array($info['base_form_id'], [
    'node_form',
    'media_form',
  ])) {

    // Check the user has permissions to view revision fields.
    if (!\Drupal::currentUser()
      ->hasPermission('view revision field')) {
      $form['revision_information']['#access'] = FALSE;
      return;
    }
    switch ($info['base_form_id']) {
      case 'node_form':
        $type = 'node_type';
        break;
      case 'media_form':
        $type = 'media_bundle';
        break;
    }
    $bundle = entity_load($type, $form_state
      ->getFormObject()
      ->getEntity()
      ->bundle());
    if ($user_id = \Drupal::currentUser()
      ->id() && $bundle
      ->getThirdPartySetting('hide_revision_field', 'personalizable', TRUE)) {
      $personalization = $bundle
        ->getThirdPartySetting('hide_revision_field', 'personalization');
      if (isset($personalization[$user_id])) {
        if ($personalization[$user_id]['hide']) {
          $form['revision_information']['#access'] = FALSE;
        }
        return;
      }
    }
    if ($bundle
      ->getThirdPartySetting('hide_revision_field', 'hide')) {
      $form['revision_information']['#access'] = FALSE;
    }
  }
}