annotate core/modules/block_content/src/Entity/BlockContent.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\block_content\Entity;
Chris@0 4
Chris@0 5 use Drupal\Core\Entity\EditorialContentEntityBase;
Chris@0 6 use Drupal\Core\Entity\EntityStorageInterface;
Chris@0 7 use Drupal\Core\Entity\EntityTypeInterface;
Chris@0 8 use Drupal\Core\Field\BaseFieldDefinition;
Chris@0 9 use Drupal\block_content\BlockContentInterface;
Chris@0 10 use Drupal\user\UserInterface;
Chris@0 11
Chris@0 12 /**
Chris@0 13 * Defines the custom block entity class.
Chris@0 14 *
Chris@0 15 * @ContentEntityType(
Chris@0 16 * id = "block_content",
Chris@0 17 * label = @Translation("Custom block"),
Chris@0 18 * bundle_label = @Translation("Custom block type"),
Chris@0 19 * handlers = {
Chris@0 20 * "storage" = "Drupal\Core\Entity\Sql\SqlContentEntityStorage",
Chris@0 21 * "access" = "Drupal\block_content\BlockContentAccessControlHandler",
Chris@0 22 * "list_builder" = "Drupal\block_content\BlockContentListBuilder",
Chris@0 23 * "view_builder" = "Drupal\block_content\BlockContentViewBuilder",
Chris@0 24 * "views_data" = "Drupal\block_content\BlockContentViewsData",
Chris@0 25 * "form" = {
Chris@0 26 * "add" = "Drupal\block_content\BlockContentForm",
Chris@0 27 * "edit" = "Drupal\block_content\BlockContentForm",
Chris@0 28 * "delete" = "Drupal\block_content\Form\BlockContentDeleteForm",
Chris@0 29 * "default" = "Drupal\block_content\BlockContentForm"
Chris@0 30 * },
Chris@0 31 * "translation" = "Drupal\block_content\BlockContentTranslationHandler"
Chris@0 32 * },
Chris@0 33 * admin_permission = "administer blocks",
Chris@0 34 * base_table = "block_content",
Chris@0 35 * revision_table = "block_content_revision",
Chris@0 36 * data_table = "block_content_field_data",
Chris@0 37 * revision_data_table = "block_content_field_revision",
Chris@0 38 * show_revision_ui = TRUE,
Chris@0 39 * links = {
Chris@0 40 * "canonical" = "/block/{block_content}",
Chris@0 41 * "delete-form" = "/block/{block_content}/delete",
Chris@0 42 * "edit-form" = "/block/{block_content}",
Chris@0 43 * "collection" = "/admin/structure/block/block-content",
Chris@0 44 * "create" = "/block",
Chris@0 45 * },
Chris@0 46 * translatable = TRUE,
Chris@0 47 * entity_keys = {
Chris@0 48 * "id" = "id",
Chris@0 49 * "revision" = "revision_id",
Chris@0 50 * "bundle" = "type",
Chris@0 51 * "label" = "info",
Chris@0 52 * "langcode" = "langcode",
Chris@0 53 * "uuid" = "uuid",
Chris@0 54 * "published" = "status",
Chris@0 55 * },
Chris@0 56 * revision_metadata_keys = {
Chris@0 57 * "revision_user" = "revision_user",
Chris@0 58 * "revision_created" = "revision_created",
Chris@0 59 * "revision_log_message" = "revision_log"
Chris@0 60 * },
Chris@0 61 * bundle_entity_type = "block_content_type",
Chris@0 62 * field_ui_base_route = "entity.block_content_type.edit_form",
Chris@0 63 * render_cache = FALSE,
Chris@0 64 * )
Chris@0 65 *
Chris@0 66 * Note that render caching of block_content entities is disabled because they
Chris@0 67 * are always rendered as blocks, and blocks already have their own render
Chris@0 68 * caching.
Chris@0 69 * See https://www.drupal.org/node/2284917#comment-9132521 for more information.
Chris@0 70 */
Chris@0 71 class BlockContent extends EditorialContentEntityBase implements BlockContentInterface {
Chris@0 72
Chris@0 73 /**
Chris@0 74 * The theme the block is being created in.
Chris@0 75 *
Chris@0 76 * When creating a new custom block from the block library, the user is
Chris@0 77 * redirected to the configure form for that block in the given theme. The
Chris@0 78 * theme is stored against the block when the custom block add form is shown.
Chris@0 79 *
Chris@0 80 * @var string
Chris@0 81 */
Chris@0 82 protected $theme;
Chris@0 83
Chris@0 84 /**
Chris@0 85 * {@inheritdoc}
Chris@0 86 */
Chris@0 87 public function createDuplicate() {
Chris@0 88 $duplicate = parent::createDuplicate();
Chris@0 89 $duplicate->revision_id->value = NULL;
Chris@0 90 $duplicate->id->value = NULL;
Chris@0 91 return $duplicate;
Chris@0 92 }
Chris@0 93
Chris@0 94 /**
Chris@0 95 * {@inheritdoc}
Chris@0 96 */
Chris@0 97 public function setTheme($theme) {
Chris@0 98 $this->theme = $theme;
Chris@0 99 return $this;
Chris@0 100 }
Chris@0 101
Chris@0 102 /**
Chris@0 103 * {@inheritdoc}
Chris@0 104 */
Chris@0 105 public function getTheme() {
Chris@0 106 return $this->theme;
Chris@0 107 }
Chris@0 108
Chris@0 109 /**
Chris@0 110 * {@inheritdoc}
Chris@0 111 */
Chris@0 112 public function postSave(EntityStorageInterface $storage, $update = TRUE) {
Chris@0 113 parent::postSave($storage, $update);
Chris@0 114 static::invalidateBlockPluginCache();
Chris@0 115 }
Chris@0 116
Chris@0 117 /**
Chris@0 118 * {@inheritdoc}
Chris@0 119 */
Chris@0 120 public static function postDelete(EntityStorageInterface $storage, array $entities) {
Chris@0 121 parent::postDelete($storage, $entities);
Chris@0 122 static::invalidateBlockPluginCache();
Chris@0 123 }
Chris@0 124
Chris@0 125 /**
Chris@0 126 * {@inheritdoc}
Chris@0 127 */
Chris@0 128 public function getInstances() {
Chris@0 129 return \Drupal::entityTypeManager()->getStorage('block')->loadByProperties(['plugin' => 'block_content:' . $this->uuid()]);
Chris@0 130 }
Chris@0 131
Chris@0 132 /**
Chris@0 133 * {@inheritdoc}
Chris@0 134 */
Chris@0 135 public function preSaveRevision(EntityStorageInterface $storage, \stdClass $record) {
Chris@0 136 parent::preSaveRevision($storage, $record);
Chris@0 137
Chris@0 138 if (!$this->isNewRevision() && isset($this->original) && (!isset($record->revision_log) || $record->revision_log === '')) {
Chris@0 139 // If we are updating an existing block_content without adding a new
Chris@0 140 // revision and the user did not supply a revision log, keep the existing
Chris@0 141 // one.
Chris@0 142 $record->revision_log = $this->original->getRevisionLogMessage();
Chris@0 143 }
Chris@0 144 }
Chris@0 145
Chris@0 146 /**
Chris@0 147 * {@inheritdoc}
Chris@0 148 */
Chris@0 149 public function delete() {
Chris@0 150 foreach ($this->getInstances() as $instance) {
Chris@0 151 $instance->delete();
Chris@0 152 }
Chris@0 153 parent::delete();
Chris@0 154 }
Chris@0 155
Chris@0 156 /**
Chris@0 157 * {@inheritdoc}
Chris@0 158 */
Chris@0 159 public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
Chris@0 160 /** @var \Drupal\Core\Field\BaseFieldDefinition[] $fields */
Chris@0 161 $fields = parent::baseFieldDefinitions($entity_type);
Chris@0 162
Chris@0 163 $fields['id']->setLabel(t('Custom block ID'))
Chris@0 164 ->setDescription(t('The custom block ID.'));
Chris@0 165
Chris@0 166 $fields['uuid']->setDescription(t('The custom block UUID.'));
Chris@0 167
Chris@0 168 $fields['revision_id']->setDescription(t('The revision ID.'));
Chris@0 169
Chris@0 170 $fields['langcode']->setDescription(t('The custom block language code.'));
Chris@0 171
Chris@0 172 $fields['type']->setLabel(t('Block type'))
Chris@0 173 ->setDescription(t('The block type.'));
Chris@0 174
Chris@0 175 $fields['revision_log']->setDescription(t('The log entry explaining the changes in this revision.'));
Chris@0 176
Chris@0 177 $fields['info'] = BaseFieldDefinition::create('string')
Chris@0 178 ->setLabel(t('Block description'))
Chris@0 179 ->setDescription(t('A brief description of your block.'))
Chris@0 180 ->setRevisionable(TRUE)
Chris@0 181 ->setTranslatable(TRUE)
Chris@0 182 ->setRequired(TRUE)
Chris@0 183 ->setDisplayOptions('form', [
Chris@0 184 'type' => 'string_textfield',
Chris@0 185 'weight' => -5,
Chris@0 186 ])
Chris@0 187 ->setDisplayConfigurable('form', TRUE)
Chris@0 188 ->addConstraint('UniqueField', []);
Chris@0 189
Chris@0 190 $fields['changed'] = BaseFieldDefinition::create('changed')
Chris@0 191 ->setLabel(t('Changed'))
Chris@0 192 ->setDescription(t('The time that the custom block was last edited.'))
Chris@0 193 ->setTranslatable(TRUE)
Chris@0 194 ->setRevisionable(TRUE);
Chris@0 195
Chris@0 196 return $fields;
Chris@0 197 }
Chris@0 198
Chris@0 199 /**
Chris@0 200 * {@inheritdoc}
Chris@0 201 */
Chris@0 202 public function getRevisionLog() {
Chris@0 203 return $this->getRevisionLogMessage();
Chris@0 204 }
Chris@0 205
Chris@0 206 /**
Chris@0 207 * {@inheritdoc}
Chris@0 208 */
Chris@0 209 public function setInfo($info) {
Chris@0 210 $this->set('info', $info);
Chris@0 211 return $this;
Chris@0 212 }
Chris@0 213
Chris@0 214 /**
Chris@0 215 * {@inheritdoc}
Chris@0 216 */
Chris@0 217 public function setRevisionLog($revision_log) {
Chris@0 218 return $this->setRevisionLogMessage($revision_log);
Chris@0 219 }
Chris@0 220
Chris@0 221 /**
Chris@0 222 * {@inheritdoc}
Chris@0 223 */
Chris@0 224 public function getRevisionCreationTime() {
Chris@0 225 return $this->get('revision_created')->value;
Chris@0 226 }
Chris@0 227
Chris@0 228 /**
Chris@0 229 * {@inheritdoc}
Chris@0 230 */
Chris@0 231 public function setRevisionCreationTime($timestamp) {
Chris@0 232 $this->set('revision_created', $timestamp);
Chris@0 233 return $this;
Chris@0 234 }
Chris@0 235
Chris@0 236 /**
Chris@0 237 * {@inheritdoc}
Chris@0 238 */
Chris@0 239 public function getRevisionUser() {
Chris@0 240 return $this->get('revision_user')->entity;
Chris@0 241 }
Chris@0 242
Chris@0 243 public function setRevisionUser(UserInterface $account) {
Chris@0 244 $this->set('revision_user', $account);
Chris@0 245 return $this;
Chris@0 246 }
Chris@0 247
Chris@0 248 /**
Chris@0 249 * {@inheritdoc}
Chris@0 250 */
Chris@0 251 public function getRevisionUserId() {
Chris@0 252 return $this->get('revision_user')->entity->id();
Chris@0 253 }
Chris@0 254
Chris@0 255 /**
Chris@0 256 * {@inheritdoc}
Chris@0 257 */
Chris@0 258 public function setRevisionUserId($user_id) {
Chris@0 259 $this->set('revision_user', $user_id);
Chris@0 260 return $this;
Chris@0 261 }
Chris@0 262
Chris@0 263 /**
Chris@0 264 * {@inheritdoc}
Chris@0 265 */
Chris@0 266 public function getRevisionLogMessage() {
Chris@0 267 return $this->get('revision_log')->value;
Chris@0 268 }
Chris@0 269
Chris@0 270 /**
Chris@0 271 * {@inheritdoc}
Chris@0 272 */
Chris@0 273 public function setRevisionLogMessage($revision_log_message) {
Chris@0 274 $this->set('revision_log', $revision_log_message);
Chris@0 275 return $this;
Chris@0 276 }
Chris@0 277
Chris@0 278 /**
Chris@0 279 * Invalidates the block plugin cache after changes and deletions.
Chris@0 280 */
Chris@0 281 protected static function invalidateBlockPluginCache() {
Chris@0 282 // Invalidate the block cache to update custom block-based derivatives.
Chris@0 283 \Drupal::service('plugin.manager.block')->clearCachedDefinitions();
Chris@0 284 }
Chris@0 285
Chris@0 286 }