Controller class for aggregators feeds.
This extends the Drupal\Core\Entity\DatabaseStorageController class, adding required special handling for feed entities.
Expanded class hierarchy of FeedStorageController
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;
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DatabaseStorageController:: |
protected | property |
Whether this entity type should use the static cache. Overrides EntityStorageControllerBase:: |
|
DatabaseStorageController:: |
protected | property | Active database connection. | |
DatabaseStorageController:: |
protected | property | An array of field information, i.e. containing definitions. | |
DatabaseStorageController:: |
protected | property | Static cache of field definitions per bundle. | |
DatabaseStorageController:: |
protected | property | Name of entity's revision database table field, if it supports revisions. | |
DatabaseStorageController:: |
protected | property | The table that stores revisions, if the entity supports revisions. | |
DatabaseStorageController:: |
public static | function |
Instantiates a new instance of this entity controller. Overrides EntityControllerInterface:: |
2 |
DatabaseStorageController:: |
public | function |
Implements \Drupal\Core\Entity\EntityStorageControllerInterface::deleteRevision(). Overrides EntityStorageControllerInterface:: |
|
DatabaseStorageController:: |
public | function |
Implements \Drupal\Core\Entity\EntityStorageControllerInterface::getFieldDefinitions(). Overrides EntityStorageControllerInterface:: |
|
DatabaseStorageController:: |
public | function | Implements \Drupal\Core\Entity\EntityStorageControllerInterface::getQueryServiceName(). | |
DatabaseStorageController:: |
public | function |
Implements \Drupal\Core\Entity\EntityStorageControllerInterface::load(). Overrides EntityStorageControllerInterface:: |
|
DatabaseStorageController:: |
public | function |
Implements \Drupal\Core\Entity\EntityStorageControllerInterface::loadByProperties(). Overrides EntityStorageControllerInterface:: |
|
DatabaseStorageController:: |
public | function |
Implements \Drupal\Core\Entity\EntityStorageControllerInterface::loadRevision(). Overrides EntityStorageControllerInterface:: |
|
DatabaseStorageController:: |
protected | function | Act on a revision before being saved. | 3 |
DatabaseStorageControllerNG:: |
protected | property | The entity bundle key. | |
DatabaseStorageControllerNG:: |
protected | property | The table that stores properties, if the entity has multilingual support. | |
DatabaseStorageControllerNG:: |
protected | property | The entity class to use. | |
DatabaseStorageControllerNG:: |
protected | function | Attaches property data in all languages for translatable properties. | |
DatabaseStorageControllerNG:: |
protected | function |
Builds an entity query. Overrides DatabaseStorageController:: |
1 |
DatabaseStorageControllerNG:: |
protected | function |
Builds the query to load the entity. Overrides DatabaseStorageController:: |
1 |
DatabaseStorageControllerNG:: |
public | function |
Overwrites \Drupal\Core\Entity\DatabaseStorageController::delete(). Overrides DatabaseStorageController:: |
|
DatabaseStorageControllerNG:: |
protected | function |
Overrides DatabaseStorageController::invokeHook(). Overrides DatabaseStorageController:: |
2 |
DatabaseStorageControllerNG:: |
protected | function | Maps from storage records to entity objects. | |
DatabaseStorageControllerNG:: |
protected | function | Maps from an entity object to the storage record of the data table. | 1 |
DatabaseStorageControllerNG:: |
protected | function | Maps from an entity object to the storage record of the revision table. | |
DatabaseStorageControllerNG:: |
protected | function | Maps from an entity object to the storage record of the base table. | |
DatabaseStorageControllerNG:: |
public | function |
Overrides DatabaseStorageController::save(). Overrides DatabaseStorageController:: |
1 |
DatabaseStorageControllerNG:: |
protected | function | Stores the entity property language-aware data. | |
DatabaseStorageControllerNG:: |
protected | function |
Saves an entity revision. Overrides DatabaseStorageController:: |
|
DatabaseStorageControllerNG:: |
public | function |
Overrides DatabaseStorageController::__construct(). Overrides DatabaseStorageController:: |
1 |
EntityStorageControllerBase:: |
protected | property | Static cache of entities. | |
EntityStorageControllerBase:: |
protected | property | Array of information about the entity. | |
EntityStorageControllerBase:: |
protected | property | Entity type for this controller instance. | |
EntityStorageControllerBase:: |
protected | property | Additional arguments to pass to hook_TYPE_load(). | |
EntityStorageControllerBase:: |
protected | property | Name of the entity's ID field in the entity database table. | |
EntityStorageControllerBase:: |
protected | property | Name of entity's UUID database table field, if it supports UUIDs. | 1 |
EntityStorageControllerBase:: |
protected | function | Gets entities from the static cache. | |
EntityStorageControllerBase:: |
protected | function | Stores entities in the static entity cache. | |
EntityStorageControllerBase:: |
public | function |
Loads an unchanged entity from the database. Overrides EntityStorageControllerInterface:: |
|
EntityStorageControllerBase:: |
public | function |
Resets the internal, static entity cache. Overrides EntityStorageControllerInterface:: |
3 |
EntityStorageControllerInterface:: |
public | function | Gets the name of the service for the query for this entity storage. | 1 |
FeedStorageController:: |
protected | function |
Overrides Drupal\Core\Entity\DataBaseStorageController::attachLoad(). Overrides DatabaseStorageControllerNG:: |
|
FeedStorageController:: |
public | function |
Implements Drupal\Core\Entity\DataBaseStorageControllerNG::baseFieldDefinitions(). Overrides DatabaseStorageController:: |
|
FeedStorageController:: |
public | function |
Overrides Drupal\Core\Entity\DataBaseStorageController::create(). Overrides DatabaseStorageControllerNG:: |
|
FeedStorageController:: |
protected | function |
Overrides Drupal\Core\Entity\DataBaseStorageController::postDelete(). Overrides DatabaseStorageController:: |
|
FeedStorageController:: |
protected | function |
Overrides Drupal\Core\Entity\DataBaseStorageController::postSave(). Overrides DatabaseStorageController:: |
|
FeedStorageController:: |
protected | function |
Overrides Drupal\Core\Entity\DataBaseStorageController::preDelete(). Overrides DatabaseStorageController:: |
|
FeedStorageController:: |
protected | function |
Overrides Drupal\Core\Entity\DataBaseStorageController::preSave(). Overrides DatabaseStorageController:: |