You are here

function hide_revision_field_form_user_form_alter in Hide Revision Field 8.2

Same name and namespace in other branches
  1. 8 hide_revision_field.module \hide_revision_field_form_user_form_alter()

Implements hook_form_FORM_ID_alter().

Add the personalizable settings to an individual user's account page.

File

./hide_revision_field.module, line 18
Manage hiding revision log field on revisionable entity edit/create forms.

Code

function hide_revision_field_form_user_form_alter(&$form, FormStateInterface $form_state) {

  // Ensure user has necessary permission.
  if (!\Drupal::currentUser()
    ->hasPermission('administer revision field personalization')) {
    return;
  }

  /** @var \Drupal\user\UserInterface $user */
  $user = $form_state
    ->getFormObject()
    ->getEntity();
  if (!$user
    ->hasPermission('administer revision field personalization')) {
    return;
  }
  $settings = unserialize($user
    ->get('revision_log_settings')->value);
  $entity_type_manager = \Drupal::entityTypeManager();

  /* @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository */
  $entity_display_repository = \Drupal::service('entity_display.repository');

  /** @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_manager */
  $bundle_manager = \Drupal::service('entity_type.bundle.info');
  $config = [];
  foreach ($entity_type_manager
    ->getDefinitions() as $entity_type) {

    // Check that entity has revision_log_message field.
    $keys = $entity_type
      ->get('revision_metadata_keys');
    if (!isset($keys['revision_log_message'])) {
      continue;
    }
    $type_id = $entity_type
      ->id();
    $entity = [];
    foreach ($bundle_manager
      ->getBundleInfo($type_id) as $bundle_id => $bundle) {

      /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
      $form_display = $entity_display_repository
        ->getFormDisplay($type_id, $bundle_id, 'default');
      $log = $form_display
        ->getComponent($keys['revision_log_message']);
      if (!empty($log['settings']['allow_user_settings'])) {
        $entity[$bundle_id] = [
          '#type' => 'checkbox',
          '#title' => t('Show Revision Log Field on "%bundle" forms', [
            '%bundle' => $bundle['label'],
          ]),
          '#default_value' => isset($settings[$type_id][$bundle_id]) ? $settings[$type_id][$bundle_id] : $log['settings']['show'],
        ];
      }
    }
    if ($entity) {
      $config[$type_id] = [
        '#title' => $entity_type
          ->getLabel(),
        '#type' => 'details',
        '#open' => TRUE,
      ];
      $config[$type_id] += $entity;
    }
  }
  if ($config) {
    $form['hide_revision_field'] = [
      '#type' => 'details',
      '#title' => t('Revision Field Settings'),
      '#tree' => TRUE,
      '#open' => FALSE,
      '#weight' => 10,
    ];
    $form['hide_revision_field'] += $config;
  }
  $form['revision_log_settings'] = [
    '#type' => 'hidden',
    '#value' => $user
      ->get('revision_log_settings')->value,
  ];
  $form['actions']['submit']['#validate'][] = 'hide_revision_field_user_profile_form_submit';
  $form['actions']['submit']['#validate'][] = '::validateForm';
}