Added missing modules, including some as submodules.
[yaffs-website] / web / modules / contrib / entity_browser / src / WidgetValidationBase.php
1 <?php
2
3 namespace Drupal\entity_browser;
4
5 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
6 use Drupal\Core\Plugin\PluginBase;
7 use Drupal\Core\TypedData\DataDefinitionInterface;
8 use Drupal\Core\TypedData\TypedDataManagerInterface;
9 use Symfony\Component\DependencyInjection\ContainerInterface;
10 use Symfony\Component\Validator\ConstraintViolationList;
11
12 /**
13  * Base implementation for widget validation plugins.
14  */
15 abstract class WidgetValidationBase extends PluginBase implements WidgetValidationInterface, ContainerFactoryPluginInterface {
16
17   /**
18    * Plugin label.
19    *
20    * @var string
21    */
22   protected $label;
23
24   /**
25    * The Typed Data Manager service.
26    *
27    * @var \Drupal\Core\TypedData\TypedDataManagerInterface
28    */
29   protected $typedDataManager;
30
31   public function __construct(array $configuration, $plugin_id, $plugin_definition, TypedDataManagerInterface $typed_data_manager) {
32     $plugin_definition += [
33       'constraint' => NULL,
34     ];
35     parent::__construct($configuration, $plugin_id, $plugin_definition);
36     $this->typedDataManager = $typed_data_manager;
37   }
38
39   /**
40    * {@inheritdoc}
41    */
42   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
43     return new static(
44       $configuration,
45       $plugin_id,
46       $plugin_definition,
47       $container->get('typed_data_manager')
48     );
49   }
50
51   /**
52    * {@inheritdoc}
53    */
54   public function defaultConfiguration() {
55     return [];
56   }
57
58   /**
59    * {@inheritdoc}
60    */
61   public function label() {
62     $this->label;
63   }
64
65   /**
66    * {@inheritdoc}
67    */
68   public function validate(array $entities, $options = []) {
69     $plugin_definition = $this->getPluginDefinition();
70     $data_definition = $this->getDataDefinition($plugin_definition['data_type'], $plugin_definition['constraint'], $options);
71     return $this->validateDataDefinition($data_definition, $entities);
72   }
73
74   /**
75    * {@inheritdoc}
76    */
77   public function getConfiguration() {
78     return $this->configuration;
79   }
80
81   /**
82    * {@inheritdoc}
83    */
84   public function setConfiguration(array $configuration) {
85     $this->configuration = $configuration;
86   }
87
88   /**
89    * {@inheritdoc}
90    */
91   public function calculateDependencies() {
92     return [];
93   }
94
95   /**
96    * Gets a data definition and optionally adds a constraint.
97    *
98    * @param string $data_type
99    *   The data type plugin ID, for which a constraint should be added.
100    * @param string $constraint_name
101    *   The name of the constraint to add, i.e. its plugin id.
102    * @param $options
103    *   Array of options needed by the constraint validator.
104    *
105    * @return \Drupal\Core\TypedData\DataDefinitionInterface
106    *   A data definition object for the given data type.
107    */
108   protected function getDataDefinition($data_type, $constraint_name = NULL, $options = []) {
109     $data_definition = $this->typedDataManager->createDataDefinition($data_type);
110     if ($constraint_name) {
111       $data_definition->addConstraint($constraint_name, $options);
112     }
113     return $data_definition;
114   }
115
116   /**
117    * Creates and validates instances of typed data for each Entity.
118    *
119    * @param \Drupal\Core\TypedData\DataDefinitionInterface $data_definition
120    *   The data definition generated from ::getDataDefinition().
121    * @param array $entities
122    *   An array of Entities to validate the definition against
123    *
124    * @return \Symfony\Component\Validator\ConstraintViolationListInterface
125    *   A list of violations.
126    */
127   protected function validateDataDefinition(DataDefinitionInterface $data_definition, array $entities) {
128     $violations = new ConstraintViolationList();
129     foreach ($entities as $entity) {
130       $validation_result = $this->typedDataManager->create($data_definition, $entity)->validate();
131       $violations->addAll($validation_result);
132     }
133
134     return $violations;
135   }
136 }