Yaffs site version 1.1
[yaffs-website] / web / modules / contrib / blazy / src / Dejavu / BlazyEntityBase.php
1 <?php
2
3 namespace Drupal\blazy\Dejavu;
4
5 use Drupal\Core\Form\FormStateInterface;
6 use Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase;
7
8 /**
9  * Base class for entity reference formatters without field details.
10  */
11 abstract class BlazyEntityBase extends EntityReferenceFormatterBase {
12
13   /**
14    * Returns media contents.
15    */
16   public function buildElements(array &$build, $entities, $langcode) {
17     foreach ($entities as $delta => $entity) {
18       // Protect ourselves from recursive rendering.
19       static $depth = 0;
20       $depth++;
21       if ($depth > 20) {
22         $this->loggerFactory->get('entity')->error('Recursive rendering detected when rendering entity @entity_type @entity_id. Aborting rendering.', ['@entity_type' => $entity->getEntityTypeId(), '@entity_id' => $entity->id()]);
23         return $build;
24       }
25
26       $build['settings']['delta'] = $delta;
27       if ($entity->id()) {
28         $this->buildElement($build, $entity, $langcode);
29
30         // Add the entity to cache dependencies so to clear when it is updated.
31         $this->manager()->getRenderer()->addCacheableDependency($build['items'][$delta], $entity);
32       }
33       else {
34         $this->referencedEntities = NULL;
35         // This is an "auto_create" item.
36         $build['items'][$delta] = ['#markup' => $entity->label()];
37       }
38
39       $depth = 0;
40     }
41
42     // Supports Blazy formatter multi-breakpoint images if available.
43     if (empty($build['settings']['vanilla'])) {
44       $this->formatter->isBlazy($build['settings'], $build['items'][0]);
45     }
46   }
47
48   /**
49    * Returns item contents.
50    */
51   public function buildElement(array &$build, $entity, $langcode) {
52     $view_mode = empty($build['settings']['view_mode']) ? 'full' : $build['settings']['view_mode'];
53     $delta = $build['settings']['delta'];
54
55     $build['items'][$delta] = $this->manager()->getEntityTypeManager()->getViewBuilder($entity->getEntityTypeId())->view($entity, $view_mode, $langcode);
56   }
57
58   /**
59    * {@inheritdoc}
60    */
61   public function settingsForm(array $form, FormStateInterface $form_state) {
62     $element    = [];
63     $definition = $this->getScopedFormElements();
64
65     $definition['_views'] = isset($form['field_api_classes']);
66
67     $this->admin()->buildSettingsForm($element, $definition);
68     return $element;
69   }
70
71   /**
72    * Defines the scope for the form elements.
73    */
74   public function getScopedFormElements() {
75     $field       = $this->fieldDefinition;
76     $entity_type = $field->getTargetEntityTypeId();
77     $target_type = $this->getFieldSetting('target_type');
78     $views_ui    = $this->getFieldSetting('handler') == 'default';
79     $bundles     = $views_ui ? [] : $this->getFieldSetting('handler_settings')['target_bundles'];
80
81     return [
82       'current_view_mode' => $this->viewMode,
83       'entity_type'       => $entity_type,
84       'field_type'        => $field->getType(),
85       'field_name'        => $field->getName(),
86       'plugin_id'         => $this->getPluginId(),
87       'settings'          => $this->getSettings(),
88       'target_bundles'    => $bundles,
89       'target_type'       => $target_type,
90       'view_mode'         => $this->viewMode,
91     ];
92   }
93
94 }