class FeedStorageController

Controller class for aggregators feeds.

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

Hierarchy

Expanded class hierarchy of FeedStorageController

File

drupal/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php, line 19
Contains \Drupal\aggregator\FeedStorageController.

Namespace

Drupal\aggregator
View source
class FeedStorageController extends DatabaseStorageControllerNG {

  /**
   * Overrides Drupal\Core\Entity\DataBaseStorageController::create().
   */
  public function create(array $values) {
    $values += array(
      'link' => '',
      'description' => '',
      'image' => '',
    );
    return parent::create($values);
  }

  /**
   * Overrides Drupal\Core\Entity\DataBaseStorageController::attachLoad().
   */
  protected function attachLoad(&$queried_entities, $load_revision = FALSE) {
    parent::attachLoad($queried_entities, $load_revision);
    foreach ($queried_entities as $item) {
      $item->categories = db_query('SELECT c.cid, c.title FROM {aggregator_category} c JOIN {aggregator_category_feed} f ON c.cid = f.cid AND f.fid = :fid ORDER BY title', array(
        ':fid' => $item
          ->id(),
      ))
        ->fetchAllKeyed();
    }
  }

  /**
   * Overrides Drupal\Core\Entity\DataBaseStorageController::preDelete().
   */
  protected function preDelete($entities) {
    parent::preDelete($entities);

    // Invalidate the block cache to update aggregator feed-based derivatives.
    if (module_exists('block')) {
      \Drupal::service('plugin.manager.block')
        ->clearCachedDefinitions();
    }
    foreach ($entities as $entity) {

      // Notify processors to remove stored items.
      $manager = \Drupal::service('plugin.manager.aggregator.processor');
      foreach ($manager
        ->getDefinitions() as $id => $definition) {
        $manager
          ->createInstance($id)
          ->remove($entity);
      }
    }
  }

  /**
   * Overrides Drupal\Core\Entity\DataBaseStorageController::postDelete().
   */
  protected function postDelete($entities) {
    parent::postDelete($entities);
    foreach ($entities as $entity) {

      // Make sure there is no active block for this feed.
      $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
      foreach ($block_configs as $config_id) {
        $config = config($config_id);
        if ($config
          ->get('id') == 'aggregator_feed_block:' . $entity
          ->id()) {
          $config
            ->delete();
        }
      }
    }
  }

  /**
   * Overrides Drupal\Core\Entity\DataBaseStorageController::preSave().
   */
  protected function preSave(EntityInterface $entity) {
    parent::preSave($entity);

    // Invalidate the block cache to update aggregator feed-based derivatives.
    if (module_exists('block')) {
      drupal_container()
        ->get('plugin.manager.block')
        ->clearCachedDefinitions();
    }

    // An existing feed is being modified, delete the category listings.
    db_delete('aggregator_category_feed')
      ->condition('fid', $entity
      ->id())
      ->execute();
  }

  /**
   * Overrides Drupal\Core\Entity\DataBaseStorageController::postSave().
   */
  protected function postSave(EntityInterface $entity, $update) {
    parent::postSave($entity, $update);
    if (!empty($entity->categories)) {
      foreach ($entity->categories as $cid => $value) {
        if ($value) {
          db_insert('aggregator_category_feed')
            ->fields(array(
            'fid' => $entity
              ->id(),
            'cid' => $cid,
          ))
            ->execute();
        }
      }
    }
  }

  /**
   * Implements Drupal\Core\Entity\DataBaseStorageControllerNG::baseFieldDefinitions().
   */
  public function baseFieldDefinitions() {
    $fields['fid'] = array(
      'label' => t('ID'),
      'description' => t('The ID of the aggregor feed.'),
      'type' => 'integer_field',
      'read-only' => TRUE,
    );
    $fields['title'] = array(
      'label' => t('Title'),
      'description' => t('The title of the feed.'),
      'type' => 'string_field',
    );
    $fields['langcode'] = array(
      'label' => t('Language code'),
      'description' => t('The feed language code.'),
      'type' => 'language_field',
    );
    $fields['url'] = array(
      'label' => t('URL'),
      'description' => t('The URL to the feed.'),
      'type' => 'uri_field',
    );
    $fields['refresh'] = array(
      'label' => t('Refresh'),
      'description' => t('How often to check for new feed items, in seconds.'),
      'type' => 'integer_field',
    );
    $fields['checked'] = array(
      'label' => t('Checked'),
      'description' => t('Last time feed was checked for new items, as Unix timestamp.'),
      'type' => 'integer_field',
    );
    $fields['queued'] = array(
      'label' => t('Queued'),
      'description' => t('Time when this feed was queued for refresh, 0 if not queued.'),
      'type' => 'integer_field',
    );
    $fields['link'] = array(
      'label' => t('Link'),
      'description' => t('The link of the feed.'),
      'type' => 'uri_field',
    );
    $fields['description'] = array(
      'label' => t('Description'),
      'description' => t("The parent website's description that comes from the <description> element in the feed."),
      'type' => 'string_field',
    );
    $fields['image'] = array(
      'label' => t('image'),
      'description' => t('An image representing the feed.'),
      'type' => 'uri_field',
    );
    $fields['hash'] = array(
      'label' => t('Hash'),
      'description' => t('Calculated hash of the feed data, used for validating cache.'),
      'type' => 'string_field',
    );
    $fields['etag'] = array(
      'label' => t('Etag'),
      'description' => t('Entity tag HTTP response header, used for validating cache.'),
      'type' => 'string_field',
    );
    $fields['modified'] = array(
      'label' => t('Modified'),
      'description' => t('When the feed was last modified, as a Unix timestamp.'),
      'type' => 'integer_field',
    );
    $fields['block'] = array(
      'label' => t('Block'),
      'description' => t('Number of items to display in the feed’s block.'),
      'type' => 'integer_field',
    );
    return $fields;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
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::preSaveRevision protected function Act on a revision before being saved. 3
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::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
FeedStorageController::attachLoad protected function Overrides Drupal\Core\Entity\DataBaseStorageController::attachLoad(). Overrides DatabaseStorageControllerNG::attachLoad
FeedStorageController::baseFieldDefinitions public function Implements Drupal\Core\Entity\DataBaseStorageControllerNG::baseFieldDefinitions(). Overrides DatabaseStorageController::baseFieldDefinitions
FeedStorageController::create public function Overrides Drupal\Core\Entity\DataBaseStorageController::create(). Overrides DatabaseStorageControllerNG::create
FeedStorageController::postDelete protected function Overrides Drupal\Core\Entity\DataBaseStorageController::postDelete(). Overrides DatabaseStorageController::postDelete
FeedStorageController::postSave protected function Overrides Drupal\Core\Entity\DataBaseStorageController::postSave(). Overrides DatabaseStorageController::postSave
FeedStorageController::preDelete protected function Overrides Drupal\Core\Entity\DataBaseStorageController::preDelete(). Overrides DatabaseStorageController::preDelete
FeedStorageController::preSave protected function Overrides Drupal\Core\Entity\DataBaseStorageController::preSave(). Overrides DatabaseStorageController::preSave