class EnabledConfigurablePluginsConstraintValidator

Same name and namespace in other branches
  1. 9 core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php \Drupal\ckeditor5\Plugin\Validation\Constraint\EnabledConfigurablePluginsConstraintValidator
  2. 11.x core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php \Drupal\ckeditor5\Plugin\Validation\Constraint\EnabledConfigurablePluginsConstraintValidator

Enabled configurable plugin settings validator.

@internal

Hierarchy

Expanded class hierarchy of EnabledConfigurablePluginsConstraintValidator

File

core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php, line 18

Namespace

Drupal\ckeditor5\Plugin\Validation\Constraint
View source
class EnabledConfigurablePluginsConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
    use PluginManagerDependentValidatorTrait;
    use TextEditorObjectDependentValidatorTrait;
    
    /**
     * {@inheritdoc}
     *
     * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
     *   Thrown when the given constraint is not supported by this validator.
     */
    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) {
            // Create a fresh instance of this CKEditor 5 plugin, not tied to a text
            // editor configuration entity.
            $plugin = $this->pluginManager
                ->getPlugin($id, NULL);
            // If this plugin is configurable but it has empty default configuration,
            // that means the configuration must be stored out of band.
            // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Image
            // @see editor_image_upload_settings_form()
            $default_configuration = $plugin->defaultConfiguration();
            if ($default_configuration === []) {
                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();
            }
        }
    }
    
    /**
     * Gets all configurable CKEditor 5 plugin definitions that are enabled.
     *
     * @return \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition[]
     *   An array of enabled configurable CKEditor 5 plugin definitions.
     */
    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;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overrides
EnabledConfigurablePluginsConstraintValidator::getConfigurableEnabledDefinitions private function Gets all configurable CKEditor 5 plugin definitions that are enabled.
EnabledConfigurablePluginsConstraintValidator::validate public function
PluginManagerDependentValidatorTrait::$pluginManager protected property The CKEditor 5 plugin manager.
PluginManagerDependentValidatorTrait::create public static function 1
PluginManagerDependentValidatorTrait::getEnableableDisabledPlugins private function Gets all disabled CKEditor 5 plugin definitions the user can enable.
PluginManagerDependentValidatorTrait::getOtherEnabledPlugins private function Gets all other enabled CKEditor 5 plugin definitions.
PluginManagerDependentValidatorTrait::__construct public function Constructs a CKEditor5ConstraintValidatorTrait object. 1
TextEditorObjectDependentValidatorTrait::createTextEditorObjectFromContext private function Creates a text editor object from the execution context.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.