Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 28 |
CRAP | |
0.00% |
0 / 185 |
Feed | |
0.00% |
0 / 1 |
|
0.00% |
0 / 28 |
992 | |
0.00% |
0 / 185 |
label | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
deleteItems | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
refreshItems | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
preCreate | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
preDelete | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
postDelete | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 12 |
|||
baseFieldDefinitions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 94 |
|||
getUrl | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getRefreshRate | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getLastCheckedTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getQueuedTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getWebsiteUrl | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getDescription | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getImage | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getHash | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getEtag | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getLastModified | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setTitle | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setUrl | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setRefreshRate | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setLastCheckedTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setQueuedTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setWebsiteUrl | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setDescription | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setImage | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setHash | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setEtag | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
setLastModified | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\aggregator\Entity\Feed. | |
*/ | |
namespace Drupal\aggregator\Entity; | |
use Drupal\Core\Entity\ContentEntityBase; | |
use Drupal\Core\Entity\EntityTypeInterface; | |
use Drupal\Core\Field\BaseFieldDefinition; | |
use Drupal\Core\Entity\EntityStorageInterface; | |
use Drupal\aggregator\FeedInterface; | |
/** | |
* Defines the aggregator feed entity class. | |
* | |
* @ContentEntityType( | |
* id = "aggregator_feed", | |
* label = @Translation("Aggregator feed"), | |
* handlers = { | |
* "storage" = "Drupal\aggregator\FeedStorage", | |
* "storage_schema" = "Drupal\aggregator\FeedStorageSchema", | |
* "view_builder" = "Drupal\aggregator\FeedViewBuilder", | |
* "access" = "Drupal\aggregator\FeedAccessControlHandler", | |
* "views_data" = "Drupal\aggregator\AggregatorFeedViewsData", | |
* "form" = { | |
* "default" = "Drupal\aggregator\FeedForm", | |
* "delete" = "Drupal\aggregator\Form\FeedDeleteForm", | |
* "delete_items" = "Drupal\aggregator\Form\FeedItemsDeleteForm", | |
* }, | |
* "route_provider" = { | |
* "html" = "Drupal\aggregator\FeedHtmlRouteProvider", | |
* }, | |
* }, | |
* links = { | |
* "canonical" = "/aggregator/sources/{aggregator_feed}", | |
* "edit-form" = "/aggregator/sources/{aggregator_feed}/configure", | |
* "delete-form" = "/aggregator/sources/{aggregator_feed}/delete", | |
* }, | |
* field_ui_base_route = "aggregator.admin_overview", | |
* base_table = "aggregator_feed", | |
* render_cache = FALSE, | |
* entity_keys = { | |
* "id" = "fid", | |
* "label" = "title", | |
* "langcode" = "langcode", | |
* "uuid" = "uuid", | |
* } | |
* ) | |
*/ | |
class Feed extends ContentEntityBase implements FeedInterface { | |
/** | |
* {@inheritdoc} | |
*/ | |
public function label() { | |
return $this->get('title')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function deleteItems() { | |
\Drupal::service('aggregator.items.importer')->delete($this); | |
// Reset feed. | |
$this->setLastCheckedTime(0); | |
$this->setHash(''); | |
$this->setEtag(''); | |
$this->setLastModified(0); | |
$this->save(); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function refreshItems() { | |
$success = \Drupal::service('aggregator.items.importer')->refresh($this); | |
// Regardless of successful or not, indicate that it has been checked. | |
$this->setLastCheckedTime(REQUEST_TIME); | |
$this->setQueuedTime(0); | |
$this->save(); | |
return $success; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function preCreate(EntityStorageInterface $storage, array &$values) { | |
$values += array( | |
'link' => '', | |
'description' => '', | |
'image' => '', | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function preDelete(EntityStorageInterface $storage, array $entities) { | |
foreach ($entities as $entity) { | |
// Notify processors to delete stored items. | |
\Drupal::service('aggregator.items.importer')->delete($entity); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function postDelete(EntityStorageInterface $storage, array $entities) { | |
parent::postDelete($storage, $entities); | |
if (\Drupal::moduleHandler()->moduleExists('block')) { | |
// Make sure there are no active blocks for these feeds. | |
$ids = \Drupal::entityQuery('block') | |
->condition('plugin', 'aggregator_feed_block') | |
->condition('settings.feed', array_keys($entities)) | |
->execute(); | |
if ($ids) { | |
$block_storage = \Drupal::entityManager()->getStorage('block'); | |
$block_storage->delete($block_storage->loadMultiple($ids)); | |
} | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { | |
$fields['fid'] = BaseFieldDefinition::create('integer') | |
->setLabel(t('Feed ID')) | |
->setDescription(t('The ID of the aggregator feed.')) | |
->setReadOnly(TRUE) | |
->setSetting('unsigned', TRUE); | |
$fields['uuid'] = BaseFieldDefinition::create('uuid') | |
->setLabel(t('UUID')) | |
->setDescription(t('The aggregator feed UUID.')) | |
->setReadOnly(TRUE); | |
$fields['title'] = BaseFieldDefinition::create('string') | |
->setLabel(t('Title')) | |
->setDescription(t('The name of the feed (or the name of the website providing the feed).')) | |
->setRequired(TRUE) | |
->setSetting('max_length', 255) | |
->setDisplayOptions('form', array( | |
'type' => 'string_textfield', | |
'weight' => -5, | |
)) | |
->setDisplayConfigurable('form', TRUE) | |
->addConstraint('FeedTitle'); | |
$fields['langcode'] = BaseFieldDefinition::create('language') | |
->setLabel(t('Language code')) | |
->setDescription(t('The feed language code.')) | |
->setDisplayOptions('view', array( | |
'type' => 'hidden', | |
)) | |
->setDisplayOptions('form', array( | |
'type' => 'language_select', | |
'weight' => 2, | |
)); | |
$fields['url'] = BaseFieldDefinition::create('uri') | |
->setLabel(t('URL')) | |
->setDescription(t('The fully-qualified URL of the feed.')) | |
->setRequired(TRUE) | |
->setDisplayOptions('form', array( | |
'type' => 'uri', | |
'weight' => -3, | |
)) | |
->setDisplayConfigurable('form', TRUE) | |
->addConstraint('FeedUrl'); | |
$intervals = array(900, 1800, 3600, 7200, 10800, 21600, 32400, 43200, 64800, 86400, 172800, 259200, 604800, 1209600, 2419200); | |
$period = array_map(array(\Drupal::service('date.formatter'), 'formatInterval'), array_combine($intervals, $intervals)); | |
$period[AGGREGATOR_CLEAR_NEVER] = t('Never'); | |
$fields['refresh'] = BaseFieldDefinition::create('list_integer') | |
->setLabel(t('Update interval')) | |
->setDescription(t('The length of time between feed updates. Requires a correctly configured cron maintenance task.')) | |
->setSetting('unsigned', TRUE) | |
->setRequired(TRUE) | |
->setSetting('allowed_values', $period) | |
->setDisplayOptions('form', array( | |
'type' => 'options_select', | |
'weight' => -2, | |
)) | |
->setDisplayConfigurable('form', TRUE); | |
$fields['checked'] = BaseFieldDefinition::create('timestamp') | |
->setLabel(t('Checked')) | |
->setDescription(t('Last time feed was checked for new items, as Unix timestamp.')) | |
->setDefaultValue(0) | |
->setDisplayOptions('view', array( | |
'label' => 'inline', | |
'type' => 'timestamp_ago', | |
'weight' => 1, | |
)) | |
->setDisplayConfigurable('view', TRUE); | |
$fields['queued'] = BaseFieldDefinition::create('timestamp') | |
->setLabel(t('Queued')) | |
->setDescription(t('Time when this feed was queued for refresh, 0 if not queued.')) | |
->setDefaultValue(0); | |
$fields['link'] = BaseFieldDefinition::create('uri') | |
->setLabel(t('URL')) | |
->setDescription(t('The link of the feed.')) | |
->setDisplayOptions('view', array( | |
'label' => 'inline', | |
'weight' => 4, | |
)) | |
->setDisplayConfigurable('view', TRUE); | |
$fields['description'] = BaseFieldDefinition::create('string_long') | |
->setLabel(t('Description')) | |
->setDescription(t("The parent website's description that comes from the @description element in the feed.", array('@description' => '<description>'))); | |
$fields['image'] = BaseFieldDefinition::create('uri') | |
->setLabel(t('Image')) | |
->setDescription(t('An image representing the feed.')); | |
$fields['hash'] = BaseFieldDefinition::create('string') | |
->setLabel(t('Hash')) | |
->setSetting('is_ascii', TRUE) | |
->setDescription(t('Calculated hash of the feed data, used for validating cache.')); | |
$fields['etag'] = BaseFieldDefinition::create('string') | |
->setLabel(t('Etag')) | |
->setDescription(t('Entity tag HTTP response header, used for validating cache.')); | |
// This is updated by the fetcher and not when the feed is saved, therefore | |
// it's a timestamp and not a changed field. | |
$fields['modified'] = BaseFieldDefinition::create('timestamp') | |
->setLabel(t('Modified')) | |
->setDescription(t('When the feed was last modified, as a Unix timestamp.')); | |
return $fields; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getUrl() { | |
return $this->get('url')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getRefreshRate() { | |
return $this->get('refresh')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getLastCheckedTime() { | |
return $this->get('checked')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getQueuedTime() { | |
return $this->get('queued')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getWebsiteUrl() { | |
return $this->get('link')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getDescription() { | |
return $this->get('description')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getImage() { | |
return $this->get('image')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getHash() { | |
return $this->get('hash')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getEtag() { | |
return $this->get('etag')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getLastModified() { | |
return $this->get('modified')->value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setTitle($title) { | |
$this->set('title', $title); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setUrl($url) { | |
$this->set('url', $url); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setRefreshRate($refresh) { | |
$this->set('refresh', $refresh); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setLastCheckedTime($checked) { | |
$this->set('checked', $checked); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setQueuedTime($queued) { | |
$this->set('queued', $queued); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setWebsiteUrl($link) { | |
$this->set('link', $link); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setDescription($description) { | |
$this->set('description', $description); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setImage($image) { | |
$this->set('image', $image); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setHash($hash) { | |
$this->set('hash', $hash); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setEtag($etag) { | |
$this->set('etag', $etag); | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setLastModified($modified) { | |
$this->set('modified', $modified); | |
return $this; | |
} | |
} |