Commit 838a9e5f authored by Luhur Abdi Rizal's avatar Luhur Abdi Rizal
Browse files

Issue #3255106 by el7cosmos: Implements hook_config_schema_info_alter

parent 3b0dd465
Loading
Loading
Loading
Loading
+32 −45
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ use Drupal\core_event_dispatcher\Event\Block\BlockBuildAlterEvent;
use Drupal\core_event_dispatcher\Event\Block\BlockViewAlterEvent;
use Drupal\core_event_dispatcher\Event\Core\CacheFlushEvent;
use Drupal\core_event_dispatcher\Event\Core\ConfigImportStepsAlterEvent;
use Drupal\core_event_dispatcher\Event\Core\ConfigSchemaInfoAlterEvent;
use Drupal\core_event_dispatcher\Event\Core\CountriesAlterEvent;
use Drupal\core_event_dispatcher\Event\Core\CronEvent;
use Drupal\core_event_dispatcher\Event\Core\DataTypeInfoAlterEvent;
@@ -77,7 +78,6 @@ use Drupal\core_event_dispatcher\Event\Language\LanguageSwitchLinksAlterEvent;

// Core.
// @todo hook_mail()
// @todo hook_config_schema_info_alter()
// @todo hook_validation_constraint_alter()
//
// Entity.
@@ -176,8 +176,7 @@ function core_event_dispatcher_block_alter(&$definitions) {
function core_event_dispatcher_cron() {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new CronEvent();
  $manager->register($event);
  $manager->register(new CronEvent());
}

/**
@@ -186,8 +185,7 @@ function core_event_dispatcher_cron() {
function core_event_dispatcher_data_type_info_alter(&$dataTypes) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new DataTypeInfoAlterEvent($dataTypes);
  $manager->register($event);
  $manager->register(new DataTypeInfoAlterEvent($dataTypes));
}

/**
@@ -196,8 +194,7 @@ function core_event_dispatcher_data_type_info_alter(&$dataTypes) {
function core_event_dispatcher_queue_info_alter(&$queues) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new QueueInfoAlterEvent($queues);
  $manager->register($event);
  $manager->register(new QueueInfoAlterEvent($queues));
}

/**
@@ -206,8 +203,7 @@ function core_event_dispatcher_queue_info_alter(&$queues) {
function core_event_dispatcher_mail_alter(&$message) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new MailAlterEvent($message);
  $manager->register($event);
  $manager->register(new MailAlterEvent($message));
}

/**
@@ -216,8 +212,7 @@ function core_event_dispatcher_mail_alter(&$message) {
function core_event_dispatcher_mail_backend_info_alter(&$info) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new MailBackendInfoAlterEvent($info);
  $manager->register($event);
  $manager->register(new MailBackendInfoAlterEvent($info));
}

/**
@@ -226,8 +221,7 @@ function core_event_dispatcher_mail_backend_info_alter(&$info) {
function core_event_dispatcher_countries_alter(&$countries) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new CountriesAlterEvent($countries);
  $manager->register($event);
  $manager->register(new CountriesAlterEvent($countries));
}

/**
@@ -236,8 +230,7 @@ function core_event_dispatcher_countries_alter(&$countries) {
function core_event_dispatcher_display_variant_plugin_alter(array &$definitions) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new DisplayVariantPluginAlterEvent($definitions);
  $manager->register($event);
  $manager->register(new DisplayVariantPluginAlterEvent($definitions));
}

/**
@@ -246,8 +239,7 @@ function core_event_dispatcher_display_variant_plugin_alter(array &$definitions)
function core_event_dispatcher_layout_alter(array &$definitions) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new LayoutAlterEvent($definitions);
  $manager->register($event);
  $manager->register(new LayoutAlterEvent($definitions));
}

/**
@@ -256,8 +248,7 @@ function core_event_dispatcher_layout_alter(array &$definitions) {
function core_event_dispatcher_cache_flush() {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new CacheFlushEvent();
  $manager->register($event);
  $manager->register(new CacheFlushEvent());
}

/**
@@ -266,8 +257,7 @@ function core_event_dispatcher_cache_flush() {
function core_event_dispatcher_rebuild() {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new RebuildEvent();
  $manager->register($event);
  $manager->register(new RebuildEvent());
}

/**
@@ -276,8 +266,16 @@ function core_event_dispatcher_rebuild() {
function core_event_dispatcher_config_import_steps_alter(array &$syncSteps, ConfigImporter $configImporter) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new ConfigImportStepsAlterEvent($syncSteps, $configImporter);
  $manager->register($event);
  $manager->register(new ConfigImportStepsAlterEvent($syncSteps, $configImporter));
}

/**
 * Implements hook_config_schema_info_alter().
 */
function core_event_dispatcher_config_schema_info_alter(array &$definitions) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $manager->register(new ConfigSchemaInfoAlterEvent($definitions));
}

/**
@@ -302,8 +300,7 @@ function core_event_dispatcher_entity_access(EntityInterface $entity, string $op
function core_event_dispatcher_entity_type_build(array &$entityTypes) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new EntityTypeBuildEvent($entityTypes);
  $manager->register($event);
  $manager->register(new EntityTypeBuildEvent($entityTypes));
}

/**
@@ -314,8 +311,7 @@ function core_event_dispatcher_entity_type_build(array &$entityTypes) {
function core_event_dispatcher_entity_type_alter(array &$entityTypes) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new EntityTypeAlterEvent($entityTypes);
  $manager->register($event);
  $manager->register(new EntityTypeAlterEvent($entityTypes));
}

/**
@@ -484,8 +480,7 @@ function core_event_dispatcher_entity_base_field_info(EntityTypeInterface $entit
function core_event_dispatcher_entity_base_field_info_alter(array &$fields, EntityTypeInterface $entityType) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new EntityBaseFieldInfoAlterEvent($fields, $entityType);
  $manager->register($event);
  $manager->register(new EntityBaseFieldInfoAlterEvent($fields, $entityType));
}

/**
@@ -496,8 +491,7 @@ function core_event_dispatcher_entity_base_field_info_alter(array &$fields, Enti
function core_event_dispatcher_entity_bundle_field_info_alter(array &$fields, EntityTypeInterface $entityType, string $bundle) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new EntityBundleFieldInfoAlterEvent($fields, $entityType, $bundle);
  $manager->register($event);
  $manager->register(new EntityBundleFieldInfoAlterEvent($fields, $entityType, $bundle));
}

/**
@@ -562,8 +556,7 @@ function core_event_dispatcher_entity_extra_field_info() {
function core_event_dispatcher_entity_extra_field_info_alter(array &$info) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new EntityExtraFieldInfoAlterEvent($info);
  $manager->register($event);
  $manager->register(new EntityExtraFieldInfoAlterEvent($info));
}

/**
@@ -592,8 +585,7 @@ function core_event_dispatcher_form_alter(array &$form, FormStateInterface $form
function core_event_dispatcher_language_switch_links_alter(array &$links, string $type, Url $path) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new LanguageSwitchLinksAlterEvent($links, $type, $path);
  $manager->register($event);
  $manager->register(new LanguageSwitchLinksAlterEvent($links, $type, $path));
}

/**
@@ -627,8 +619,7 @@ function core_event_dispatcher_themes_installed(array $themeList) {
function core_event_dispatcher_js_alter(array &$javascript, AttachedAssetsInterface $assets) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new JsAlterEvent($javascript, $assets);
  $manager->register($event);
  $manager->register(new JsAlterEvent($javascript, $assets));
}

/**
@@ -639,8 +630,7 @@ function core_event_dispatcher_js_alter(array &$javascript, AttachedAssetsInterf
function core_event_dispatcher_library_info_alter(array &$libraries, string $extension) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new LibraryInfoAlterEvent($libraries, $extension);
  $manager->register($event);
  $manager->register(new LibraryInfoAlterEvent($libraries, $extension));
}

/**
@@ -651,8 +641,7 @@ function core_event_dispatcher_library_info_alter(array &$libraries, string $ext
function core_event_dispatcher_page_attachments(array &$attachments) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new PageAttachmentsEvent($attachments);
  $manager->register($event);
  $manager->register(new PageAttachmentsEvent($attachments));
}

/**
@@ -663,8 +652,7 @@ function core_event_dispatcher_page_attachments(array &$attachments) {
function core_event_dispatcher_page_top(array &$pageTop) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new PageTopEvent($pageTop);
  $manager->register($event);
  $manager->register(new PageTopEvent($pageTop));
}

/**
@@ -675,8 +663,7 @@ function core_event_dispatcher_page_top(array &$pageTop) {
function core_event_dispatcher_page_bottom(array &$pageBottom) {
  /** @var \Drupal\hook_event_dispatcher\Manager\HookEventDispatcherManagerInterface $manager */
  $manager = Drupal::service('hook_event_dispatcher.manager');
  $event = new PageBottomEvent($pageBottom);
  $manager->register($event);
  $manager->register(new PageBottomEvent($pageBottom));
}

/**
+20 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\core_event_dispatcher\Event\Core;

use Drupal\hook_event_dispatcher\Event\PluginDefinitionAlterEventBase;
use Drupal\hook_event_dispatcher\HookEventDispatcherInterface;

/**
 * Class ConfigSchemaInfoAlterEvent.
 */
class ConfigSchemaInfoAlterEvent extends PluginDefinitionAlterEventBase {

  /**
   * {@inheritdoc}
   */
  public function getDispatcherType(): string {
    return HookEventDispatcherInterface::CONFIG_SCHEMA_INFO_ALTER;
  }

}
+59 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\core_event_dispatcher\Kernel\Core;

use Drupal\config_translation\FormElement\Textarea;
use Drupal\core_event_dispatcher\Event\Core\ConfigSchemaInfoAlterEvent;
use Drupal\hook_event_dispatcher\HookEventDispatcherInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\hook_event_dispatcher\Kernel\ListenerTrait;

/**
 * Class ConfigSchemaInfoAlterEventTest.
 *
 * @group hook_event_dispatcher
 * @group core_event_dispatcher
 *
 * @see core_event_dispatcher_config_schema_info_alter()
 */
class ConfigSchemaInfoAlterEventTest extends KernelTestBase {

  use ListenerTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'hook_event_dispatcher',
    'core_event_dispatcher',
  ];

  /**
   * Test ConfigSchemaInfoAlterEvent.
   *
   * @throws \Exception
   */
  public function testConfigSchemaInfoAlterEvent(): void {
    $this->listen(HookEventDispatcherInterface::CONFIG_SCHEMA_INFO_ALTER, 'onConfigSchemaInfoAlter');

    $typedConfigManager = $this->container->get('config.typed');
    $definition = $typedConfigManager->getDefinition('text');
    $this->assertArrayHasKey('form_element_class', $definition);
    $this->assertEquals(Textarea::class, $definition['form_element_class']);
  }

  /**
   * Callback for ConfigSchemaInfoAlterEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Core\ConfigSchemaInfoAlterEvent $event
   *   The event.
   */
  public function onConfigSchemaInfoAlter(ConfigSchemaInfoAlterEvent $event): void {
    $this->assertTrue($event->hasDefinition('text'));
    $definition = $event->getDefinition('text');
    $this->assertArrayNotHasKey('form_element_class', $definition);
    $definition['form_element_class'] = Textarea::class;
    $event->setDefinition('text', $definition);
  }

}
+12 −0
Original line number Diff line number Diff line
@@ -1007,6 +1007,18 @@ interface HookEventDispatcherInterface {
   */
  public const CONFIG_IMPORT_STEPS_ALTER = self::PREFIX . 'config.import_steps_alter';

  /**
   * Alter config typed data definitions.
   *
   * @Event
   *
   * @see core_event_dispatcher_config_schema_info_alter()
   * @see hook_config_schema_info_alter()
   *
   * @var string
   */
  public const CONFIG_SCHEMA_INFO_ALTER = self::PREFIX . 'config.schema.info_alter';

  // LANGUAGE EVENTS.
  /**
   * Alter the links generated to switch languages.