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

Issue #3308449 by owenbush:...

Issue #3308449 by owenbush: CategorizingPluginManagerTrait::getSortedDefinitions() sometimes returns plugins in the incorrect order if they have categories or labels translated

(cherry picked from commit d3cf1e92)
parent b16cfee7
No related branches found
No related tags found
24 merge requests!8394[warning] array_flip(): Can only flip STRING and INTEGER values, when saving a non-revisionable custom content entity,!7780issue 3443822: fix for 'No route found for the specified format html. Supported formats: json, xml.',!5013Issue #3071143: Table Render Array Example Is Incorrect,!4848Issue #1566662: Update module should send notifications on Thursdays,!4792Issue #2230689: Remove redundant "Italic" style,!4220Issue #3368223: Link field > Access to internal links is not checked on display.,!3884Issue #3356842,!3870Issue #3087868,!3812Draft: Issue #3339373 by alexpott, andypost, mondrake:...,!3686Issue #3219967 against 9.5.x,!3683Issue #2939397: Clearing AliasManager cache with root path raises warning,!3543Issue #3344259: Allow ajax dialog to have focus configurable,!3356Issue #3209129: Scrolling problems when adding a block via layout builder,!2921Issue #1383696: Allow a custom HTML element to be selected for a grouping field,!2857Issue #3314541: Remove unnecessary fill from SVG icon for the "Media Library" CKEditor 5 button — enabling dark mode support in contrib,!2280Issue #3280415: Metapackage Generator Breaks Under Composer --no-dev,!2205Quote all names in the regions section.,!2050Issue #3272969: Remove UnqiueField constraint.,!1956Issue #3268872: hook_views_invalidate_cache not called when a view is deleted,!1893Issue #3217260: Add a way to make media captions not editable in CKEditor,!1459Issue #3087632: menu_name max length is too long,!878Issue #3221534: throw an exception when IDs passed to loadMultiple() are badly formed,!866Issue #2845319: The highlighting of the 'Home' menu-link does not respect query strings and fragment identifiers,!204Issue #3040556: It is not possible to react to an entity being duplicated
...@@ -91,7 +91,7 @@ public function getSortedDefinitions(array $definitions = NULL, $label_key = 'la ...@@ -91,7 +91,7 @@ public function getSortedDefinitions(array $definitions = NULL, $label_key = 'la
/** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */ /** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */
$definitions = $definitions ?? $this->getDefinitions(); $definitions = $definitions ?? $this->getDefinitions();
uasort($definitions, function ($a, $b) use ($label_key) { uasort($definitions, function ($a, $b) use ($label_key) {
if ($a['category'] != $b['category']) { if ((string) $a['category'] != (string) $b['category']) {
return strnatcasecmp($a['category'], $b['category']); return strnatcasecmp($a['category'], $b['category']);
} }
return strnatcasecmp($a[$label_key], $b[$label_key]); return strnatcasecmp($a[$label_key], $b[$label_key]);
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
use Drupal\Tests\UnitTestCase; use Drupal\Tests\UnitTestCase;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\StringTranslation\StringTranslationTrait;
/** /**
* @coversDefaultClass \Drupal\Core\Block\BlockManager * @coversDefaultClass \Drupal\Core\Block\BlockManager
...@@ -19,6 +20,8 @@ ...@@ -19,6 +20,8 @@
*/ */
class BlockManagerTest extends UnitTestCase { class BlockManagerTest extends UnitTestCase {
use StringTranslationTrait;
/** /**
* The block manager under test. * The block manager under test.
* *
...@@ -42,6 +45,7 @@ protected function setUp(): void { ...@@ -42,6 +45,7 @@ protected function setUp(): void {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$current_user = $this->prophesize(AccountInterface::class); $current_user = $this->prophesize(AccountInterface::class);
$container->set('current_user', $current_user->reveal()); $container->set('current_user', $current_user->reveal());
$container->set('string_translation', $this->getStringTranslationStub());
\Drupal::setContainer($container); \Drupal::setContainer($container);
$cache_backend = $this->prophesize(CacheBackendInterface::class); $cache_backend = $this->prophesize(CacheBackendInterface::class);
...@@ -55,22 +59,22 @@ protected function setUp(): void { ...@@ -55,22 +59,22 @@ protected function setUp(): void {
// that are purposefully not in alphabetical order. // that are purposefully not in alphabetical order.
$discovery->getDefinitions()->willReturn([ $discovery->getDefinitions()->willReturn([
'broken' => [ 'broken' => [
'admin_label' => 'Broken/Missing', 'admin_label' => $this->t('Broken/Missing'),
'category' => 'Block', 'category' => $this->t('Block'),
'class' => Broken::class, 'class' => Broken::class,
'provider' => 'core', 'provider' => 'core',
], ],
'block1' => [ 'block1' => [
'admin_label' => 'Coconut', 'admin_label' => $this->t('Coconut'),
'category' => 'Group 2', 'category' => $this->t('Group 2'),
], ],
'block2' => [ 'block2' => [
'admin_label' => 'Apple', 'admin_label' => $this->t('Apple'),
'category' => 'Group 1', 'category' => $this->t('Group 1'),
], ],
'block3' => [ 'block3' => [
'admin_label' => 'Banana', 'admin_label' => $this->t('Banana'),
'category' => 'Group 2', 'category' => $this->t('Group 2'),
], ],
]); ]);
// Force the discovery object onto the block manager. // Force the discovery object onto the block manager.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment