EnabledConfigurablePluginsConstraintValidator.php in Drupal 10
File
core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php
View source
<?php
declare (strict_types=1);
namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
class EnabledConfigurablePluginsConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
use PluginManagerDependentValidatorTrait;
use TextEditorObjectDependentValidatorTrait;
public function validate($settings, Constraint $constraint) {
if (!$constraint instanceof EnabledConfigurablePluginsConstraint) {
throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\\EnabledConfigurablePluginsConstraint');
}
$configurable_enabled_definitions = $this
->getConfigurableEnabledDefinitions();
try {
$plugin_settings = $this->context
->getRoot()
->get('settings.plugins')
->getValue();
} catch (\InvalidArgumentException $e) {
$plugin_settings = [];
}
foreach ($configurable_enabled_definitions as $id => $definition) {
if ($definition
->hasConditions() && isset($definition
->getConditions()['imageUploadStatus']) && $definition
->getConditions()['imageUploadStatus'] === TRUE) {
continue;
}
if (!isset($plugin_settings[$id]) || empty($plugin_settings[$id])) {
$this->context
->buildViolation($constraint->message)
->setParameter('%plugin_label', (string) $definition
->label())
->setParameter('%plugin_id', $id)
->atPath("plugins.{$id}")
->addViolation();
}
}
}
private function getConfigurableEnabledDefinitions() : array {
$text_editor = $this
->createTextEditorObjectFromContext();
$enabled_definitions = $this->pluginManager
->getEnabledDefinitions($text_editor);
$configurable_enabled_definitions = array_filter($enabled_definitions, function (CKEditor5PluginDefinition $definition) : bool {
return $definition
->isConfigurable();
});
return $configurable_enabled_definitions;
}
}