You are here

public function ConfigSplitEntityViewBuilder::viewMultiple in Configuration Split 2.0.x

Same name and namespace in other branches
  1. 8 src/ConfigSplitEntityViewBuilder.php \Drupal\config_split\ConfigSplitEntityViewBuilder::viewMultiple()

Builds the render array for the provided entities.

Parameters

array $entities: An array of entities implementing EntityInterface to view.

string $view_mode: (optional) The view mode that should be used to render the entity.

string $langcode: (optional) For which language the entity should be rendered, defaults to the current content language.

Return value

A render array for the entities, indexed by the same keys as the entities array passed in $entities.

Throws

\InvalidArgumentException Can be thrown when the set of parameters is inconsistent, like when trying to view Comments and passing a Node which is not the one the comments belongs to, or not passing one, and having the comments node not be available for loading.

Overrides EntityViewBuilder::viewMultiple

File

src/ConfigSplitEntityViewBuilder.php, line 34

Class

ConfigSplitEntityViewBuilder
EntityViewBuilder for Config Split entities.

Namespace

Drupal\config_split

Code

public function viewMultiple(array $entities = [], $view_mode = 'full', $langcode = NULL) {

  /** @var \Drupal\config_split\Entity\ConfigSplitEntityInterface[] $entities */
  $build = [];

  /**
   * @var string $entity_id
   * @var \Drupal\config_split\Entity\ConfigSplitEntity $entity
   */
  foreach ($entities as $entity_id => $entity) {
    $config = $this->splitManager
      ->getSplitConfig($entity
      ->getConfigDependencyName());

    // @todo make this prettier.
    $build[$entity_id] = [
      '#cache' => [
        'tags' => $entity
          ->getCacheTags(),
      ],
    ];
    try {
      $storage = $this->splitManager
        ->singleExportPreview($config);
      $build[$entity_id]['preview'] = [
        '#type' => 'container',
        'title' => [
          '#type' => 'html_tag',
          '#tag' => 'h3',
          '#value' => $this
            ->t('Preview'),
        ],
        'items' => [
          '#theme' => 'item_list',
          '#items' => $this
            ->listStorageContents($storage),
          '#list_type' => 'ul',
        ],
      ];
    } catch (\Exception $exception) {
      $build[$entity_id]['preview'] = [
        '#markup' => $this
          ->t('Can not display preview of %split', [
          '%split' => $entity
            ->label(),
        ]),
      ];
    }
    try {
      $storage = $this->splitManager
        ->singleExportTarget($config);
      $build[$entity_id]['exported'] = [
        '#type' => 'container',
        'title' => [
          '#type' => 'html_tag',
          '#tag' => 'h3',
          '#value' => $this
            ->t('Exported'),
        ],
        'items' => [
          '#theme' => 'item_list',
          '#items' => $this
            ->listStorageContents($storage),
          '#list_type' => 'ul',
        ],
      ];
    } catch (\Exception $exception) {
      $build[$entity_id]['exported'] = [
        '#markup' => $this
          ->t('Can not display export storage of %split', [
          '%split' => $entity
            ->label(),
        ]),
      ];
    }
  }
  return $build;
}