X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fentity_browser%2Fsrc%2FWidgetValidationBase.php;fp=web%2Fmodules%2Fcontrib%2Fentity_browser%2Fsrc%2FWidgetValidationBase.php;h=57db8f79735b16bdf439654741c770dc2e041efb;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/entity_browser/src/WidgetValidationBase.php b/web/modules/contrib/entity_browser/src/WidgetValidationBase.php new file mode 100644 index 000000000..57db8f797 --- /dev/null +++ b/web/modules/contrib/entity_browser/src/WidgetValidationBase.php @@ -0,0 +1,136 @@ + NULL, + ]; + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->typedDataManager = $typed_data_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('typed_data_manager') + ); + } + + /** + * {@inheritdoc} + */ + public function defaultConfiguration() { + return []; + } + + /** + * {@inheritdoc} + */ + public function label() { + $this->label; + } + + /** + * {@inheritdoc} + */ + public function validate(array $entities, $options = []) { + $plugin_definition = $this->getPluginDefinition(); + $data_definition = $this->getDataDefinition($plugin_definition['data_type'], $plugin_definition['constraint'], $options); + return $this->validateDataDefinition($data_definition, $entities); + } + + /** + * {@inheritdoc} + */ + public function getConfiguration() { + return $this->configuration; + } + + /** + * {@inheritdoc} + */ + public function setConfiguration(array $configuration) { + $this->configuration = $configuration; + } + + /** + * {@inheritdoc} + */ + public function calculateDependencies() { + return []; + } + + /** + * Gets a data definition and optionally adds a constraint. + * + * @param string $data_type + * The data type plugin ID, for which a constraint should be added. + * @param string $constraint_name + * The name of the constraint to add, i.e. its plugin id. + * @param $options + * Array of options needed by the constraint validator. + * + * @return \Drupal\Core\TypedData\DataDefinitionInterface + * A data definition object for the given data type. + */ + protected function getDataDefinition($data_type, $constraint_name = NULL, $options = []) { + $data_definition = $this->typedDataManager->createDataDefinition($data_type); + if ($constraint_name) { + $data_definition->addConstraint($constraint_name, $options); + } + return $data_definition; + } + + /** + * Creates and validates instances of typed data for each Entity. + * + * @param \Drupal\Core\TypedData\DataDefinitionInterface $data_definition + * The data definition generated from ::getDataDefinition(). + * @param array $entities + * An array of Entities to validate the definition against + * + * @return \Symfony\Component\Validator\ConstraintViolationListInterface + * A list of violations. + */ + protected function validateDataDefinition(DataDefinitionInterface $data_definition, array $entities) { + $violations = new ConstraintViolationList(); + foreach ($entities as $entity) { + $validation_result = $this->typedDataManager->create($data_definition, $entity)->validate(); + $violations->addAll($validation_result); + } + + return $violations; + } +}