Loading modules/custom_elements_ui/src/Processor/DefaultContentEntityUiProcessor.phpdeleted 100644 → 0 +0 −71 Original line number Diff line number Diff line <?php namespace Drupal\custom_elements_ui\Processor; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\custom_elements\CustomElement; use Drupal\custom_elements\CustomElementGeneratorTrait; use Drupal\custom_elements\CustomElementsProcessorFieldUtilsTrait; use Drupal\custom_elements\Processor\CustomElementProcessorInterface; /** * Custom elements ui processor for content entities. */ class DefaultContentEntityUiProcessor implements CustomElementProcessorInterface { use CustomElementGeneratorTrait; use CustomElementsProcessorFieldUtilsTrait; /** * {@inheritdoc} */ public function supports($data, $view_mode) { if ($data instanceof ContentEntityInterface) { $display = EntityViewDisplay::collectRenderDisplay($data, $view_mode); $is_enabled = $display->getThirdPartySetting('custom_elements', 'enabled', FALSE); // @todo Do not check it here but have proper validation instead. $ce_name = $display->getThirdPartySetting('custom_elements', 'custom_element_name', ''); $ce_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); $is_configured_properly = !empty($ce_name) && !empty($ce_fields); return $is_enabled && $is_configured_properly; } return FALSE; } /** * {@inheritdoc} */ public function addtoElement($data, CustomElement $element, $view_mode) { assert($data instanceof ContentEntityInterface); $entity = $data; $display = EntityViewDisplay::collectRenderDisplay($data, $view_mode); $ce_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); $ce_name = $display->getThirdPartySetting('custom_elements', 'custom_element_name', ''); $element->setTag($ce_name); foreach ($ce_fields as $field_name => $options) { if ($this->fieldIsAccessible($entity, $field_name, $element)) { if ($options['is_slot']) { $nested_elements = []; foreach ($entity->get($field_name) as $field_item) { $nested_element = new CustomElement(); $nested_element->setTagPrefix('field'); $nested_element->setTag($entity->get($field_name)->getFieldDefinition()->getType()); $this->getCustomElementGenerator()->process($field_item, $nested_element, $view_mode); $nested_elements[] = $nested_element; } $element->setSlotFromNestedElements($options['label'], $nested_elements); } else { $field_items = $entity->get($field_name); $property = $field_items->getFieldDefinition()->getFieldStorageDefinition()->getMainPropertyName(); $element->setAttribute($options['label'], $field_items->{$property}); } } } } } src/Processor/DefaultContentEntityProcessor.php +51 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\custom_elements\Processor; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; Loading Loading @@ -90,10 +91,18 @@ class DefaultContentEntityProcessor implements CustomElementProcessorInterface { $displays = EntityViewDisplay::collectRenderDisplays([$entity], $viewMode); $display = reset($displays); if ($display->getThirdPartySetting('layout_builder', 'enabled')) { // If custom element for given view mode was configured in UI then render it // accordingly. $ce_display_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); if (!empty($ce_display_fields)) { $this->buildConfiguredCustomElement($entity, $element, $display); } // Otherwise render it from layout builder config if enabled/ elseif ($display->getThirdPartySetting('layout_builder', 'enabled')) { // Skip processing of the fields and let the layout builder render it all. $this->addLayoutBuilderContent($entity, $element, $display); } // Or render every view mode component automatically. else { foreach ($display->getComponents() as $field_name => $options) { if ($this->fieldIsAccessible($entity, $field_name, $element)) { Loading Loading @@ -139,6 +148,47 @@ class DefaultContentEntityProcessor implements CustomElementProcessorInterface { $custom_element->addCacheableDependency(BubbleableMetadata::createFromRenderArray($build)); } /** * Builds custom element from configuration. * * @param \Drupal\Core\Entity\EntityInterface $entity * The entity. * @param \Drupal\custom_elements\CustomElement $custom_element * The custom element. * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display * Entity view display entity. */ protected function buildConfiguredCustomElement(EntityInterface $entity, CustomElement $custom_element, EntityViewDisplayInterface $display) { // Set custom element name if configured. // @todo Should custom element name be optional in the form? $ce_name = $display->getThirdPartySetting('custom_elements', 'custom_element_name'); if (!empty($ce_name)) { $custom_element->setTag($ce_name); } $ce_display_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); foreach ($ce_display_fields as $field_name => $field_options) { if ($this->fieldIsAccessible($entity, $field_name, $custom_element)) { if ($field_options['is_slot']) { $nested_elements = []; foreach ($entity->get($field_name) as $field_item) { $nested_element = new CustomElement(); $nested_element->setTagPrefix('field'); $nested_element->setTag($entity->get($field_name)->getFieldDefinition()->getType()); // @todo Check if $display->id() returns expected value. $this->getCustomElementGenerator()->process($field_item, $nested_element, $display->id()); $nested_elements[] = $nested_element; } $custom_element->setSlotFromNestedElements($field_options['label'], $nested_elements); } else { $field_items = $entity->get($field_name); $property = $field_items->getFieldDefinition()->getFieldStorageDefinition()->getMainPropertyName(); $custom_element->setAttribute($field_options['label'], $field_items->{$property}); } } } } /** * Converts the block content render array into custom elements. * Loading Loading
modules/custom_elements_ui/src/Processor/DefaultContentEntityUiProcessor.phpdeleted 100644 → 0 +0 −71 Original line number Diff line number Diff line <?php namespace Drupal\custom_elements_ui\Processor; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\custom_elements\CustomElement; use Drupal\custom_elements\CustomElementGeneratorTrait; use Drupal\custom_elements\CustomElementsProcessorFieldUtilsTrait; use Drupal\custom_elements\Processor\CustomElementProcessorInterface; /** * Custom elements ui processor for content entities. */ class DefaultContentEntityUiProcessor implements CustomElementProcessorInterface { use CustomElementGeneratorTrait; use CustomElementsProcessorFieldUtilsTrait; /** * {@inheritdoc} */ public function supports($data, $view_mode) { if ($data instanceof ContentEntityInterface) { $display = EntityViewDisplay::collectRenderDisplay($data, $view_mode); $is_enabled = $display->getThirdPartySetting('custom_elements', 'enabled', FALSE); // @todo Do not check it here but have proper validation instead. $ce_name = $display->getThirdPartySetting('custom_elements', 'custom_element_name', ''); $ce_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); $is_configured_properly = !empty($ce_name) && !empty($ce_fields); return $is_enabled && $is_configured_properly; } return FALSE; } /** * {@inheritdoc} */ public function addtoElement($data, CustomElement $element, $view_mode) { assert($data instanceof ContentEntityInterface); $entity = $data; $display = EntityViewDisplay::collectRenderDisplay($data, $view_mode); $ce_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); $ce_name = $display->getThirdPartySetting('custom_elements', 'custom_element_name', ''); $element->setTag($ce_name); foreach ($ce_fields as $field_name => $options) { if ($this->fieldIsAccessible($entity, $field_name, $element)) { if ($options['is_slot']) { $nested_elements = []; foreach ($entity->get($field_name) as $field_item) { $nested_element = new CustomElement(); $nested_element->setTagPrefix('field'); $nested_element->setTag($entity->get($field_name)->getFieldDefinition()->getType()); $this->getCustomElementGenerator()->process($field_item, $nested_element, $view_mode); $nested_elements[] = $nested_element; } $element->setSlotFromNestedElements($options['label'], $nested_elements); } else { $field_items = $entity->get($field_name); $property = $field_items->getFieldDefinition()->getFieldStorageDefinition()->getMainPropertyName(); $element->setAttribute($options['label'], $field_items->{$property}); } } } } }
src/Processor/DefaultContentEntityProcessor.php +51 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\custom_elements\Processor; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; Loading Loading @@ -90,10 +91,18 @@ class DefaultContentEntityProcessor implements CustomElementProcessorInterface { $displays = EntityViewDisplay::collectRenderDisplays([$entity], $viewMode); $display = reset($displays); if ($display->getThirdPartySetting('layout_builder', 'enabled')) { // If custom element for given view mode was configured in UI then render it // accordingly. $ce_display_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); if (!empty($ce_display_fields)) { $this->buildConfiguredCustomElement($entity, $element, $display); } // Otherwise render it from layout builder config if enabled/ elseif ($display->getThirdPartySetting('layout_builder', 'enabled')) { // Skip processing of the fields and let the layout builder render it all. $this->addLayoutBuilderContent($entity, $element, $display); } // Or render every view mode component automatically. else { foreach ($display->getComponents() as $field_name => $options) { if ($this->fieldIsAccessible($entity, $field_name, $element)) { Loading Loading @@ -139,6 +148,47 @@ class DefaultContentEntityProcessor implements CustomElementProcessorInterface { $custom_element->addCacheableDependency(BubbleableMetadata::createFromRenderArray($build)); } /** * Builds custom element from configuration. * * @param \Drupal\Core\Entity\EntityInterface $entity * The entity. * @param \Drupal\custom_elements\CustomElement $custom_element * The custom element. * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display * Entity view display entity. */ protected function buildConfiguredCustomElement(EntityInterface $entity, CustomElement $custom_element, EntityViewDisplayInterface $display) { // Set custom element name if configured. // @todo Should custom element name be optional in the form? $ce_name = $display->getThirdPartySetting('custom_elements', 'custom_element_name'); if (!empty($ce_name)) { $custom_element->setTag($ce_name); } $ce_display_fields = $display->getThirdPartySetting('custom_elements', 'custom_element_fields', []); foreach ($ce_display_fields as $field_name => $field_options) { if ($this->fieldIsAccessible($entity, $field_name, $custom_element)) { if ($field_options['is_slot']) { $nested_elements = []; foreach ($entity->get($field_name) as $field_item) { $nested_element = new CustomElement(); $nested_element->setTagPrefix('field'); $nested_element->setTag($entity->get($field_name)->getFieldDefinition()->getType()); // @todo Check if $display->id() returns expected value. $this->getCustomElementGenerator()->process($field_item, $nested_element, $display->id()); $nested_elements[] = $nested_element; } $custom_element->setSlotFromNestedElements($field_options['label'], $nested_elements); } else { $field_items = $entity->get($field_name); $property = $field_items->getFieldDefinition()->getFieldStorageDefinition()->getMainPropertyName(); $custom_element->setAttribute($field_options['label'], $field_items->{$property}); } } } } /** * Converts the block content render array into custom elements. * Loading