Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / block_content / src / Plugin / Block / BlockContentBlock.php
index ef0bd96ea2652e1b1e249ca906ed5689c6b2800b..5e09be8b58e07284be4418a14440789e1897fbcb 100644 (file)
@@ -2,10 +2,12 @@
 
 namespace Drupal\block_content\Plugin\Block;
 
+use Drupal\block_content\BlockContentUuidLookup;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Block\BlockBase;
 use Drupal\Core\Block\BlockManagerInterface;
-use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
@@ -32,11 +34,11 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
   protected $blockManager;
 
   /**
-   * The entity manager service.
+   * The entity type manager service.
    *
-   * @var \Drupal\Core\Entity\EntityManagerInterface
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
    */
-  protected $entityManager;
+  protected $entityTypeManager;
 
   /**
    * The Drupal account to use for checking for access to block.
@@ -59,6 +61,20 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
    */
   protected $urlGenerator;
 
+  /**
+   * The block content UUID lookup service.
+   *
+   * @var \Drupal\block_content\BlockContentUuidLookup
+   */
+  protected $uuidLookup;
+
+  /**
+   * The entity display repository.
+   *
+   * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface
+   */
+  protected $entityDisplayRepository;
+
   /**
    * Constructs a new BlockContentBlock.
    *
@@ -70,20 +86,26 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
    *   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\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type 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.
+   * @param \Drupal\block_content\BlockContentUuidLookup $uuid_lookup
+   *   The block content UUID lookup service.
+   * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository
+   *   The entity display repository.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, BlockManagerInterface $block_manager, EntityManagerInterface $entity_manager, AccountInterface $account, UrlGeneratorInterface $url_generator) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, BlockManagerInterface $block_manager, EntityTypeManagerInterface $entity_type_manager, AccountInterface $account, UrlGeneratorInterface $url_generator, BlockContentUuidLookup $uuid_lookup, EntityDisplayRepositoryInterface $entity_display_repository) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->blockManager = $block_manager;
-    $this->entityManager = $entity_manager;
+    $this->entityTypeManager = $entity_type_manager;
     $this->account = $account;
     $this->urlGenerator = $url_generator;
+    $this->uuidLookup = $uuid_lookup;
+    $this->entityDisplayRepository = $entity_display_repository;
   }
 
   /**
@@ -95,9 +117,11 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
       $plugin_id,
       $plugin_definition,
       $container->get('plugin.manager.block'),
-      $container->get('entity.manager'),
+      $container->get('entity_type.manager'),
       $container->get('current_user'),
-      $container->get('url_generator')
+      $container->get('url_generator'),
+      $container->get('block_content.uuid_lookup'),
+      $container->get('entity_display.repository')
     );
   }
 
@@ -118,9 +142,11 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
    * 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());
+    $block = $this->getEntity();
+    if (!$block) {
+      return $form;
+    }
+    $options = $this->entityDisplayRepository->getViewModeOptionsByBundle('block_content', $block->bundle());
 
     $form['view_mode'] = [
       '#type' => 'select',
@@ -158,7 +184,7 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
    */
   public function build() {
     if ($block = $this->getEntity()) {
-      return $this->entityManager->getViewBuilder($block->getEntityTypeId())->view($block, $this->configuration['view_mode']);
+      return $this->entityTypeManager->getViewBuilder($block->getEntityTypeId())->view($block, $this->configuration['view_mode']);
     }
     else {
       return [
@@ -180,7 +206,9 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
   protected function getEntity() {
     if (!isset($this->blockContent)) {
       $uuid = $this->getDerivativeId();
-      $this->blockContent = $this->entityManager->loadEntityByUuid('block_content', $uuid);
+      if ($id = $this->uuidLookup->get($uuid)) {
+        $this->blockContent = $this->entityTypeManager->getStorage('block_content')->load($id);
+      }
     }
     return $this->blockContent;
   }