2015-08-17 17:00:26 -07:00
< ? 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 ) {
2015-08-27 12:03:05 -07:00
throw new PluginException ( " The block ' { $this -> blockId } ' did not specify a plugin. " );
2015-08-17 17:00:26 -07:00
}
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 ;
}
}
}
}