Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 33 |
BlockController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
42 | |
0.00% |
0 / 33 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
demo | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 25 |
|||
getVisibleRegionNames | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\block\Controller\BlockController. | |
*/ | |
namespace Drupal\block\Controller; | |
use Drupal\Component\Utility\Html; | |
use Drupal\Core\Controller\ControllerBase; | |
use Drupal\Core\Extension\ThemeHandlerInterface; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | |
/** | |
* Controller routines for admin block routes. | |
*/ | |
class BlockController extends ControllerBase { | |
/** | |
* The theme handler. | |
* | |
* @var \Drupal\Core\Extension\ThemeHandlerInterface | |
*/ | |
protected $themeHandler; | |
/** | |
* Constructs a new BlockController instance. | |
* | |
* @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler | |
* The theme handler. | |
*/ | |
public function __construct(ThemeHandlerInterface $theme_handler) { | |
$this->themeHandler = $theme_handler; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container) { | |
return new static( | |
$container->get('theme_handler') | |
); | |
} | |
/** | |
* Returns a block theme demo page. | |
* | |
* @param string $theme | |
* The name of the theme. | |
* | |
* @return array | |
* A #type 'page' render array containing the block region demo. | |
*/ | |
public function demo($theme) { | |
if (!$this->themeHandler->hasUi($theme)) { | |
throw new NotFoundHttpException(); | |
} | |
$page = [ | |
'#title' => Html::escape($this->themeHandler->getName($theme)), | |
'#type' => 'page', | |
'#attached' => array( | |
'drupalSettings' => [ | |
// The block demonstration page is not marked as an administrative | |
// page by \Drupal::service('router.admin_context')->isAdminRoute() | |
// function in order to use the frontend theme. Since JavaScript | |
// relies on a proper separation of admin pages, it needs to know this | |
// is an actual administrative page. | |
'path' => ['currentPathIsAdmin' => TRUE], | |
], | |
'library' => array( | |
'block/drupal.block.admin', | |
), | |
), | |
]; | |
// Show descriptions in each visible page region, nothing else. | |
$visible_regions = $this->getVisibleRegionNames($theme); | |
foreach (array_keys($visible_regions) as $region) { | |
$page[$region]['block_description'] = array( | |
'#type' => 'inline_template', | |
'#template' => '<div class="block-region demo-block">{{ region_name }}</div>', | |
'#context' => array('region_name' => $visible_regions[$region]), | |
); | |
} | |
return $page; | |
} | |
/** | |
* Returns the human-readable list of regions keyed by machine name. | |
* | |
* @param string $theme | |
* The name of the theme. | |
* | |
* @return array | |
* An array of human-readable region names keyed by machine name. | |
*/ | |
protected function getVisibleRegionNames($theme) { | |
return system_region_list($theme, REGIONS_VISIBLE); | |
} | |
} |