namespace Drupal\block_content\Entity;
-use Drupal\Core\Entity\ContentEntityBase;
-use Drupal\Core\Entity\EntityChangedTrait;
+use Drupal\block_content\Access\RefinableDependentAccessTrait;
+use Drupal\Core\Entity\EditorialContentEntityBase;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
* @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",
* "bundle" = "type",
* "label" = "info",
* "langcode" = "langcode",
- * "uuid" = "uuid"
+ * "uuid" = "uuid",
+ * "published" = "status",
* },
* revision_metadata_keys = {
* "revision_user" = "revision_user",
* caching.
* See https://www.drupal.org/node/2284917#comment-9132521 for more information.
*/
-class BlockContent extends ContentEntityBase implements BlockContentInterface {
+class BlockContent extends EditorialContentEntityBase implements BlockContentInterface {
- use EntityChangedTrait;
+ use RefinableDependentAccessTrait;
/**
* The theme the block is being created in.
*/
public function postSave(EntityStorageInterface $storage, $update = TRUE) {
parent::postSave($storage, $update);
- static::invalidateBlockPluginCache();
+ if ($this->isReusable() || (isset($this->original) && $this->original->isReusable())) {
+ static::invalidateBlockPluginCache();
+ }
}
/**
*/
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;
+ }
+ }
}
/**
$fields['type']->setLabel(t('Block type'))
->setDescription(t('The block type.'));
+ $fields['revision_log']->setDescription(t('The log entry explaining the changes in this revision.'));
+
$fields['info'] = BaseFieldDefinition::create('string')
->setLabel(t('Block description'))
->setDescription(t('A brief description of your block.'))
->setDisplayConfigurable('form', TRUE)
->addConstraint('UniqueField', []);
- $fields['revision_log'] = BaseFieldDefinition::create('string_long')
- ->setLabel(t('Revision log message'))
- ->setDescription(t('The log entry explaining the changes in this revision.'))
- ->setRevisionable(TRUE)
- ->setDisplayOptions('form', [
- 'type' => 'string_textarea',
- 'weight' => 25,
- 'settings' => [
- 'rows' => 4,
- ],
- ]);
-
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the custom block was last edited.'))
->setTranslatable(TRUE)
->setRevisionable(TRUE);
- $fields['revision_created'] = BaseFieldDefinition::create('created')
- ->setLabel(t('Revision create time'))
- ->setDescription(t('The time that the current revision was created.'))
- ->setRevisionable(TRUE);
-
- $fields['revision_user'] = BaseFieldDefinition::create('entity_reference')
- ->setLabel(t('Revision user'))
- ->setDescription(t('The user ID of the author of the current revision.'))
- ->setSetting('target_type', 'user')
- ->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;
}
return $this;
}
+ /**
+ * {@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.
*/