You are here

function scheduled_publish_entity_display_build_alter in Scheduled Publish 8.3

Implements hook_entity_display_build_alter().

File

./scheduled_publish.module, line 130
Contains scheduled_publish.module.

Code

function scheduled_publish_entity_display_build_alter(&$build, $context) {

  // This is necessary to display field values included in
  // scheduled_publish_views_data_alter via union.
  if ($context['view_mode'] === '_custom') {
    $fields = scheduled_publish_get_node_fields();
    $first_field = array_shift($fields);
    $components = $context['display']
      ->getComponents();
    if (isset($components[$first_field]) && !isset($build[$first_field])) {
      foreach ($fields as $field) {
        if ($context['entity']
          ->hasField($field)) {

          // Based on Drupal\Core\Entity\Entity buildMultiple() method.
          $context['display']
            ->setComponent($field, $components[$first_field]);
          $formatter = $context['display']
            ->getRenderer($field);
          $items = $context['entity']
            ->get($field);
          $items
            ->filterEmptyItems();
          $grouped_items[$context['entity']
            ->id()] = $items;
          $formatter
            ->prepareView($grouped_items);
          $field_access = $items
            ->access('view', NULL, TRUE);
          if ($context['entity'] instanceof TranslatableInterface && $context['entity']
            ->isTranslatable()) {
            $view_langcode = $context['entity']
              ->language()
              ->getId();
          }
          else {
            $view_langcode = NULL;
          }
          $build[$first_field] = $field_access
            ->isAllowed() ? $formatter
            ->view($items, $view_langcode) : [];
        }
      }
    }
  }
}