56d51b7cf6484f2a77e013d1b2f54223e32d738a
[yaffs-website] / Plugin / BlockPluginCollection.php
1 <?php
2
3 namespace Drupal\ctools\Plugin;
4
5 use Drupal\Core\Block\BlockPluginInterface;
6 use Drupal\Core\Plugin\DefaultLazyPluginCollection;
7
8 /**
9  * Provides a collection of block plugins.
10  */
11 class BlockPluginCollection extends DefaultLazyPluginCollection {
12
13   /**
14    * {@inheritdoc}
15    *
16    * @return \Drupal\Core\Block\BlockPluginInterface
17    */
18   public function &get($instance_id) {
19     return parent::get($instance_id);
20   }
21
22   /**
23    * Returns all blocks keyed by their region.
24    *
25    * @return array
26    *   An associative array keyed by region, containing an associative array of
27    *   block plugins.
28    */
29   public function getAllByRegion() {
30     $region_assignments = [];
31     foreach ($this as $block_id => $block) {
32       $configuration = $block->getConfiguration();
33       $region = isset($configuration['region']) ? $configuration['region'] : NULL;
34       $region_assignments[$region][$block_id] = $block;
35     }
36     foreach ($region_assignments as $region => $region_assignment) {
37       // @todo Determine the reason this needs error suppression.
38       @uasort($region_assignment, function (BlockPluginInterface $a, BlockPluginInterface $b) {
39         $a_config = $a->getConfiguration();
40         $a_weight = isset($a_config['weight']) ? $a_config['weight'] : 0;
41         $b_config = $b->getConfiguration();
42         $b_weight = isset($b_config['weight']) ? $b_config['weight'] : 0;
43         if ($a_weight == $b_weight) {
44           return strcmp($a->label(), $b->label());
45         }
46         return $a_weight > $b_weight ? 1 : -1;
47       });
48       $region_assignments[$region] = $region_assignment;
49     }
50     return $region_assignments;
51   }
52
53 }