Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 63 |
BlockContentBlock | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
132 | |
0.00% |
0 / 63 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 10 |
|||
defaultConfiguration | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
blockForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 14 |
|||
blockSubmit | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
blockAccess | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
build | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 13 |
|||
getEntity | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\block_content\Plugin\Block\BlockContentBlock. | |
*/ | |
namespace Drupal\block_content\Plugin\Block; | |
use Drupal\Core\Access\AccessResult; | |
use Drupal\Core\Block\BlockBase; | |
use Drupal\Core\Block\BlockManagerInterface; | |
use Drupal\Core\Entity\EntityManagerInterface; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Plugin\ContainerFactoryPluginInterface; | |
use Drupal\Core\Routing\UrlGeneratorInterface; | |
use Drupal\Core\Session\AccountInterface; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
/** | |
* Defines a generic custom block type. | |
* | |
* @Block( | |
* id = "block_content", | |
* admin_label = @Translation("Custom block"), | |
* category = @Translation("Custom"), | |
* deriver = "Drupal\block_content\Plugin\Derivative\BlockContent" | |
* ) | |
*/ | |
class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInterface { | |
/** | |
* The Plugin Block Manager. | |
* | |
* @var \Drupal\Core\Block\BlockManagerInterface. | |
*/ | |
protected $blockManager; | |
/** | |
* The entity manager service. | |
* | |
* @var \Drupal\Core\Entity\EntityManagerInterface | |
*/ | |
protected $entityManager; | |
/** | |
* The Drupal account to use for checking for access to block. | |
* | |
* @var \Drupal\Core\Session\AccountInterface. | |
*/ | |
protected $account; | |
/** | |
* The block content entity. | |
* | |
* @var \Drupal\block_content\BlockContentInterface | |
*/ | |
protected $blockContent; | |
/** | |
* The URL generator. | |
* | |
* @var \Drupal\Core\Routing\UrlGeneratorInterface | |
*/ | |
protected $urlGenerator; | |
/** | |
* Constructs a new BlockContentBlock. | |
* | |
* @param array $configuration | |
* A configuration array containing information about the plugin instance. | |
* @param string $plugin_id | |
* The plugin ID for the plugin instance. | |
* @param mixed $plugin_definition | |
* The plugin implementation definition. | |
* @param \Drupal\Core\Block\BlockManagerInterface $block_manager | |
* The Plugin Block Manager. | |
* @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager | |
* The entity manager service. | |
* @param \Drupal\Core\Session\AccountInterface $account | |
* The account for which view access should be checked. | |
* @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator | |
* The URL generator. | |
*/ | |
public function __construct(array $configuration, $plugin_id, $plugin_definition, BlockManagerInterface $block_manager, EntityManagerInterface $entity_manager, AccountInterface $account, UrlGeneratorInterface $url_generator) { | |
parent::__construct($configuration, $plugin_id, $plugin_definition); | |
$this->blockManager = $block_manager; | |
$this->entityManager = $entity_manager; | |
$this->account = $account; | |
$this->urlGenerator = $url_generator; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { | |
return new static( | |
$configuration, | |
$plugin_id, | |
$plugin_definition, | |
$container->get('plugin.manager.block'), | |
$container->get('entity.manager'), | |
$container->get('current_user'), | |
$container->get('url_generator') | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function defaultConfiguration() { | |
return array( | |
'status' => TRUE, | |
'info' => '', | |
'view_mode' => 'full', | |
); | |
} | |
/** | |
* Overrides \Drupal\Core\Block\BlockBase::blockForm(). | |
* | |
* Adds body and description fields to the block configuration form. | |
*/ | |
public function blockForm($form, FormStateInterface $form_state) { | |
$uuid = $this->getDerivativeId(); | |
$block = $this->entityManager->loadEntityByUuid('block_content', $uuid); | |
$options = $this->entityManager->getViewModeOptionsByBundle('block_content', $block->bundle()); | |
$form['view_mode'] = array( | |
'#type' => 'select', | |
'#options' => $options, | |
'#title' => $this->t('View mode'), | |
'#description' => $this->t('Output the block in this view mode.'), | |
'#default_value' => $this->configuration['view_mode'], | |
'#access' => (count($options) > 1), | |
); | |
$form['title']['#description'] = $this->t('The title of the block as shown to the user.'); | |
return $form; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function blockSubmit($form, FormStateInterface $form_state) { | |
// Invalidate the block cache to update custom block-based derivatives. | |
$this->configuration['view_mode'] = $form_state->getValue('view_mode'); | |
$this->blockManager->clearCachedDefinitions(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
protected function blockAccess(AccountInterface $account) { | |
if ($this->getEntity()) { | |
return $this->getEntity()->access('view', $account, TRUE); | |
} | |
return AccessResult::forbidden(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function build() { | |
if ($block = $this->getEntity()) { | |
return $this->entityManager->getViewBuilder($block->getEntityTypeId())->view($block, $this->configuration['view_mode']); | |
} | |
else { | |
return array( | |
'#markup' => $this->t('Block with uuid %uuid does not exist. <a href=":url">Add custom block</a>.', array( | |
'%uuid' => $this->getDerivativeId(), | |
':url' => $this->urlGenerator->generate('block_content.add_page') | |
)), | |
'#access' => $this->account->hasPermission('administer blocks') | |
); | |
} | |
} | |
/** | |
* Loads the block content entity of the block. | |
* | |
* @return \Drupal\block_content\BlockContentInterface|null | |
* The block content entity. | |
*/ | |
protected function getEntity() { | |
$uuid = $this->getDerivativeId(); | |
if (!isset($this->blockContent)) { | |
$this->blockContent = $this->entityManager->loadEntityByUuid('block_content', $uuid); | |
} | |
return $this->blockContent; | |
} | |
} |