Skip to content
Snippets Groups Projects
Verified Commit 4c899033 authored by Dave Long's avatar Dave Long
Browse files

Issue #3488664 by phenaproxima: The PlaceBlock config action breaks when...

Issue #3488664 by phenaproxima: The PlaceBlock config action breaks when placing a block in an empty region

(cherry picked from commit 43717fbb)
parent 6e4863ff
Branches
No related tags found
No related merge requests found
Pipeline #348358 passed
......@@ -74,15 +74,17 @@ public function apply(string $configName, mixed $value): void {
'theme' => $theme,
'region' => $value['region'],
]);
// Sort the blocks by weight. Don't use \Drupal\block\Entity\Block::sort()
// here because it seems to be intended to sort blocks in the UI, where
// we really just want to get the weights right in this situation.
uasort($blocks, fn (BlockInterface $a, BlockInterface $b) => $a->getWeight() <=> $b->getWeight());
if ($blocks) {
// Sort the blocks by weight. Don't use \Drupal\block\Entity\Block::sort()
// here because it seems to be intended to sort blocks in the UI, where
// we really just want to get the weights right in this situation.
uasort($blocks, fn (BlockInterface $a, BlockInterface $b) => $a->getWeight() <=> $b->getWeight());
$value['weight'] = match ($value['position']) {
'first' => reset($blocks)->getWeight() - 1,
'last' => end($blocks)->getWeight() + 1,
};
$value['weight'] = match ($value['position']) {
'first' => reset($blocks)->getWeight() - 1,
'last' => end($blocks)->getWeight() + 1,
};
}
}
// Remove values that are not valid properties of block entities.
unset($value['position'], $value['default_region']);
......
......@@ -163,4 +163,28 @@ public function testPlaceBlockAtPosition(): void {
$this->assertSame('last', end($blocks));
}
/**
* Tests using the PlaceBlock action in an empty region.
*/
public function testPlaceBlockInEmptyRegion(): void {
/** @var \Drupal\Core\Entity\Query\QueryInterface $query */
$query = $this->container->get(EntityTypeManagerInterface::class)
->getStorage('block')
->getQuery()
->count()
->condition('theme', 'olivero')
->condition('region', 'footer_top');
$this->assertSame(0, $query->execute());
// Place a block in that region.
$this->configActionManager->applyAction('placeBlockInDefaultTheme', 'block.block.test', [
'plugin' => 'system_powered_by_block',
'region' => [
'olivero' => 'footer_top',
],
'position' => 'first',
]);
$this->assertSame(1, $query->execute());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment