Skip to content
Snippets Groups Projects
Verified Commit 8e3a3f6e authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3399036 follow-up by Wim Leers, godotislate: CKEditor5PluginManager:...

Issue #3399036 follow-up by Wim Leers, godotislate: CKEditor5PluginManager: use PHP attributes instead of doctrine annotations

(cherry picked from commit d18ca8ba)
parent a6ae5c08
No related branches found
No related tags found
25 merge requests!122353526426-warning-for-missing,!12212Issue #3445525 by alexpott, japerry, catch, mglaman, longwave: Add BC layer...,!11958Issue #3490507 by alexpott, smustgrave: Fix bogus mocking in...,!11769Issue #3517987: Add option to contextual filters to encode slashes in query parameter.,!11185Issue #3477324 by andypost, alexpott: Fix usage of str_getcsv() and fgetcsv() for PHP 8.4,!10602Issue #3438769 by vinmayiswamy, antonnavi, michelle, amateescu: Sub workspace does not clear,!10301Issue #3469309 by mstrelan, smustgrave, moshe weitzman: Use one-time login...,!10187Issue #3487488 by dakwamine: ExtensionMimeTypeGuesser::guessMimeType must support file names with "0" (zero) like foo.0.zip,!9944Issue #3483353: Consider making the createCopy config action optionally fail...,!9929Issue #3445469 by pooja_sharma, smustgrave: Add additional test coverage for...,!9787Resolve issue 3479427 - bootstrap barrio issue under Windows,!9742Issue #3463908 by catch, quietone: Split OptionsFieldUiTest into two,!9526Issue #3458177 by mondrake, catch, quietone, godotislate, longwave, larowlan,...,!8738Issue #3424162 by camilledavis, dineshkumarbollu, smustgrave: Claro...,!8704Make greek characters available in ckeditor5,!8597Draft: Issue #3442259 by catch, quietone, dww: Reduce time of Migrate Upgrade tests...,!8533Issue #3446962 by kim.pepper: Remove incorrectly added...,!8517Issue #3443748 by NexusNovaz, smustgrave: Testcase creates false positive,!8325Update file Sort.php,!8095Expose document root on install,!7930Resolve #3427374 "Taxonomytid viewsargumentdefault plugin",!7445Issue #3440169: When using drupalGet(), provide an associative array for $headers,!6502Draft: Resolve #2938524 "Plach testing issue",!38582585169-10.1.x,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key
Pipeline #160027 passed
Pipeline: drupal

#160045

    Pipeline: drupal

    #160042

      Pipeline: drupal

      #160039

        +1
        ......@@ -6,6 +6,8 @@
        use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
        use Drupal\Component\Plugin\Attribute\Plugin;
        use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
        use Drupal\Core\StringTranslation\TranslatableMarkup;
        /**
        * The CKEditor5Plugin attribute.
        ......@@ -55,6 +57,39 @@ public function __construct(
        array|DrupalAspectsOfCKEditor5Plugin|null $drupal = NULL,
        public readonly ?string $deriver = NULL,
        ) {
        // If either of the two aspects of the plugin definition is in array form,
        // then this is a YAML-defined CKEditor 5 plugin definition. To avoid errors
        // due to violating either Attribute class constructor, verify basic data
        // shape requirements here. This provides a better DX for YAML-defined
        // plugins, and avoids the need for a PHP IDE or debugger.
        // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::processDefinition()
        // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::validateCKEditor5Aspects()
        // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::validateDrupalAspects()
        if (!$drupal instanceof DrupalAspectsOfCKEditor5Plugin) {
        if ($drupal === NULL) {
        throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "drupal" key.', $id));
        }
        // TRICKY: $this->deriver is incorrect due to AttributeBridgeDecorator!
        // If there's no deriver, validate here. Otherwise: the base definition is
        // allowed to be incomplete; let CKEditor5PluginManager::processDefinition
        // perform the validation.
        // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::getDeriver()
        // @see \Drupal\Component\Plugin\Discovery\AttributeBridgeDecorator::getDefinitions()
        if (!isset($drupal['deriver'])) {
        if (isset($drupal['label']) && !is_string($drupal['label']) && !$drupal['label'] instanceof TranslatableMarkup) {
        throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a "drupal.label" value that is not a string nor a TranslatableMarkup instance.', $id));
        }
        if (!$ckeditor5 instanceof CKEditor5AspectsOfCKEditor5Plugin) {
        if ($ckeditor5 === NULL) {
        throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "ckeditor5" key.', $id));
        }
        if (!isset($ckeditor5['plugins'])) {
        throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "ckeditor5.plugins" key.', $id));
        }
        }
        }
        }
        $this->ckeditor5 = is_array($ckeditor5) ? new CKEditor5AspectsOfCKEditor5Plugin(...$ckeditor5) : $ckeditor5;
        $this->drupal = is_array($drupal) ? new DrupalAspectsOfCKEditor5Plugin(...$drupal) : $drupal;
        }
        ......
        ......@@ -225,15 +225,16 @@ public static function providerTestInvalidPluginDefinitions(): \Generator {
        yield 'only plugin ID, nothing else' => [
        <<<YAML
        foo_bar: {}
        ckeditor5_invalid_plugin_foo_bar: {}
        YAML,
        InvalidPluginDefinitionException::class,
        'The "foo_bar" CKEditor 5 plugin definition must have a plugin ID that starts with "ckeditor5_invalid_plugin_".',
        'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "drupal" key.',
        ];
        yield 'fixed plugin ID' => [
        yield 'added drupal' => [
        <<<YAML
        ckeditor5_invalid_plugin_foo_bar: {}
        ckeditor5_invalid_plugin_foo_bar:
        drupal: {}
        YAML,
        InvalidPluginDefinitionException::class,
        'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "ckeditor5" key.',
        ......@@ -243,22 +244,13 @@ public static function providerTestInvalidPluginDefinitions(): \Generator {
        <<<YAML
        ckeditor5_invalid_plugin_foo_bar:
        ckeditor5: {}
        YAML,
        \ArgumentCountError::class,
        NULL,
        ];
        yield 'added ckeditor5.plugins' => [
        <<<YAML
        ckeditor5_invalid_plugin_foo_bar:
        ckeditor5:
        plugins: {}
        drupal: {}
        YAML,
        InvalidPluginDefinitionException::class,
        'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "drupal" key.',
        'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "ckeditor5.plugins" key.',
        ];
        yield 'added drupal' => [
        yield 'added ckeditor5.plugins' => [
        <<<YAML
        ckeditor5_invalid_plugin_foo_bar:
        ckeditor5:
        ......@@ -277,7 +269,8 @@ public static function providerTestInvalidPluginDefinitions(): \Generator {
        drupal:
        label: {}
        YAML,
        \TypeError::class,
        InvalidPluginDefinitionException::class,
        'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition has a "drupal.label" value that is not a string nor a TranslatableMarkup instance.',
        ];
        yield 'fixed drupal.label' => [
        ......@@ -347,6 +340,21 @@ public static function providerTestInvalidPluginDefinitions(): \Generator {
        YAML,
        ];
        yield 'change plugin ID to something invalid' => [
        <<<YAML
        foo_bar:
        ckeditor5:
        plugins: {}
        drupal:
        label: "Foo bar"
        elements:
        - <foo>
        - <bar>
        YAML,
        InvalidPluginDefinitionException::class,
        'The "foo_bar" CKEditor 5 plugin definition must have a plugin ID that starts with "ckeditor5_invalid_plugin_".',
        ];
        yield 'alternative fix for drupal.elements' => [
        <<<YAML
        ckeditor5_invalid_plugin_foo_bar:
        ......
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Please register or to comment