You are here

function linked_field_field_formatter_settings_summary_alter in Linked Field 8

Same name and namespace in other branches
  1. 7 linked_field.module \linked_field_field_formatter_settings_summary_alter()

Implements hook_field_formatter_settings_summary_alter().

Parameters

array $summary: An array of summary messages.

array $context: An associative array.

File

./linked_field.module, line 26
Main file of Linked Field module.

Code

function linked_field_field_formatter_settings_summary_alter(array &$summary, array $context) {

  /** @var \Drupal\linked_field\LinkedFieldManager $manager */
  $manager = \Drupal::service('linked_field.manager');
  $available_attributes = $manager
    ->getAttributes();
  $settings = $context['formatter']
    ->getThirdPartySettings('linked_field');
  $summary_items = [];

  // Break when no linked field settings were found.
  if (!$settings) {
    return;
  }

  // Normalize the settings.
  $linked = $settings['linked'];
  $type = !isset($settings['type']) ? 'custom' : $settings['type'];
  $destination = $settings['destination'];
  $text = isset($settings['advanced']['text']) ? $settings['advanced']['text'] : '';
  if (!$linked) {
    return;
  }

  // Display field name instead of machine-readable name.
  if ($type == 'field') {
    $entity_type = $context['field_definition']
      ->getTargetEntityTypeId();

    // @TODO: How could we get bundle for base fields?
    $bundle = $context['field_definition']
      ->getTargetBundle();
    $fields = $manager
      ->getDestinationFields($entity_type, $bundle);
    if (isset($fields[$destination])) {
      $destination = $fields[$destination];
    }
  }
  $summary_items[] = t('Destination: <code>@destination</code>', [
    '@destination' => $destination,
  ]);
  foreach ($available_attributes as $attribute => $info) {
    if (empty($settings['advanced'][$attribute])) {
      continue;
    }

    // Provide default label / description for attributes.
    if (!$info['label']) {
      $info['label'] = str_replace('-', ' ', Unicode::ucfirst($attribute));
    }
    $summary_items[] = t('@label: <code>@attribute</code>', [
      '@label' => $info['label'],
      '@attribute' => $settings['advanced'][$attribute],
    ]);
  }
  if ($text) {
    $summary_items[] = t('Text: @text', [
      '@text' => $text,
    ]);
  }
  if ($linked && $destination) {
    $list = [
      '#theme' => 'item_list',
      '#items' => $summary_items,
      '#title' => 'Linked Field',
    ];
    $summary[] = $list;
  }
}