class BlockRepository
Same name in other branches
- 9 core/modules/block/src/BlockRepository.php \Drupal\block\BlockRepository
- 8.9.x core/modules/block/src/BlockRepository.php \Drupal\block\BlockRepository
- 11.x core/modules/block/src/BlockRepository.php \Drupal\block\BlockRepository
Provides a repository for Block config entities.
Hierarchy
- class \Drupal\block\BlockRepository implements \Drupal\block\BlockRepositoryInterface
Expanded class hierarchy of BlockRepository
2 files declare their use of BlockRepository
- BlockFormTest.php in core/
modules/ block/ tests/ src/ Unit/ BlockFormTest.php - BlockRepositoryTest.php in core/
modules/ block/ tests/ src/ Unit/ BlockRepositoryTest.php
1 string reference to 'BlockRepository'
- block.services.yml in core/
modules/ block/ block.services.yml - core/modules/block/block.services.yml
1 service uses BlockRepository
- block.repository in core/
modules/ block/ block.services.yml - Drupal\block\BlockRepository
File
-
core/
modules/ block/ src/ BlockRepository.php, line 13
Namespace
Drupal\blockView source
class BlockRepository implements BlockRepositoryInterface {
/**
* The block storage.
*
* @var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $blockStorage;
/**
* The theme manager.
*
* @var \Drupal\Core\Theme\ThemeManagerInterface
*/
protected $themeManager;
/**
* The context handler.
*
* @var \Drupal\Core\Plugin\Context\ContextHandlerInterface
*/
protected $contextHandler;
/**
* Constructs a new BlockRepository.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager service.
* @param \Drupal\Core\Theme\ThemeManagerInterface $theme_manager
* The theme manager.
* @param \Drupal\Core\Plugin\Context\ContextHandlerInterface $context_handler
* The plugin context handler.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, ThemeManagerInterface $theme_manager, ContextHandlerInterface $context_handler) {
$this->blockStorage = $entity_type_manager->getStorage('block');
$this->themeManager = $theme_manager;
$this->contextHandler = $context_handler;
}
/**
* {@inheritdoc}
*/
public function getVisibleBlocksPerRegion(array &$cacheable_metadata = []) {
$active_theme = $this->themeManager
->getActiveTheme();
// Build an array of the region names in the right order.
$empty = array_fill_keys($active_theme->getRegions(), []);
$full = [];
foreach ($this->blockStorage
->loadByProperties([
'theme' => $active_theme->getName(),
]) as $block_id => $block) {
/** @var \Drupal\block\BlockInterface $block */
$access = $block->access('view', NULL, TRUE);
$region = $block->getRegion();
if (!isset($cacheable_metadata[$region])) {
$cacheable_metadata[$region] = CacheableMetadata::createFromObject($access);
}
else {
$cacheable_metadata[$region] = $cacheable_metadata[$region]->merge(CacheableMetadata::createFromObject($access));
}
// Set the contexts on the block before checking access.
if ($access->isAllowed()) {
$full[$region][$block_id] = $block;
}
}
// Merge it with the actual values to maintain the region ordering.
$assignments = array_intersect_key(array_merge($empty, $full), $empty);
foreach ($assignments as &$assignment) {
uasort($assignment, 'Drupal\\block\\Entity\\Block::sort');
}
return $assignments;
}
/**
* {@inheritdoc}
*/
public function getUniqueMachineName(string $suggestion, ?string $theme = NULL) : string {
if ($theme) {
$suggestion = $theme . '_' . $suggestion;
}
// Get all the block machine names that begin with the suggested string.
$query = $this->blockStorage
->getQuery();
$query->accessCheck(FALSE);
$query->condition('id', $suggestion, 'CONTAINS');
$block_ids = $query->execute();
$block_ids = array_map(function ($block_id) {
$parts = explode('.', $block_id);
return end($parts);
}, $block_ids);
// Iterate through potential IDs until we get a new one. E.g.
// For example, 'plugin', 'plugin_2', 'plugin_3', etc.
$count = 1;
$machine_default = $suggestion;
while (in_array($machine_default, $block_ids)) {
$machine_default = $suggestion . '_' . ++$count;
}
return $machine_default;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
BlockRepository::$blockStorage | protected | property | The block storage. |
BlockRepository::$contextHandler | protected | property | The context handler. |
BlockRepository::$themeManager | protected | property | The theme manager. |
BlockRepository::getUniqueMachineName | public | function | |
BlockRepository::getVisibleBlocksPerRegion | public | function | |
BlockRepository::__construct | public | function | Constructs a new BlockRepository. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.