annotate core/modules/aggregator/src/Entity/Item.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\aggregator\Entity;
Chris@0 4
Chris@0 5 use Drupal\Core\Cache\Cache;
Chris@0 6 use Drupal\Core\Entity\ContentEntityBase;
Chris@0 7 use Drupal\Core\Entity\EntityStorageInterface;
Chris@0 8 use Drupal\aggregator\ItemInterface;
Chris@0 9 use Drupal\Core\Entity\EntityTypeInterface;
Chris@0 10 use Drupal\Core\Field\BaseFieldDefinition;
Chris@0 11 use Drupal\Core\Url;
Chris@0 12
Chris@0 13 /**
Chris@0 14 * Defines the aggregator item entity class.
Chris@0 15 *
Chris@0 16 * @ContentEntityType(
Chris@0 17 * id = "aggregator_item",
Chris@0 18 * label = @Translation("Aggregator feed item"),
Chris@17 19 * label_collection = @Translation("Aggregator feed items"),
Chris@17 20 * label_singular = @Translation("aggregator feed item"),
Chris@17 21 * label_plural = @Translation("aggregator feed items"),
Chris@17 22 * label_count = @PluralTranslation(
Chris@17 23 * singular = "@count aggregator feed item",
Chris@17 24 * plural = "@count aggregator feed items",
Chris@17 25 * ),
Chris@0 26 * handlers = {
Chris@0 27 * "storage" = "Drupal\aggregator\ItemStorage",
Chris@0 28 * "storage_schema" = "Drupal\aggregator\ItemStorageSchema",
Chris@0 29 * "view_builder" = "Drupal\aggregator\ItemViewBuilder",
Chris@0 30 * "access" = "Drupal\aggregator\FeedAccessControlHandler",
Chris@0 31 * "views_data" = "Drupal\aggregator\AggregatorItemViewsData"
Chris@0 32 * },
Chris@0 33 * uri_callback = "Drupal\aggregator\Entity\Item::buildUri",
Chris@0 34 * base_table = "aggregator_item",
Chris@0 35 * render_cache = FALSE,
Chris@0 36 * list_cache_tags = { "aggregator_feed_list" },
Chris@0 37 * entity_keys = {
Chris@0 38 * "id" = "iid",
Chris@0 39 * "label" = "title",
Chris@0 40 * "langcode" = "langcode",
Chris@0 41 * }
Chris@0 42 * )
Chris@0 43 */
Chris@0 44 class Item extends ContentEntityBase implements ItemInterface {
Chris@0 45
Chris@0 46 /**
Chris@0 47 * {@inheritdoc}
Chris@0 48 */
Chris@0 49 public function label() {
Chris@0 50 return $this->get('title')->value;
Chris@0 51 }
Chris@0 52
Chris@0 53 /**
Chris@0 54 * {@inheritdoc}
Chris@0 55 */
Chris@0 56 public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
Chris@0 57 /** @var \Drupal\Core\Field\BaseFieldDefinition[] $fields */
Chris@0 58 $fields = parent::baseFieldDefinitions($entity_type);
Chris@0 59
Chris@0 60 $fields['iid']->setLabel(t('Aggregator item ID'))
Chris@0 61 ->setDescription(t('The ID of the feed item.'));
Chris@0 62
Chris@0 63 $fields['langcode']->setLabel(t('Language code'))
Chris@0 64 ->setDescription(t('The feed item language code.'));
Chris@0 65
Chris@0 66 $fields['fid'] = BaseFieldDefinition::create('entity_reference')
Chris@0 67 ->setLabel(t('Source feed'))
Chris@0 68 ->setRequired(TRUE)
Chris@0 69 ->setDescription(t('The aggregator feed entity associated with this item.'))
Chris@0 70 ->setSetting('target_type', 'aggregator_feed')
Chris@0 71 ->setDisplayOptions('view', [
Chris@0 72 'label' => 'hidden',
Chris@0 73 'type' => 'entity_reference_label',
Chris@0 74 'weight' => 0,
Chris@0 75 ])
Chris@0 76 ->setDisplayConfigurable('form', TRUE);
Chris@0 77
Chris@0 78 $fields['title'] = BaseFieldDefinition::create('string')
Chris@0 79 ->setLabel(t('Title'))
Chris@0 80 ->setDescription(t('The title of the feed item.'));
Chris@0 81
Chris@0 82 $fields['link'] = BaseFieldDefinition::create('uri')
Chris@0 83 ->setLabel(t('Link'))
Chris@0 84 ->setDescription(t('The link of the feed item.'))
Chris@0 85 ->setDisplayOptions('view', [
Chris@0 86 'region' => 'hidden',
Chris@0 87 ])
Chris@0 88 ->setDisplayConfigurable('view', TRUE);
Chris@0 89
Chris@0 90 $fields['author'] = BaseFieldDefinition::create('string')
Chris@0 91 ->setLabel(t('Author'))
Chris@0 92 ->setDescription(t('The author of the feed item.'))
Chris@0 93 ->setDisplayOptions('view', [
Chris@0 94 'label' => 'hidden',
Chris@0 95 'weight' => 3,
Chris@0 96 ])
Chris@0 97 ->setDisplayConfigurable('view', TRUE);
Chris@0 98
Chris@0 99 $fields['description'] = BaseFieldDefinition::create('string_long')
Chris@0 100 ->setLabel(t('Description'))
Chris@0 101 ->setDescription(t('The body of the feed item.'));
Chris@0 102
Chris@0 103 $fields['timestamp'] = BaseFieldDefinition::create('created')
Chris@0 104 ->setLabel(t('Posted on'))
Chris@0 105 ->setDescription(t('Posted date of the feed item, as a Unix timestamp.'))
Chris@0 106 ->setDisplayOptions('view', [
Chris@0 107 'label' => 'hidden',
Chris@0 108 'type' => 'timestamp_ago',
Chris@0 109 'weight' => 1,
Chris@0 110 ])
Chris@0 111 ->setDisplayConfigurable('view', TRUE);
Chris@0 112
Chris@0 113 // @todo Convert to a real UUID field in
Chris@0 114 // https://www.drupal.org/node/2149851.
Chris@0 115 $fields['guid'] = BaseFieldDefinition::create('string_long')
Chris@0 116 ->setLabel(t('GUID'))
Chris@0 117 ->setDescription(t('Unique identifier for the feed item.'));
Chris@0 118
Chris@0 119 return $fields;
Chris@0 120 }
Chris@0 121
Chris@0 122 /**
Chris@0 123 * {@inheritdoc}
Chris@0 124 */
Chris@0 125 public function getFeedId() {
Chris@0 126 return $this->get('fid')->target_id;
Chris@0 127 }
Chris@0 128
Chris@0 129 /**
Chris@0 130 * {@inheritdoc}
Chris@0 131 */
Chris@0 132 public function setFeedId($fid) {
Chris@0 133 return $this->set('fid', $fid);
Chris@0 134 }
Chris@0 135
Chris@0 136 /**
Chris@0 137 * {@inheritdoc}
Chris@0 138 */
Chris@0 139 public function getTitle() {
Chris@0 140 return $this->get('title')->value;
Chris@0 141 }
Chris@0 142
Chris@0 143 /**
Chris@0 144 * {@inheritdoc}
Chris@0 145 */
Chris@0 146 public function setTitle($title) {
Chris@0 147 return $this->set('title', $title);
Chris@0 148 }
Chris@0 149
Chris@0 150 /**
Chris@0 151 * {@inheritdoc}
Chris@0 152 */
Chris@0 153 public function getLink() {
Chris@0 154 return $this->get('link')->value;
Chris@0 155 }
Chris@0 156
Chris@0 157 /**
Chris@0 158 * {@inheritdoc}
Chris@0 159 */
Chris@0 160 public function setLink($link) {
Chris@0 161 return $this->set('link', $link);
Chris@0 162 }
Chris@0 163
Chris@0 164 /**
Chris@0 165 * {@inheritdoc}
Chris@0 166 */
Chris@0 167 public function getAuthor() {
Chris@0 168 return $this->get('author')->value;
Chris@0 169 }
Chris@0 170
Chris@0 171 /**
Chris@0 172 * {@inheritdoc}
Chris@0 173 */
Chris@0 174 public function setAuthor($author) {
Chris@0 175 return $this->set('author', $author);
Chris@0 176 }
Chris@0 177
Chris@0 178 /**
Chris@0 179 * {@inheritdoc}
Chris@0 180 */
Chris@0 181 public function getDescription() {
Chris@0 182 return $this->get('description')->value;
Chris@0 183 }
Chris@0 184
Chris@0 185 /**
Chris@0 186 * {@inheritdoc}
Chris@0 187 */
Chris@0 188 public function setDescription($description) {
Chris@0 189 return $this->set('description', $description);
Chris@0 190 }
Chris@0 191
Chris@0 192 /**
Chris@0 193 * {@inheritdoc}
Chris@0 194 */
Chris@0 195 public function getPostedTime() {
Chris@0 196 return $this->get('timestamp')->value;
Chris@0 197 }
Chris@0 198
Chris@0 199 /**
Chris@0 200 * {@inheritdoc}
Chris@0 201 */
Chris@0 202 public function setPostedTime($timestamp) {
Chris@0 203 return $this->set('timestamp', $timestamp);
Chris@0 204 }
Chris@0 205
Chris@0 206 /**
Chris@0 207 * {@inheritdoc}
Chris@0 208 */
Chris@0 209 public function getGuid() {
Chris@0 210 return $this->get('guid')->value;
Chris@0 211 }
Chris@0 212
Chris@0 213 /**
Chris@0 214 * {@inheritdoc}
Chris@0 215 */
Chris@0 216 public function setGuid($guid) {
Chris@0 217 return $this->set('guid', $guid);
Chris@0 218 }
Chris@0 219
Chris@0 220 /**
Chris@0 221 * {@inheritdoc}
Chris@0 222 */
Chris@0 223 public function postSave(EntityStorageInterface $storage, $update = TRUE) {
Chris@0 224 parent::postSave($storage, $update);
Chris@0 225
Chris@0 226 // Entity::postSave() calls Entity::invalidateTagsOnSave(), which only
Chris@0 227 // handles the regular cases. The Item entity has one special case: a newly
Chris@0 228 // created Item is *also* associated with a Feed, so we must invalidate the
Chris@0 229 // associated Feed's cache tag.
Chris@0 230 if (!$update) {
Chris@0 231 Cache::invalidateTags($this->getCacheTagsToInvalidate());
Chris@0 232 }
Chris@0 233 }
Chris@0 234
Chris@0 235 /**
Chris@0 236 * {@inheritdoc}
Chris@0 237 */
Chris@0 238 public function getCacheTagsToInvalidate() {
Chris@0 239 return Feed::load($this->getFeedId())->getCacheTags();
Chris@0 240 }
Chris@0 241
Chris@0 242 /**
Chris@0 243 * Entity URI callback.
Chris@0 244 */
Chris@0 245 public static function buildUri(ItemInterface $item) {
Chris@0 246 return Url::fromUri($item->getLink());
Chris@0 247 }
Chris@0 248
Chris@0 249 }