You are here

function menu_entity_index_form_alter in Menu Entity Index 8

Implements hook_form_alter().

File

./menu_entity_index.module, line 36
Main Menu Entity Index module file.

Code

function menu_entity_index_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $form_object = $form_state
    ->getFormObject();
  if (!$form_object || !$form_object instanceof EntityForm) {

    // We only care about entity forms.
    return;
  }
  elseif ($form_object
    ->getOperation() != 'edit') {

    // New entities are always unreferenced.
    return;
  }
  $tracker = \Drupal::service('menu_entity_index.tracker');
  $entity = $form_state
    ->getFormObject()
    ->getEntity();
  if (!in_array($entity
    ->getEntityTypeId(), $tracker
    ->getTrackedEntityTypes())) {

    // Tracking is not enabled for this entity type.
    return;
  }

  // Add reference tracker pseudo-field.
  $data = $tracker
    ->getHostData($entity);
  $form['menu_entity_index'] = [
    '#type' => 'details',
    '#title' => \Drupal::translation()
      ->formatPlural(count($data), 'Referenced by 1 menu link', 'Referenced by @count menu links'),
    '#open' => FALSE,
    '#access' => \Drupal::currentUser()
      ->hasPermission('view menu_entity_index form field'),
  ];
  $form['menu_entity_index']['table'] = [
    '#type' => 'table',
    '#header' => [
      t('Menu'),
      t('Level'),
      t('Label'),
      t('Language'),
    ],
    '#empty' => t('- None -'),
  ];
  foreach ($data as $row) {
    $form['menu_entity_index']['table'][] = [
      'menu' => [
        '#markup' => $row['menu_name'],
      ],
      'level' => [
        '#markup' => $row['level'],
      ],
      'label' => empty($row['link']) ? [
        '#markup' => $row['label'],
      ] : [
        '#type' => 'link',
        '#title' => $row['label'],
        '#url' => $row['link'],
      ],
      'language' => [
        '#markup' => $row['language'],
      ],
    ];
  }
}