/**
  * {@inheritdoc}
  */
 public function generateFieldMetadata(FieldItemListInterface $items, $view_mode)
 {
     $entity = $items->getEntity();
     $field_name = $items->getFieldDefinition()->getName();
     // Early-return if user does not have access.
     $access = $this->accessChecker->accessEditEntityField($entity, $field_name);
     if (!$access) {
         return array('access' => FALSE);
     }
     // Early-return if no editor is available.
     $formatter_id = EntityViewDisplay::collectRenderDisplay($entity, $view_mode)->getRenderer($field_name)->getPluginId();
     $editor_id = $this->editorSelector->getEditor($formatter_id, $items);
     if (!isset($editor_id)) {
         return array('access' => FALSE);
     }
     // Gather metadata, allow the editor to add additional metadata of its own.
     $label = $items->getFieldDefinition()->getLabel();
     $editor = $this->editorManager->createInstance($editor_id);
     $metadata = array('label' => String::checkPlain($label), 'access' => TRUE, 'editor' => $editor_id, 'aria' => t('Entity @type @id, field @field', array('@type' => $entity->getEntityTypeId(), '@id' => $entity->id(), '@field' => $label)));
     $custom_metadata = $editor->getMetadata($items);
     if (count($custom_metadata)) {
         $metadata['custom'] = $custom_metadata;
     }
     return $metadata;
 }
 /**
  * Tests the translation of the range separator.
  */
 public function testSeparatorTranslation()
 {
     // Create an entity.
     $entity = EntityTest::create(['name' => $this->randomString(), $this->fieldStorage->getName() => ['value' => '2016-09-20', 'end_value' => '2016-09-21']]);
     // Verify the untranslated separator.
     $display = EntityViewDisplay::collectRenderDisplay($entity, 'default');
     $build = $display->build($entity);
     $output = $this->container->get('renderer')->renderRoot($build);
     $this->verbose($output);
     $this->assertContains('UNTRANSLATED', (string) $output);
     // Translate the separator.
     ConfigurableLanguage::createFromLangcode('nl')->save();
     /** @var \Drupal\language\ConfigurableLanguageManagerInterface $language_manager */
     $language_manager = $this->container->get('language_manager');
     $language_manager->getLanguageConfigOverride('nl', 'core.entity_view_display.entity_test.entity_test.default')->set('content.' . $this->fieldStorage->getName() . '.settings.separator', 'NL_TRANSLATED!')->save();
     $this->container->get('language.config_factory_override')->setLanguage(new Language(['id' => 'nl']));
     $this->container->get('cache_tags.invalidator')->invalidateTags($entity->getCacheTags());
     $display = EntityViewDisplay::collectRenderDisplay($entity, 'default');
     $build = $display->build($entity);
     $output = $this->container->get('renderer')->renderRoot($build);
     $this->verbose($output);
     $this->assertContains('NL_TRANSLATED!', (string) $output);
 }
 /**
  * Renders a entity_test and sets the output in the internal browser.
  *
  * @param int $id
  *   The entity_test ID to render.
  * @param string $view_mode
  *   (optional) The view mode to use for rendering. Defaults to 'full'.
  * @param bool $reset
  *   (optional) Whether to reset the entity_test controller cache. Defaults to
  *   TRUE to simplify testing.
  */
 protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE)
 {
     if ($reset) {
         \Drupal::entityManager()->getStorage('entity_test')->resetCache(array($id));
     }
     $entity = entity_load('entity_test', $id);
     $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
     $build = $display->build($entity);
     $output = \Drupal::service('renderer')->renderRoot($build);
     $this->setRawContent($output);
     $this->verbose($output);
 }
Beispiel #4
0
 /**
  * Returns an EntityViewDisplay for rendering an individual field.
  *
  * @param \Drupal\Core\Entity\EntityInterface $entity
  *   The entity.
  * @param string $field_name
  *   The field name.
  * @param string|array $display_options
  *   The display options passed to the viewField() method.
  *
  * @return \Drupal\Core\Entity\Display\EntityViewDisplayInterface
  */
 protected function getSingleFieldDisplay($entity, $field_name, $display_options)
 {
     if (is_string($display_options)) {
         // View mode: use the Display configured for the view mode.
         $view_mode = $display_options;
         $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
         // Hide all fields except the current one.
         foreach (array_keys($entity->getFieldDefinitions()) as $name) {
             if ($name != $field_name) {
                 $display->removeComponent($name);
             }
         }
     } else {
         // Array of custom display options: use a runtime Display for the
         // '_custom' view mode. Persist the displays created, to reduce the number
         // of objects (displays and formatter plugins) created when rendering a
         // series of fields individually for cases such as views tables.
         $entity_type_id = $entity->getEntityTypeId();
         $bundle = $entity->bundle();
         $key = $entity_type_id . ':' . $bundle . ':' . $field_name . ':' . crc32(serialize($display_options));
         if (!isset($this->singleFieldDisplays[$key])) {
             $this->singleFieldDisplays[$key] = EntityViewDisplay::create(array('targetEntityType' => $entity_type_id, 'bundle' => $bundle, 'status' => TRUE))->setComponent($field_name, $display_options);
         }
         $display = $this->singleFieldDisplays[$key];
     }
     return $display;
 }
 /**
  * {@inheritdoc}
  */
 public function viewField(FieldItemListInterface $items, $display_options = array())
 {
     $output = array();
     $entity = $items->getEntity();
     $field_name = $items->getFieldDefinition()->getName();
     // Get the display object.
     if (is_string($display_options)) {
         $view_mode = $display_options;
         $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
         // Hide all fields except the current one.
         foreach (array_keys($entity->getFieldDefinitions()) as $name) {
             if ($name != $field_name) {
                 $display->removeComponent($name);
             }
         }
     } else {
         $view_mode = '_custom';
         $display = entity_create('entity_view_display', array('targetEntityType' => $entity->getEntityTypeId(), 'bundle' => $entity->bundle(), 'mode' => $view_mode, 'status' => TRUE));
         $display->setComponent($field_name, $display_options);
     }
     $build = $display->build($entity);
     if (isset($build[$field_name])) {
         $output = $build[$field_name];
     }
     return $output;
 }
Beispiel #6
0
 /**
  * Renders a entity_test and sets the output in the internal browser.
  *
  * @param int $id
  *   The entity_test ID to render.
  * @param string $view_mode
  *   (optional) The view mode to use for rendering. Defaults to 'full'.
  * @param bool $reset
  *   (optional) Whether to reset the entity_test controller cache. Defaults to
  *   TRUE to simplify testing.
  */
 protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE)
 {
     if ($reset) {
         $this->container->get('entity_type.manager')->getStorage('entity_test')->resetCache([$id]);
     }
     $entity = EntityTest::load($id);
     $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
     $build = $display->build($entity);
     $output = $this->container->get('renderer')->renderRoot($build);
     $this->setRawContent($output);
     $this->verbose($output);
 }
 /**
  * {@inheritdoc}
  */
 public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state)
 {
     $entity = $items->getEntity();
     $entity_type_id = $entity->getEntityTypeId();
     $entity_view_modes = $this->getEntityDisplayRepository()->getViewModes($entity_type_id);
     // Get the current values from the entity.
     $values = [];
     /** @var \Drupal\Core\Field\FieldItemInterface $item */
     foreach ($items as $item) {
         $values[$item->view_mode] = ['default' => $item->default, 'panels_display' => $item->panels_display];
     }
     /** @var \Drupal\panelizer\Plugin\PanelizerEntityInterface $panelizer_plugin */
     $panelizer_plugin = $this->getPanelizerManager()->createInstance($entity_type_id, []);
     // If any view modes are missing, then set the default.
     foreach ($entity_view_modes as $view_mode => $view_mode_info) {
         if (!isset($values[$view_mode])) {
             $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
             if ($display->getThirdPartySetting('panelizer', 'enable', FALSE)) {
                 $panels_display = $panelizer_plugin->getDefaultDisplay($display, $entity->bundle(), $view_mode);
                 $values[$view_mode] = ['default' => 'default', 'panels_display' => $this->getPanelsManager()->exportDisplay($panels_display)];
             }
         }
     }
     // Add elements to the form for each view mode.
     $delta = 0;
     foreach ($values as $view_mode => $value) {
         $element[$delta]['view_mode'] = ['#type' => 'value', '#value' => $view_mode];
         if (!empty($this->getSetting('allow_panel_choice'))) {
             $element[$delta]['default'] = ['#type' => 'select', '#options' => [], '#default_value' => $value['default']];
         } else {
             $element[$delta]['default'] = ['#type' => 'value', '#value' => $value['default']];
         }
         $element[$delta]['panels_display'] = ['#type' => 'value', '#value' => $value['panels_display']];
         $delta++;
     }
     return $element;
 }