function BlockRepository::getUniqueMachineName

Same name and namespace in other branches
  1. 10 core/modules/block/src/BlockRepository.php \Drupal\block\BlockRepository::getUniqueMachineName()

Based on a suggested string generates a unique machine name for a block.

Parameters

string $suggestion: The suggested block ID.

string $theme: The machine name of the theme.

Return value

string Returns the unique name.

Overrides BlockRepositoryInterface::getUniqueMachineName

File

core/modules/block/src/BlockRepository.php, line 89

Class

BlockRepository
Provides a repository for Block config entities.

Namespace

Drupal\block

Code

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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.