diff core/modules/block_content/src/Entity/BlockContent.php @ 17:129ea1e6d783

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:21:36 +0000
parents 1fec387a4317
children
line wrap: on
line diff
--- a/core/modules/block_content/src/Entity/BlockContent.php	Tue Jul 10 15:07:59 2018 +0100
+++ b/core/modules/block_content/src/Entity/BlockContent.php	Thu Feb 28 13:21:36 2019 +0000
@@ -2,6 +2,7 @@
 
 namespace Drupal\block_content\Entity;
 
+use Drupal\block_content\Access\RefinableDependentAccessTrait;
 use Drupal\Core\Entity\EditorialContentEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
@@ -15,6 +16,13 @@
  * @ContentEntityType(
  *   id = "block_content",
  *   label = @Translation("Custom block"),
+ *   label_collection = @Translation("Custom blocks"),
+ *   label_singular = @Translation("custom block"),
+ *   label_plural = @Translation("custom blocks"),
+ *   label_count = @PluralTranslation(
+ *     singular = "@count custom block",
+ *     plural = "@count custom blocks",
+ *   ),
  *   bundle_label = @Translation("Custom block type"),
  *   handlers = {
  *     "storage" = "Drupal\Core\Entity\Sql\SqlContentEntityStorage",
@@ -70,6 +78,8 @@
  */
 class BlockContent extends EditorialContentEntityBase implements BlockContentInterface {
 
+  use RefinableDependentAccessTrait;
+
   /**
    * The theme the block is being created in.
    *
@@ -111,7 +121,9 @@
    */
   public function postSave(EntityStorageInterface $storage, $update = TRUE) {
     parent::postSave($storage, $update);
-    static::invalidateBlockPluginCache();
+    if ($this->isReusable() || (isset($this->original) && $this->original->isReusable())) {
+      static::invalidateBlockPluginCache();
+    }
   }
 
   /**
@@ -119,7 +131,14 @@
    */
   public static function postDelete(EntityStorageInterface $storage, array $entities) {
     parent::postDelete($storage, $entities);
-    static::invalidateBlockPluginCache();
+    /** @var \Drupal\block_content\BlockContentInterface $block */
+    foreach ($entities as $block) {
+      if ($block->isReusable()) {
+        // If any deleted blocks are reusable clear the block cache.
+        static::invalidateBlockPluginCache();
+        return;
+      }
+    }
   }
 
   /**
@@ -193,6 +212,13 @@
       ->setTranslatable(TRUE)
       ->setRevisionable(TRUE);
 
+    $fields['reusable'] = BaseFieldDefinition::create('boolean')
+      ->setLabel(t('Reusable'))
+      ->setDescription(t('A boolean indicating whether this block is reusable.'))
+      ->setTranslatable(FALSE)
+      ->setRevisionable(FALSE)
+      ->setDefaultValue(TRUE);
+
     return $fields;
   }
 
@@ -276,6 +302,27 @@
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function isReusable() {
+    return (bool) $this->get('reusable')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setReusable() {
+    return $this->set('reusable', TRUE);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setNonReusable() {
+    return $this->set('reusable', FALSE);
+  }
+
+  /**
    * Invalidates the block plugin cache after changes and deletions.
    */
   protected static function invalidateBlockPluginCache() {