You are here

function _ckeditor_get_enabled_plugins in Drupal 10

Gets all enabled CKEditor 4 plugins.

@internal

Parameters

\Drupal\editor\EditorInterface $editor: A text editor config entity configured to use CKEditor 4.

Return value

string[] The enabled CKEditor 4 plugin IDs.

2 calls to _ckeditor_get_enabled_plugins()
CKEditor::submitConfigurationForm in core/modules/ckeditor/src/Plugin/Editor/CKEditor.php
ckeditor_editor_presave in core/modules/ckeditor/ckeditor.module
Implements hook_ENTITY_TYPE_presave().

File

core/modules/ckeditor/ckeditor.module, line 139
Provides integration with the CKEditor WYSIWYG editor.

Code

function _ckeditor_get_enabled_plugins(EditorInterface $editor) : array {
  assert($editor
    ->getEditor() === 'ckeditor');
  $cke4_plugin_manager = \Drupal::service('plugin.manager.ckeditor.plugin');

  // This is largely copied from the CKEditor 4 plugin manager, because it
  // unfortunately does not provide the API this needs.
  // @see \Drupal\ckeditor\CKEditorPluginManager::getEnabledPluginFiles()
  $plugins = array_keys($cke4_plugin_manager
    ->getDefinitions());
  $toolbar_buttons = $cke4_plugin_manager
    ->getEnabledButtons($editor);
  $enabled_plugins = [];
  $additional_plugins = [];
  foreach ($plugins as $plugin_id) {
    $plugin = $cke4_plugin_manager
      ->createInstance($plugin_id);
    $enabled = FALSE;

    // Plugin is enabled if it provides a button that has been enabled.
    if ($plugin instanceof CKEditorPluginButtonsInterface) {
      $plugin_buttons = array_keys($plugin
        ->getButtons());
      $enabled = count(array_intersect($toolbar_buttons, $plugin_buttons)) > 0;
    }

    // Otherwise plugin is enabled if it declares itself as enabled.
    if (!$enabled && $plugin instanceof CKEditorPluginContextualInterface) {
      $enabled = $plugin
        ->isEnabled($editor);
    }
    if ($enabled) {
      $enabled_plugins[$plugin_id] = $plugin_id;

      // Check if this plugin has dependencies that should be considered
      // enabled.
      $additional_plugins = array_merge($additional_plugins, array_diff($plugin
        ->getDependencies($editor), $additional_plugins));
    }
  }

  // Add the list of dependent plugins.
  foreach ($additional_plugins as $plugin_id) {
    $enabled_plugins[$plugin_id] = $plugin_id;
  }
  return $enabled_plugins;
}