Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
5.26% |
1 / 19 |
CRAP | |
5.45% |
3 / 55 |
| Block | |
0.00% |
0 / 1 |
|
5.26% |
1 / 19 |
790.61 | |
5.45% |
3 / 55 |
| getPlugin | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| getPluginCollection | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
| getPluginCollections | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getPluginId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| getRegion | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| getTheme | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| getWeight | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| label | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
| sort | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 8 |
|||
| calculateDependencies | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| postSave | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| getVisibility | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| setVisibilityConfig | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
|||
| getVisibilityConditions | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
| getVisibilityCondition | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| conditionPluginManager | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| setRegion | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setWeight | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| createDuplicateBlock | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 6 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\block\Entity\Block. | |
| */ | |
| namespace Drupal\block\Entity; | |
| use Drupal\Core\Cache\Cache; | |
| use Drupal\Core\Condition\ConditionPluginCollection; | |
| use Drupal\Core\Config\Entity\ConfigEntityBase; | |
| use Drupal\block\BlockPluginCollection; | |
| use Drupal\block\BlockInterface; | |
| use Drupal\Core\Config\Entity\ConfigEntityInterface; | |
| use Drupal\Core\Entity\EntityWithPluginCollectionInterface; | |
| use Drupal\Core\Entity\EntityStorageInterface; | |
| /** | |
| * Defines a Block configuration entity class. | |
| * | |
| * @ConfigEntityType( | |
| * id = "block", | |
| * label = @Translation("Block"), | |
| * handlers = { | |
| * "access" = "Drupal\block\BlockAccessControlHandler", | |
| * "view_builder" = "Drupal\block\BlockViewBuilder", | |
| * "list_builder" = "Drupal\block\BlockListBuilder", | |
| * "form" = { | |
| * "default" = "Drupal\block\BlockForm", | |
| * "delete" = "Drupal\block\Form\BlockDeleteForm" | |
| * } | |
| * }, | |
| * admin_permission = "administer blocks", | |
| * entity_keys = { | |
| * "id" = "id" | |
| * }, | |
| * links = { | |
| * "delete-form" = "/admin/structure/block/manage/{block}/delete", | |
| * "edit-form" = "/admin/structure/block/manage/{block}" | |
| * }, | |
| * config_export = { | |
| * "id", | |
| * "theme", | |
| * "region", | |
| * "weight", | |
| * "provider", | |
| * "plugin", | |
| * "settings", | |
| * "visibility", | |
| * }, | |
| * lookup_keys = { | |
| * "theme" | |
| * } | |
| * ) | |
| */ | |
| class Block extends ConfigEntityBase implements BlockInterface, EntityWithPluginCollectionInterface { | |
| /** | |
| * The ID of the block. | |
| * | |
| * @var string | |
| */ | |
| protected $id; | |
| /** | |
| * The plugin instance settings. | |
| * | |
| * @var array | |
| */ | |
| protected $settings = array(); | |
| /** | |
| * The region this block is placed in. | |
| * | |
| * @var string | |
| */ | |
| protected $region = self::BLOCK_REGION_NONE; | |
| /** | |
| * The block weight. | |
| * | |
| * @var int | |
| */ | |
| protected $weight; | |
| /** | |
| * The plugin instance ID. | |
| * | |
| * @var string | |
| */ | |
| protected $plugin; | |
| /** | |
| * The visibility settings for this block. | |
| * | |
| * @var array | |
| */ | |
| protected $visibility = []; | |
| /** | |
| * The plugin collection that holds the block plugin for this entity. | |
| * | |
| * @var \Drupal\block\BlockPluginCollection | |
| */ | |
| protected $pluginCollection; | |
| /** | |
| * The available contexts for this block and its visibility conditions. | |
| * | |
| * @var array | |
| */ | |
| protected $contexts = []; | |
| /** | |
| * The visibility collection. | |
| * | |
| * @var \Drupal\Core\Condition\ConditionPluginCollection | |
| */ | |
| protected $visibilityCollection; | |
| /** | |
| * The condition plugin manager. | |
| * | |
| * @var \Drupal\Core\Executable\ExecutableManagerInterface | |
| */ | |
| protected $conditionPluginManager; | |
| /** | |
| * The theme that includes the block plugin for this entity. | |
| * | |
| * @var string | |
| */ | |
| protected $theme; | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getPlugin() { | |
| return $this->getPluginCollection()->get($this->plugin); | |
| } | |
| /** | |
| * Encapsulates the creation of the block's LazyPluginCollection. | |
| * | |
| * @return \Drupal\Component\Plugin\LazyPluginCollection | |
| * The block's plugin collection. | |
| */ | |
| protected function getPluginCollection() { | |
| if (!$this->pluginCollection) { | |
| $this->pluginCollection = new BlockPluginCollection(\Drupal::service('plugin.manager.block'), $this->plugin, $this->get('settings'), $this->id()); | |
| } | |
| return $this->pluginCollection; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getPluginCollections() { | |
| return [ | |
| 'settings' => $this->getPluginCollection(), | |
| 'visibility' => $this->getVisibilityConditions(), | |
| ]; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getPluginId() { | |
| return $this->plugin; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getRegion() { | |
| return $this->region; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTheme() { | |
| return $this->theme; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getWeight() { | |
| return $this->weight; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function label() { | |
| $settings = $this->get('settings'); | |
| if ($settings['label']) { | |
| return $settings['label']; | |
| } | |
| else { | |
| $definition = $this->getPlugin()->getPluginDefinition(); | |
| return $definition['admin_label']; | |
| } | |
| } | |
| /** | |
| * Sorts active blocks by weight; sorts inactive blocks by name. | |
| */ | |
| public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b) { | |
| // Separate enabled from disabled. | |
| $status = (int) $b->status() - (int) $a->status(); | |
| if ($status !== 0) { | |
| return $status; | |
| } | |
| // Sort by weight, unless disabled. | |
| if ($a->getRegion() != static::BLOCK_REGION_NONE) { | |
| $weight = $a->getWeight() - $b->getWeight(); | |
| if ($weight) { | |
| return $weight; | |
| } | |
| } | |
| // Sort by label. | |
| return strcmp($a->label(), $b->label()); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function calculateDependencies() { | |
| parent::calculateDependencies(); | |
| $this->addDependency('theme', $this->theme); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function postSave(EntityStorageInterface $storage, $update = TRUE) { | |
| parent::postSave($storage, $update); | |
| // Entity::postSave() calls Entity::invalidateTagsOnSave(), which only | |
| // handles the regular cases. The Block entity has one special case: a | |
| // newly created block may *also* appear on any page in the current theme, | |
| // so we must invalidate the associated block's cache tag (which includes | |
| // the theme cache tag). | |
| if (!$update) { | |
| Cache::invalidateTags($this->getCacheTagsToInvalidate()); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getVisibility() { | |
| return $this->getVisibilityConditions()->getConfiguration(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setVisibilityConfig($instance_id, array $configuration) { | |
| $conditions = $this->getVisibilityConditions(); | |
| if (!$conditions->has($instance_id)) { | |
| $configuration['id'] = $instance_id; | |
| $conditions->addInstanceId($instance_id, $configuration); | |
| } | |
| else { | |
| $conditions->setInstanceConfiguration($instance_id, $configuration); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getVisibilityConditions() { | |
| if (!isset($this->visibilityCollection)) { | |
| $this->visibilityCollection = new ConditionPluginCollection($this->conditionPluginManager(), $this->get('visibility')); | |
| } | |
| return $this->visibilityCollection; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getVisibilityCondition($instance_id) { | |
| return $this->getVisibilityConditions()->get($instance_id); | |
| } | |
| /** | |
| * Gets the condition plugin manager. | |
| * | |
| * @return \Drupal\Core\Executable\ExecutableManagerInterface | |
| * The condition plugin manager. | |
| */ | |
| protected function conditionPluginManager() { | |
| $this->conditionPluginManager; | |
| if (!isset($this->conditionPluginManager)) { | |
| $this->conditionPluginManager = \Drupal::service('plugin.manager.condition'); | |
| } | |
| return $this->conditionPluginManager; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setRegion($region) { | |
| $this->region = $region; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setWeight($weight) { | |
| $this->weight = $weight; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function createDuplicateBlock($new_id = NULL, $new_theme = NULL) { | |
| $duplicate = parent::createDuplicate(); | |
| if (!empty($new_id)) { | |
| $duplicate->id = $new_id; | |
| } | |
| if (!empty($new_theme)) { | |
| $duplicate->theme = $new_theme; | |
| } | |
| return $duplicate; | |
| } | |
| } |