diff --git a/core/modules/aggregator/aggregator.pages.inc b/core/modules/aggregator/aggregator.pages.inc index b1d8081..2a1e2e3 100644 --- a/core/modules/aggregator/aggregator.pages.inc +++ b/core/modules/aggregator/aggregator.pages.inc @@ -112,7 +112,17 @@ function aggregator_page_category_form($form, $form_state, $category) { * An array of the feed items. */ function aggregator_load_feed_items($type, $data = NULL, $limit = 20) { - Drupal::entityManager()->getStorageController('aggregator_item')->loadFeedItems($type, $data, $limit); + $storage_controller = Drupal::entityManager()->getStorageController('aggregator_item'); + switch ($type) { + case 'sum': + return $storage_controller->loadFeedItems($limit); + + case 'source': + return $storage_controller->loadFeedItemsBySource($data->id(), $limit); + + case 'category': + return $storage_controller->loadFeedItemsByCategory($data->cid, $limit); + } } /** diff --git a/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php b/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php index 634498f..cd264b6 100644 --- a/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php +++ b/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php @@ -7,9 +7,10 @@ namespace Drupal\aggregator; -use Drupal\Core\Entity\DatabaseStorageControllerNG; use Drupal\aggregator\Plugin\Core\Entity\Item; -use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Database\Query\PagerSelectExtender; +use Drupal\Core\Database\Query\SelectInterface; +use Drupal\Core\Entity\DatabaseStorageControllerNG; /** * Controller class for aggregators items. @@ -116,31 +117,49 @@ public function saveCategories(Item $item) { /** * {@inheritdoc} */ - public function loadFeedItems($type, $data = NULL, $limit = 20) { - switch ($type) { - case 'sum': - $query = $this->database->select('aggregator_item', 'i'); - $query->join('aggregator_feed', 'f', 'i.fid = f.fid'); - $query->fields('i', array('iid')); - break; + public function loadFeedItems($limit = 20) { + $query = $this->database->select('aggregator_item', 'i'); + $query->join('aggregator_feed', 'f', 'i.fid = f.fid'); + $query->fields('i', array('iid')); + return $this->executeFeedItemQuery($query, $limit); + } - case 'source': - $query = $this->database->select('aggregator_item', 'i'); - $query - ->fields('i', array('iid')) - ->condition('i.fid', $data->id()); - break; + /** + * {@inheritdoc} + */ + public function loadFeedItemsBySource($fid, $limit = 20) { + $query = $this->database->select('aggregator_item', 'i'); + $query + ->fields('i', array('iid')) + ->condition('i.fid', $fid); + return $this->executeFeedItemQuery($query, $limit); + } - case 'category': - $query = $this->database->select('aggregator_category_item', 'c'); - $query->leftJoin('aggregator_item', 'i', 'c.iid = i.iid'); - $query->leftJoin('aggregator_feed', 'f', 'i.fid = f.fid'); - $query - ->fields('i', array('iid')) - ->condition('cid', $data->cid); - break; - } + /** + * {@inheritdoc} + */ + public function loadFeedItemsByCategory($cid, $limit = 20) { + $query = $this->database->select('aggregator_category_item', 'c'); + $query->leftJoin('aggregator_item', 'i', 'c.iid = i.iid'); + $query->leftJoin('aggregator_feed', 'f', 'i.fid = f.fid'); + $query + ->fields('i', array('iid')) + ->condition('cid', $cid); + return $this->executeFeedItemQuery($query, $limit); + } + /** + * Helper method to execute an item query. + * + * @param SelectInterface $query + * The query to execute. + * @param int $limit + * (optional) The number of items to return. Defaults to 20. + * + * @return \Drupal\aggregator\ItemInterface[] + * An array of the feed items. + */ + protected function executeFeedItemQuery(SelectInterface $query, $limit) { $result = $query ->extend('Drupal\Core\Database\Query\PagerSelectExtender') ->limit($limit) @@ -150,4 +169,5 @@ public function loadFeedItems($type, $data = NULL, $limit = 20) { return $this->loadMultiple($result->fetchCol()); } + } diff --git a/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageControllerInterface.php b/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageControllerInterface.php index bfb689a..f9fa154 100644 --- a/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageControllerInterface.php +++ b/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageControllerInterface.php @@ -43,28 +43,40 @@ public function deleteCategories(array $entities); public function saveCategories(Item $item); /** - * Loads and optionally filters feed items. + * Loads feed items from all feeds. * - * @param string $type - * The type of filter for the items. Possible values are: - * - sum: No filtering. - * - source: Filter the feed items, limiting the result to items from a - * single source. - * - category: Filter the feed items by category. - * @param mixed $data - * Feed or category data used for filtering. The type and value of $data - * depends on $type: - * - source: $data is an object with $data->fid identifying the feed used to - * as filter. - * - category: $data is an array with $data['cid'] being the category id to - * filter on. - * The $data parameter is not used when $type is 'sum'. * @param int $limit - * (optional) The number of records to return. Defaults to 20. + * (optional) The number of items to return. Defaults to 20. * * @return \Drupal\aggregator\ItemInterface[] * An array of the feed items. */ - public function loadFeedItems($type, $data = NULL, $limit = 20); + public function loadFeedItems($limit = 20); + + /** + * Loads feed items filtered by a feed. + * + * @param int $fid + * The feed ID to filter by. + * @param int $limit + * (optional) The number of items to return. Defaults to 20. + * + * @return \Drupal\aggregator\ItemInterface[] + * An array of the feed items. + */ + public function loadFeedItemsBySource($fid, $limit = 20); + + /** + * Loads feed items from all feeds. + * + * @param int $cid + * The category ID to filter by. + * @param int $limit + * (optional) The number of items to return. Defaults to 20. + * + * @return \Drupal\aggregator\ItemInterface[] + * An array of the feed items. + */ + public function loadFeedItemsByCategory($cid, $limit = 20); }