You are here

public function BlockPluginCollection::getAllByRegion in Chaos Tool Suite (ctools) 8.3

Returns all blocks keyed by their region.

Return value

array An associative array keyed by region, containing an associative array of block plugins.

File

src/Plugin/BlockPluginCollection.php, line 29

Class

BlockPluginCollection
Provides a collection of block plugins.

Namespace

Drupal\ctools\Plugin

Code

public function getAllByRegion() {
  $region_assignments = [];
  foreach ($this as $block_id => $block) {
    $configuration = $block
      ->getConfiguration();
    $region = isset($configuration['region']) ? $configuration['region'] : NULL;
    $region_assignments[$region][$block_id] = $block;
  }
  foreach ($region_assignments as $region => $region_assignment) {

    // @todo Determine the reason this needs error suppression.
    @uasort($region_assignment, function (BlockPluginInterface $a, BlockPluginInterface $b) {
      $a_config = $a
        ->getConfiguration();
      $a_weight = isset($a_config['weight']) ? $a_config['weight'] : 0;
      $b_config = $b
        ->getConfiguration();
      $b_weight = isset($b_config['weight']) ? $b_config['weight'] : 0;
      if ($a_weight == $b_weight) {
        return strcmp($a
          ->label(), $b
          ->label());
      }
      return $a_weight > $b_weight ? 1 : -1;
    });
    $region_assignments[$region] = $region_assignment;
  }
  return $region_assignments;
}