Merge "Filter out blocks with duplicate IDs when checking for blocks"
This commit is contained in:
commit
5d2ff11bcb
1 changed files with 25 additions and 0 deletions
|
|
@ -202,6 +202,9 @@ class BlockManager {
|
|||
] );
|
||||
}
|
||||
|
||||
// Filter out any duplicated blocks, e.g. from the cookie
|
||||
$blocks = $this->getUniqueBlocks( $blocks );
|
||||
|
||||
if ( count( $blocks ) > 0 ) {
|
||||
if ( count( $blocks ) === 1 ) {
|
||||
$block = $blocks[ 0 ];
|
||||
|
|
@ -219,6 +222,28 @@ class BlockManager {
|
|||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a list of blocks, return a list blocks where each block either has a
|
||||
* unique ID or has ID null.
|
||||
*
|
||||
* @param AbstractBlock[] $blocks
|
||||
* @return AbstractBlock[]
|
||||
*/
|
||||
private function getUniqueBlocks( $blocks ) {
|
||||
$blockIds = [];
|
||||
$uniqueBlocks = [];
|
||||
foreach ( $blocks as $block ) {
|
||||
$id = $block->getId();
|
||||
if ( $id === null ) {
|
||||
$uniqueBlocks[] = $block;
|
||||
} elseif ( !isset( $blockIds[$id] ) ) {
|
||||
$uniqueBlocks[] = $block;
|
||||
$blockIds[$block->getId()] = true;
|
||||
}
|
||||
}
|
||||
return $uniqueBlocks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to load a block from an ID given in a cookie value.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue