hn-8.x-1.x-dev/src/Plugin/HnEntityManagerPlugin/ViewHandler.php
src/Plugin/HnEntityManagerPlugin/ViewHandler.php
<?php namespace Drupal\hn\Plugin\HnEntityManagerPlugin; use Drupal\Core\Entity\EntityInterface; use Drupal\hn\Plugin\HnEntityManagerPluginBase; use Drupal\taxonomy\Entity\Term; /** * Provides a HN Entity Handler for the View entity. * * @HnEntityManagerPlugin( * id = "hn_view" * ) */ class ViewHandler extends HnEntityManagerPluginBase { protected $supports = 'Drupal\views\Entity\View'; /** * {@inheritdoc} */ public function handle(EntityInterface $entity, $view_mode = 'default') { /** @var \Drupal\views\Entity\View $entity */ /** @var \Drupal\hn\HnResponseService $responseService */ $responseService = \Drupal::getContainer()->get('hn.response'); $display = $entity->getDisplay($view_mode); $executable = $entity->getExecutable(); $executable->execute(); $display_view_mode_options = $display['display_options']['row']['options']; $results = []; // For each view result row. foreach ($executable->result as $resultRow) { // Is Search API view. if (empty($resultRow->_entity)) { $entity = $resultRow->_object->getValue(); if (!empty($display_view_mode_options['view_modes']['entity:' . $entity->getEntityTypeId()][$entity->bundle()])) { $display_view_mode = $display_view_mode_options['view_modes']['entity:' . $entity->getEntityTypeId()][$entity->bundle()]; } } else { $display_view_mode = $display_view_mode_options['view_mode']; $entity = $resultRow->_entity; } if (empty($display_view_mode)) { $display_view_mode = 'default'; } $responseService->addEntity($entity, $display_view_mode); $results[] = $entity->uuid(); } $response = []; $response['display'] = $display['display_options']; unset($response['display']['access']); unset($response['display']['cache']); unset($response['display']['query']); unset($response['display']['style']); unset($response['display']['row']); unset($response['display']['fields']); $filters = []; foreach ($response['display']['filters'] as $filter) { if (!empty($filter['exposed'])) { if ($filter['plugin_id'] === 'taxonomy_index_tid') { $query = \Drupal::entityQuery('taxonomy_term'); $query->condition('vid', $filter['vid']); $tids = $query->execute(); $terms = Term::loadMultiple($tids); foreach ($terms as $term) { $responseService->addEntity($term); $filter['options'][] = $term->uuid(); } } $filters[] = $filter; } } $response['display']['filters'] = $filters; $path = \Drupal::request()->get('path'); $response['total_items__' . $path] = $executable->pager->total_items; $response['results__' . $path] = $results; return $response; } }