Version 1
[yaffs-website] / web / modules / contrib / slick / src / Plugin / Field / FieldFormatter / SlickEntityFormatterBase.php
1 <?php
2
3 namespace Drupal\slick\Plugin\Field\FieldFormatter;
4
5 use Drupal\Core\Field\FieldDefinitionInterface;
6 use Drupal\Core\Field\FieldItemListInterface;
7 use Drupal\Core\Logger\LoggerChannelFactoryInterface;
8 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
9 use Drupal\blazy\Dejavu\BlazyEntityBase;
10 use Drupal\slick\SlickFormatterInterface;
11 use Drupal\slick\SlickManagerInterface;
12 use Drupal\slick\SlickDefault;
13 use Symfony\Component\DependencyInjection\ContainerInterface;
14
15 /**
16  * Base class for slick entity reference formatters without field details.
17  *
18  * @see \Drupal\slick_paragraphs\Plugin\Field\FieldFormatter
19  */
20 abstract class SlickEntityFormatterBase extends BlazyEntityBase implements ContainerFactoryPluginInterface {
21
22   use SlickFormatterTrait;
23
24   /**
25    * The logger factory.
26    *
27    * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
28    */
29   protected $loggerFactory;
30
31   /**
32    * Constructs a SlickMediaFormatter instance.
33    */
34   public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, LoggerChannelFactoryInterface $logger_factory, SlickFormatterInterface $formatter, SlickManagerInterface $manager) {
35     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
36     $this->loggerFactory = $logger_factory;
37     $this->formatter     = $formatter;
38     $this->manager       = $manager;
39   }
40
41   /**
42    * {@inheritdoc}
43    */
44   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
45     return new static(
46       $plugin_id,
47       $plugin_definition,
48       $configuration['field_definition'],
49       $configuration['settings'],
50       $configuration['label'],
51       $configuration['view_mode'],
52       $configuration['third_party_settings'],
53       $container->get('logger.factory'),
54       $container->get('slick.formatter'),
55       $container->get('slick.manager')
56     );
57   }
58
59   /**
60    * Returns the blazy manager.
61    */
62   public function blazyManager() {
63     return $this->formatter;
64   }
65
66   /**
67    * {@inheritdoc}
68    */
69   public static function defaultSettings() {
70     $settings = SlickDefault::baseSettings();
71     $settings['view_mode'] = '';
72
73     return $settings;
74   }
75
76   /**
77    * {@inheritdoc}
78    */
79   public function viewElements(FieldItemListInterface $items, $langcode) {
80     $entities = $this->getEntitiesToView($items, $langcode);
81
82     // Early opt-out if the field is empty.
83     if (empty($entities)) {
84       return [];
85     }
86
87     // Collects specific settings to this formatter.
88     $settings = $this->getSettings();
89
90     // Asks for Blazy to deal with iFrames, and mobile-optimized lazy loading.
91     $settings['blazy']     = TRUE;
92     $settings['plugin_id'] = $this->getPluginId();
93     $settings['vanilla']   = TRUE;
94
95     $build = ['settings' => $settings];
96
97     $this->formatter->buildSettings($build, $items);
98
99     // Build the elements.
100     $this->buildElements($build, $entities, $langcode);
101
102     return $this->manager()->build($build);
103   }
104
105   /**
106    * {@inheritdoc}
107    */
108   public function getScopedFormElements() {
109     return ['no_layouts' => TRUE] + parent::getScopedFormElements();
110   }
111
112 }