class CustomBlockStorageController

Controller class for custom blocks.

This extends the Drupal\Core\Entity\DatabaseStorageController class, adding required special handling for custom block entities.

Hierarchy

Expanded class hierarchy of CustomBlockStorageController

File

drupal/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockStorageController.php, line 19
Contains \Drupal\custom_block\CustomBlockStorageController.

Namespace

Drupal\custom_block
View source
class CustomBlockStorageController extends DatabaseStorageControllerNG {

  /**
   * Overrides \Drupal\Core\Entity\DatabaseStorageController::preSaveRevision().
   */
  protected function preSaveRevision(\stdClass $record, EntityInterface $entity) {
    if ($entity
      ->isNewRevision()) {

      // When inserting either a new custom block or a new custom_block
      // revision, $entity->log must be set because {block_custom_revision}.log
      // is a text column and therefore cannot have a default value. However,
      // it might not be set at this point (for example, if the user submitting
      // the form does not have permission to create revisions), so we ensure
      // that it is at least an empty string in that case.
      // @todo: Make the {block_custom_revision}.log column nullable so that we
      // can remove this check.
      if (!isset($record->log)) {
        $record->log = '';
      }
    }
    elseif (isset($entity->original) && (!isset($record->log) || $record->log === '')) {

      // If we are updating an existing custom_block without adding a new
      // revision, we need to make sure $entity->log is reset whenever it is
      // empty. Therefore, this code allows us to avoid clobbering an existing
      // log entry with an empty one.
      $record->log = $entity->original->log->value;
    }
  }

  /**
   * Overrides \Drupal\Core\Entity\DatabaseStorageController::attachLoad().
   */
  protected function attachLoad(&$blocks, $load_revision = FALSE) {

    // Create an array of block types for passing as a load argument.
    // Note that blocks at this point are still \StdClass objects returned from
    // the database.
    foreach ($blocks as $id => $entity) {
      $types[$entity->type] = $entity->type;
    }

    // Besides the list of blocks, pass one additional argument to
    // hook_custom_block_load(), containing a list of block types that were
    // loaded.
    $this->hookLoadArguments = array(
      $types,
    );
    parent::attachLoad($blocks, $load_revision);
  }

  /**
   * Overrides \Drupal\Core\Entity\DatabaseStorageController::postSave().
   */
  protected function postSave(EntityInterface $block, $update) {

    // Invalidate the block cache to update custom block-based derivatives.
    drupal_container()
      ->get('plugin.manager.block')
      ->clearCachedDefinitions();
  }

  /**
   * Implements \Drupal\Core\Entity\DataBaseStorageControllerNG::basePropertyDefinitions().
   */
  public function baseFieldDefinitions() {
    $properties['id'] = array(
      'label' => t('ID'),
      'description' => t('The custom block ID.'),
      'type' => 'integer_field',
      'read-only' => TRUE,
    );
    $properties['uuid'] = array(
      'label' => t('UUID'),
      'description' => t('The custom block UUID.'),
      'type' => 'string_field',
    );
    $properties['revision_id'] = array(
      'label' => t('Revision ID'),
      'description' => t('The revision ID.'),
      'type' => 'integer_field',
    );
    $properties['langcode'] = array(
      'label' => t('Language code'),
      'description' => t('The comment language code.'),
      'type' => 'language_field',
    );
    $properties['info'] = array(
      'label' => t('Subject'),
      'description' => t('The custom block name.'),
      'type' => 'string_field',
    );
    $properties['type'] = array(
      'label' => t('Block type'),
      'description' => t('The block type.'),
      'type' => 'string_field',
    );
    $properties['log'] = array(
      'label' => t('Revision log message'),
      'description' => t('The revision log message.'),
      'type' => 'string_field',
    );
    return $properties;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CustomBlockStorageController::attachLoad protected function Overrides \Drupal\Core\Entity\DatabaseStorageController::attachLoad(). Overrides DatabaseStorageControllerNG::attachLoad
CustomBlockStorageController::baseFieldDefinitions public function Implements \Drupal\Core\Entity\DataBaseStorageControllerNG::basePropertyDefinitions(). Overrides DatabaseStorageController::baseFieldDefinitions
CustomBlockStorageController::postSave protected function Overrides \Drupal\Core\Entity\DatabaseStorageController::postSave(). Overrides DatabaseStorageController::postSave
CustomBlockStorageController::preSaveRevision protected function Overrides \Drupal\Core\Entity\DatabaseStorageController::preSaveRevision(). Overrides DatabaseStorageController::preSaveRevision
DatabaseStorageController::$cache protected property Whether this entity type should use the static cache. Overrides EntityStorageControllerBase::$cache
DatabaseStorageController::$database protected property Active database connection.
DatabaseStorageController::$entityFieldInfo protected property An array of field information, i.e. containing definitions.
DatabaseStorageController::$fieldDefinitions protected property Static cache of field definitions per bundle.
DatabaseStorageController::$revisionKey protected property Name of entity's revision database table field, if it supports revisions.
DatabaseStorageController::$revisionTable protected property The table that stores revisions, if the entity supports revisions.
DatabaseStorageController::createInstance public static function Instantiates a new instance of this entity controller. Overrides EntityControllerInterface::createInstance 2
DatabaseStorageController::deleteRevision public function Implements \Drupal\Core\Entity\EntityStorageControllerInterface::deleteRevision(). Overrides EntityStorageControllerInterface::deleteRevision
DatabaseStorageController::getFieldDefinitions public function Implements \Drupal\Core\Entity\EntityStorageControllerInterface::getFieldDefinitions(). Overrides EntityStorageControllerInterface::getFieldDefinitions
DatabaseStorageController::getQueryServiceName public function Implements \Drupal\Core\Entity\EntityStorageControllerInterface::getQueryServiceName().
DatabaseStorageController::load public function Implements \Drupal\Core\Entity\EntityStorageControllerInterface::load(). Overrides EntityStorageControllerInterface::load
DatabaseStorageController::loadByProperties public function Implements \Drupal\Core\Entity\EntityStorageControllerInterface::loadByProperties(). Overrides EntityStorageControllerInterface::loadByProperties
DatabaseStorageController::loadRevision public function Implements \Drupal\Core\Entity\EntityStorageControllerInterface::loadRevision(). Overrides EntityStorageControllerInterface::loadRevision
DatabaseStorageController::postDelete protected function Acts on deleted entities before the delete hook is invoked. 6
DatabaseStorageController::preDelete protected function Acts on entities before they are deleted. 5
DatabaseStorageController::preSave protected function Acts on an entity before the presave hook is invoked. 6
DatabaseStorageControllerNG::$bundleKey protected property The entity bundle key.
DatabaseStorageControllerNG::$dataTable protected property The table that stores properties, if the entity has multilingual support.
DatabaseStorageControllerNG::$entityClass protected property The entity class to use.
DatabaseStorageControllerNG::attachPropertyData protected function Attaches property data in all languages for translatable properties.
DatabaseStorageControllerNG::buildPropertyQuery protected function Builds an entity query. Overrides DatabaseStorageController::buildPropertyQuery 1
DatabaseStorageControllerNG::buildQuery protected function Builds the query to load the entity. Overrides DatabaseStorageController::buildQuery 1
DatabaseStorageControllerNG::create public function Overrides DatabaseStorageController::create(). Overrides DatabaseStorageController::create 7
DatabaseStorageControllerNG::delete public function Overwrites \Drupal\Core\Entity\DatabaseStorageController::delete(). Overrides DatabaseStorageController::delete
DatabaseStorageControllerNG::invokeHook protected function Overrides DatabaseStorageController::invokeHook(). Overrides DatabaseStorageController::invokeHook 2
DatabaseStorageControllerNG::mapFromStorageRecords protected function Maps from storage records to entity objects.
DatabaseStorageControllerNG::mapToDataStorageRecord protected function Maps from an entity object to the storage record of the data table. 1
DatabaseStorageControllerNG::mapToRevisionStorageRecord protected function Maps from an entity object to the storage record of the revision table.
DatabaseStorageControllerNG::mapToStorageRecord protected function Maps from an entity object to the storage record of the base table.
DatabaseStorageControllerNG::save public function Overrides DatabaseStorageController::save(). Overrides DatabaseStorageController::save 1
DatabaseStorageControllerNG::savePropertyData protected function Stores the entity property language-aware data.
DatabaseStorageControllerNG::saveRevision protected function Saves an entity revision. Overrides DatabaseStorageController::saveRevision
DatabaseStorageControllerNG::__construct public function Overrides DatabaseStorageController::__construct(). Overrides DatabaseStorageController::__construct 1
EntityStorageControllerBase::$entityCache protected property Static cache of entities.
EntityStorageControllerBase::$entityInfo protected property Array of information about the entity.
EntityStorageControllerBase::$entityType protected property Entity type for this controller instance.
EntityStorageControllerBase::$hookLoadArguments protected property Additional arguments to pass to hook_TYPE_load().
EntityStorageControllerBase::$idKey protected property Name of the entity's ID field in the entity database table.
EntityStorageControllerBase::$uuidKey protected property Name of entity's UUID database table field, if it supports UUIDs. 1
EntityStorageControllerBase::cacheGet protected function Gets entities from the static cache.
EntityStorageControllerBase::cacheSet protected function Stores entities in the static entity cache.
EntityStorageControllerBase::loadUnchanged public function Loads an unchanged entity from the database. Overrides EntityStorageControllerInterface::loadUnchanged
EntityStorageControllerBase::resetCache public function Resets the internal, static entity cache. Overrides EntityStorageControllerInterface::resetCache 3
EntityStorageControllerInterface::getQueryServicename public function Gets the name of the service for the query for this entity storage. 1