entityManager = $entity_manager; $this->languageManager = $language_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('entity.manager'), $container->get('language_manager') ); } /** * {@inheritdoc} */ public function usesGroupBy() { return FALSE; } /** * {@inheritdoc} */ public function defineOptions() { $options = parent::defineOptions(); $options['view_mode'] = ['default' => 'default']; return $options; } /** * {@inheritdoc} */ public function buildOptionsForm(&$form, FormStateInterface $form_state) { parent::buildOptionsForm($form, $form_state); $form['view_mode'] = [ '#type' => 'select', '#options' => $this->entityManager->getViewModeOptions($this->getEntityTypeId()), '#title' => $this->t('View mode'), '#default_value' => $this->options['view_mode'], ]; } /** * {@inheritdoc} */ public function render(ResultRow $values) { $entity = $this->getEntityTranslation($this->getEntity($values), $values); $build = []; if (isset($entity)) { $access = $entity->access('view', NULL, TRUE); $build['#access'] = $access; if ($access->isAllowed()) { $view_builder = $this->entityManager->getViewBuilder($this->getEntityTypeId()); $build += $view_builder->view($entity, $this->options['view_mode']); } } return $build; } /** * {@inheritdoc} */ public function getCacheContexts() { return []; } /** * {@inheritdoc} */ public function getCacheTags() { $view_display_storage = $this->entityManager->getStorage('entity_view_display'); $view_displays = $view_display_storage->loadMultiple($view_display_storage ->getQuery() ->condition('targetEntityType', $this->getEntityTypeId()) ->execute()); $tags = []; foreach ($view_displays as $view_display) { $tags = array_merge($tags, $view_display->getCacheTags()); } return $tags; } /** * {@inheritdoc} */ public function getCacheMaxAge() { return Cache::PERMANENT; } /** * {@inheritdoc} */ public function query() { // We purposefully do not call parent::query() because we do not want the // default query behavior for Views fields. Instead, let the entity // translation renderer provide the correct query behavior. if ($this->languageManager->isMultilingual()) { $this->getEntityTranslationRenderer()->query($this->query, $this->relationship); } } /** * {@inheritdoc} */ public function getEntityTypeId() { return $this->getEntityType(); } /** * {@inheritdoc} */ protected function getEntityManager() { return $this->entityManager; } /** * {@inheritdoc} */ protected function getLanguageManager() { return $this->languageManager; } /** * {@inheritdoc} */ protected function getView() { return $this->view; } /** * {@inheritdoc} */ public function calculateDependencies() { $dependencies = parent::calculateDependencies(); $view_mode = $this->entityManager ->getStorage('entity_view_mode') ->load($this->getEntityTypeId() . '.' . $this->options['view_mode']); if ($view_mode) { $dependencies[$view_mode->getConfigDependencyKey()][] = $view_mode->getConfigDependencyName(); } return $dependencies; } }