71 lines
1.8 KiB
PHP
71 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Drupal\block;
|
|
|
|
use Drupal\Component\Plugin\Exception\PluginException;
|
|
use Drupal\Component\Plugin\PluginManagerInterface;
|
|
use Drupal\Core\Plugin\DefaultSingleLazyPluginCollection;
|
|
|
|
/**
|
|
* Provides a collection of block plugins.
|
|
*/
|
|
class BlockPluginCollection extends DefaultSingleLazyPluginCollection {
|
|
|
|
/**
|
|
* The block ID this plugin collection belongs to.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $blockId;
|
|
|
|
/**
|
|
* Constructs a new BlockPluginCollection.
|
|
*
|
|
* @param \Drupal\Component\Plugin\PluginManagerInterface $manager
|
|
* The manager to be used for instantiating plugins.
|
|
* @param string $instance_id
|
|
* The ID of the plugin instance.
|
|
* @param array $configuration
|
|
* An array of configuration.
|
|
* @param string $block_id
|
|
* The unique ID of the block entity using this plugin.
|
|
*/
|
|
public function __construct(PluginManagerInterface $manager, $instance_id, array $configuration, $block_id) {
|
|
parent::__construct($manager, $instance_id, $configuration);
|
|
|
|
$this->blockId = $block_id;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return \Drupal\Core\Block\BlockPluginInterface
|
|
*/
|
|
public function &get($instance_id) {
|
|
return parent::get($instance_id);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function initializePlugin($instance_id) {
|
|
if (!$instance_id) {
|
|
throw new PluginException("The block '{$this->blockId}' did not specify a plugin.");
|
|
}
|
|
|
|
try {
|
|
parent::initializePlugin($instance_id);
|
|
}
|
|
catch (PluginException $e) {
|
|
$module = $this->configuration['provider'];
|
|
// Ignore blocks belonging to uninstalled modules, but re-throw valid
|
|
// exceptions when the module is installed and the plugin is
|
|
// misconfigured.
|
|
if (!$module || \Drupal::moduleHandler()->moduleExists($module)) {
|
|
throw $e;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|