You are here

public function ItemListBuilder::render in Business Rules 2.x

Same name and namespace in other branches
  1. 8 src/ItemListBuilder.php \Drupal\business_rules\ItemListBuilder::render()

Builds the entity listing as renderable array for table.html.twig.

@todo Add a link to add a new item to the #empty text.

Overrides EntityListBuilder::render

File

src/ItemListBuilder.php, line 58

Class

ItemListBuilder
Provides a listing of Business rules Items entities.

Namespace

Drupal\business_rules

Code

public function render() {
  $view_mode = \Drupal::request()
    ->get('view_mode');
  $output['#attached']['library'][] = 'system/drupal.system.modules';
  $output['filters'] = [
    '#type' => 'container',
    '#attributes' => [
      'class' => [
        'table-filter',
        'js-show',
      ],
    ],
  ];
  $output['filters']['text'] = [
    '#type' => 'search',
    '#title' => $this
      ->t('Search'),
    '#size' => 30,
    '#placeholder' => $this
      ->t('Search for a item'),
    '#attributes' => [
      'class' => [
        'table-filter-text',
      ],
      'data-table' => '.searchable-list',
      'autocomplete' => 'off',
      'title' => $this
        ->t('Enter a part of the item to filter by.'),
    ],
  ];
  $class = $this->entityType
    ->getClass();
  if ($view_mode == 'tags') {
    $tags = $class::loadAllTags();
    $table = parent::render();
    foreach ($tags as $tag) {
      $tagged_items = $table;
      $output["tags_table_{$tag}"] = [
        '#type' => 'details',
        '#title' => $tag,
        '#open' => FALSE,
      ];
      foreach ($tagged_items['table']['#rows'] as $key => $tagged_item) {
        $item = $class::load($key);
        $item_tags = $item
          ->getTags();
        if (!in_array($tag, $item_tags)) {
          unset($tagged_items['table']['#rows'][$key]);
        }
      }
      $output["tags_table_{$tag}"][$tag] = $tagged_items;
      if (!isset($output['table']['#attributes']['class'])) {
        $output["tags_table_{$tag}"][$tag]['table']['#attributes']['class'] = [
          'searchable-list',
        ];
      }
      else {
        $output["tags_table_{$tag}"][$tag]['table']['#attributes']['class'][] = [
          'searchable-list',
        ];
      }
    }
    $untagged_items = $table;
    foreach ($untagged_items['table']['#rows'] as $key => $tagged_item) {
      $item = $class::load($key);
      $item_tags = $item
        ->getTags();
      if (count($item_tags)) {
        unset($untagged_items['table']['#rows'][$key]);
      }
    }
    $output['tags_table_no_tags'] = [
      '#type' => 'details',
      '#title' => $this
        ->t('Untagged items'),
      '#open' => FALSE,
    ];
    $output['tags_table_no_tags'][''] = $untagged_items;
    if (!isset($output['table']['#attributes']['class'])) {
      $output['tags_table_no_tags']['']['table']['#attributes']['class'] = [
        'searchable-list',
      ];
    }
    else {
      $output['tags_table_no_tags']['']['table']['#attributes']['class'][] = [
        'searchable-list',
      ];
    }
  }
  else {
    $output += parent::render();
    if (!isset($output['table']['#attributes']['class'])) {
      $output['table']['#attributes']['class'] = [
        'searchable-list',
      ];
    }
    else {
      $output['table']['#attributes']['class'][] = [
        'searchable-list',
      ];
    }
  }
  return $output;
}