Merge "Filter out blocks with duplicate IDs when checking for blocks"

This commit is contained in:
jenkins-bot 2019-06-17 17:20:47 +00:00 committed by Gerrit Code Review
commit 5d2ff11bcb

View file

@ -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.
*