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

Issue #3269153 by andregp, longwave, catch: Remove BC layers from the extension system

parent fe3be7e1
No related branches found
No related tags found
37 merge requests!12227Issue #3181946 by jonmcl, mglaman,!7471uncessary 5 files are moved from media-library folder to misc folder,!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2853#3274419 Makes BaseFieldOverride inherit the internal property from the base field.,!2719Issue #3110137: Remove Classy from core.,!2437Issue #3238257 by hooroomoo, Wim Leers: Fragment link pointing to <textarea>...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
......@@ -3,6 +3,7 @@
namespace Drupal\Core\Extension;
use Drupal\Core\Extension\Exception\UnknownExtensionException;
use Drupal\Core\Extension\Exception\UnknownExtensionTypeException;
/**
* Factory for getting extension lists by type.
......@@ -51,8 +52,7 @@ public function getPathname(string $type, string $name): ?string {
return 'core/core.info.yml';
}
if (!isset($this->extensionLists[$type])) {
@trigger_error('Calling getPathname() with an invalid $type parameter is deprecated in drupal:9.3.0 and will throw an \Drupal\Core\Extension\Exception\UnknownExtensionTypeException in drupal:10.0.0. See https://www.drupal.org/node/2940438', E_USER_DEPRECATED);
return NULL;
throw new UnknownExtensionTypeException(sprintf('Extension type %s is unknown.', $type));
}
try {
return $this->extensionLists[$type]->getPathname($name);
......
......@@ -79,25 +79,17 @@ class ModuleInstaller implements ModuleInstallerInterface {
* The drupal kernel.
* @param \Drupal\Core\Database\Connection $connection
* The database connection.
* @param \Drupal\Core\Update\UpdateHookRegistry|null $update_registry
* (Optional) The update registry service.
* @param \Drupal\Core\Update\UpdateHookRegistry $update_registry
* The update registry service.
*
* @see \Drupal\Core\DrupalKernel
* @see \Drupal\Core\CoreServiceProvider
*/
public function __construct($root, ModuleHandlerInterface $module_handler, DrupalKernelInterface $kernel, Connection $connection = NULL, UpdateHookRegistry $update_registry = NULL) {
public function __construct($root, ModuleHandlerInterface $module_handler, DrupalKernelInterface $kernel, Connection $connection, UpdateHookRegistry $update_registry) {
$this->root = $root;
$this->moduleHandler = $module_handler;
$this->kernel = $kernel;
if (!$connection) {
@trigger_error('The database connection must be passed to ' . __METHOD__ . '(). Creating ' . __CLASS__ . ' without it is deprecated in drupal:9.2.0 and will be required in drupal:10.0.0. See https://www.drupal.org/node/2970993', E_USER_DEPRECATED);
$connection = \Drupal::service('database');
}
$this->connection = $connection;
if (!$update_registry) {
@trigger_error('Calling ' . __METHOD__ . '() without the $update_registry argument is deprecated in drupal:9.3.0 and $update_registry argument will be required in drupal:10.0.0. See https://www.drupal.org/node/2124069', E_USER_DEPRECATED);
$update_registry = \Drupal::service('update.update_hook_registry');
}
$this->updateRegistry = $update_registry;
}
......
......@@ -101,7 +101,7 @@ class ThemeInstaller implements ThemeInstallerInterface {
* @param \Drupal\Core\Extension\ModuleExtensionList $module_extension_list
* The module extension list.
*/
public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory, ConfigInstallerInterface $config_installer, ModuleHandlerInterface $module_handler, ConfigManagerInterface $config_manager, AssetCollectionOptimizerInterface $css_collection_optimizer, RouteBuilderInterface $route_builder, LoggerInterface $logger, StateInterface $state, ModuleExtensionList $module_extension_list = NULL) {
public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory, ConfigInstallerInterface $config_installer, ModuleHandlerInterface $module_handler, ConfigManagerInterface $config_manager, AssetCollectionOptimizerInterface $css_collection_optimizer, RouteBuilderInterface $route_builder, LoggerInterface $logger, StateInterface $state, ModuleExtensionList $module_extension_list) {
$this->themeHandler = $theme_handler;
$this->configFactory = $config_factory;
$this->configInstaller = $config_installer;
......@@ -111,10 +111,6 @@ public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryI
$this->routeBuilder = $route_builder;
$this->logger = $logger;
$this->state = $state;
if ($module_extension_list === NULL) {
@trigger_error('The extension.list.module service must be passed to ' . __NAMESPACE__ . '\ThemeInstaller::__construct(). It was added in drupal:8.9.0 and will be required before drupal:10.0.0.', E_USER_DEPRECATED);
$module_extension_list = \Drupal::service('extension.list.module');
}
$this->moduleExtensionList = $module_extension_list;
}
......
......@@ -3,6 +3,12 @@
namespace Drupal\KernelTests\Core\Bootstrap;
use Drupal\Core\Extension\Exception\UnknownExtensionException;
use Drupal\Core\Extension\Exception\UnknownExtensionTypeException;
use Drupal\Core\Extension\ExtensionPathResolver;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\Extension\ProfileExtensionList;
use Drupal\Core\Extension\ThemeEngineExtensionList;
use Drupal\Core\Extension\ThemeExtensionList;
use Drupal\KernelTests\KernelTestBase;
/**
......@@ -85,4 +91,24 @@ public function testExtensionPathResolvingWithNonExistingThemeEngine(): void {
->getPathname('there_is_an_theme_engine_for_you'), 'Searching for an item that does not exist returns NULL.');
}
/**
* Tests the getPath() method with an unknown extension.
*/
public function testUnknownExtension() {
$module_extension_list = $this->prophesize(ModuleExtensionList::class);
$profile_extension_list = $this->prophesize(ProfileExtensionList::class);
$theme_extension_list = $this->prophesize(ThemeExtensionList::class);
$theme_engine_extension_list = $this->prophesize(ThemeEngineExtensionList::class);
$resolver = new ExtensionPathResolver(
$module_extension_list->reveal(),
$profile_extension_list->reveal(),
$theme_extension_list->reveal(),
$theme_engine_extension_list->reveal()
);
$this->expectException(UnknownExtensionTypeException::class);
$this->expectExceptionMessage('Extension type foo is unknown.');
$resolver->getPath('foo', 'bar');
}
}
<?php
namespace Drupal\KernelTests\Core\Extension;
use Drupal\Core\Extension\ExtensionPathResolver;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\Extension\ProfileExtensionList;
use Drupal\Core\Extension\ThemeEngineExtensionList;
use Drupal\Core\Extension\ThemeExtensionList;
use Drupal\KernelTests\KernelTestBase;
/**
* Tests the extension path resolver deprecations.
*
* @group legacy
* @group Module
*/
class LegacyExtensionPathResolverTest extends KernelTestBase {
/**
* @group legacy
*/
public function testDeprecatedWarning() {
$this->expectDeprecation('Calling getPathname() with an invalid $type parameter is deprecated in drupal:9.3.0 and will throw an \Drupal\Core\Extension\Exception\UnknownExtensionTypeException in drupal:10.0.0. See https://www.drupal.org/node/2940438');
$module_extension_list = $this->prophesize(ModuleExtensionList::class);
$profile_extension_list = $this->prophesize(ProfileExtensionList::class);
$theme_extension_list = $this->prophesize(ThemeExtensionList::class);
$theme_engine_extension_list = $this->prophesize(ThemeEngineExtensionList::class);
$resolver = new ExtensionPathResolver(
$module_extension_list->reveal(),
$profile_extension_list->reveal(),
$theme_extension_list->reveal(),
$theme_engine_extension_list->reveal()
);
$this->assertEmpty($resolver->getPath('foo', 'bar'));
}
}
<?php
namespace Drupal\KernelTests\Core\Extension;
use Drupal\Core\DrupalKernelInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Extension\ModuleInstaller;
use Drupal\KernelTests\KernelTestBase;
/**
* @group legacy
* @group extension
* @coversDefaultClass \Drupal\Core\Extension\ModuleInstaller
*/
class ModuleInstallerDeprecationTest extends KernelTestBase {
/**
* @covers ::__construct
*/
public function testConstructorDeprecation() {
$this->expectDeprecation('Calling ' . ModuleInstaller::class . '::__construct() without the $update_registry argument is deprecated in drupal:9.3.0 and $update_registry argument will be required in drupal:10.0.0. See https://www.drupal.org/node/2124069');
$root = '';
$module_handler = $this->prophesize(ModuleHandlerInterface::class);
$kernel = $this->prophesize(DrupalKernelInterface::class);
$this->assertNotNull(new ModuleInstaller($root, $module_handler->reveal(), $kernel->reveal()));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment