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