diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module index f7a908a..416571d 100644 --- a/core/modules/aggregator/aggregator.module +++ b/core/modules/aggregator/aggregator.module @@ -145,13 +145,6 @@ function aggregator_menu() { 'title' => 'Categories', 'route_name' => 'aggregator_categories', ); - $items['aggregator/rss'] = array( - 'title' => 'RSS feed', - 'page callback' => 'aggregator_page_rss', - 'access arguments' => array('access news feeds'), - 'type' => MENU_CALLBACK, - 'file' => 'aggregator.pages.inc', - ); $items['aggregator/opml'] = array( 'title' => 'OPML feed', 'page callback' => 'aggregator_page_opml', diff --git a/core/modules/aggregator/aggregator.pages.inc b/core/modules/aggregator/aggregator.pages.inc index c524505..ca8ecad 100644 --- a/core/modules/aggregator/aggregator.pages.inc +++ b/core/modules/aggregator/aggregator.pages.inc @@ -319,85 +319,6 @@ function template_preprocess_aggregator_item(&$variables) { } /** - * Page callback: Generates an RSS 0.92 feed of aggregator items or categories. - * - * @return string - * An HTML formatted string. - * - * @see aggregator_menu() - */ -function aggregator_page_rss() { - $result = NULL; - $rss_config = config('system.rss'); - // arg(2) is the passed cid, only select for that category. - if (arg(2)) { - $category = db_query('SELECT cid, title FROM {aggregator_category} WHERE cid = :cid', array(':cid' => arg(2)))->fetchObject(); - $result = db_query_range('SELECT i.*, f.title AS ftitle, f.link AS flink FROM {aggregator_category_item} c LEFT JOIN {aggregator_item} i ON c.iid = i.iid LEFT JOIN {aggregator_feed} f ON i.fid = f.fid WHERE cid = :cid ORDER BY timestamp DESC, i.iid DESC', 0, $rss_config->get('items.limit'), array(':cid' => $category->cid)); - } - // Or, get the default aggregator items. - else { - $category = NULL; - $result = db_query_range('SELECT i.*, f.title AS ftitle, f.link AS flink FROM {aggregator_item} i INNER JOIN {aggregator_feed} f ON i.fid = f.fid ORDER BY i.timestamp DESC, i.iid DESC', 0, $rss_config->get('items.limit')); - } - - $feeds = $result->fetchAll(); - $aggregator_page_rss = array( - '#theme' => 'aggregator_page_rss', - '#feeds' => $feeds, - '#category' => $category, - ); - return drupal_render($aggregator_page_rss); -} - -/** - * Prints the RSS page for a feed. - * - * @param $variables - * An associative array containing: - * - feeds: An array of the feeds to theme. - * - category: A common category, if any, for all the feeds. - * - * @return void - * - * @ingroup themeable - */ -function theme_aggregator_page_rss($variables) { - $feeds = $variables['feeds']; - $category = $variables['category']; - - drupal_add_http_header('Content-Type', 'application/rss+xml; charset=utf-8'); - - $items = ''; - $feed_length = config('system.rss')->get('items.view_mode'); - foreach ($feeds as $feed) { - switch ($feed_length) { - case 'teaser': - $summary = text_summary($feed->description, NULL, config('aggregator.settings')->get('items.teaser_length')); - if ($summary != $feed->description) { - $summary .= '

' . t('read more') . "

\n"; - } - $feed->description = $summary; - break; - case 'title': - $feed->description = ''; - break; - } - $items .= format_rss_item($feed->ftitle . ': ' . $feed->title, $feed->link, $feed->description, array('pubDate' => date('r', $feed->timestamp))); - } - - $site_name = config('system.site')->get('name'); - $url = url((isset($category) ? 'aggregator/categories/' . $category->cid : 'aggregator'), array('absolute' => TRUE)); - $description = isset($category) ? t('@site_name - aggregated feeds in category @title', array('@site_name' => $site_name, '@title' => $category->title)) : t('@site_name - aggregated feeds', array('@site_name' => $site_name)); - - $output = "\n"; - $output .= "\n"; - $output .= format_rss_channel(t('@site_name aggregator', array('@site_name' => $site_name)), $url, $description, $items); - $output .= "\n"; - - print $output; -} - -/** * Page callback: Generates an OPML representation of all feeds. * * @param $cid diff --git a/core/modules/aggregator/config/views.view.aggregator_rss_feed.yml b/core/modules/aggregator/config/views.view.aggregator_rss_feed.yml new file mode 100644 index 0000000..8c1a5af --- /dev/null +++ b/core/modules/aggregator/config/views.view.aggregator_rss_feed.yml @@ -0,0 +1,191 @@ +base_field: iid +base_table: aggregator_item +core: 8.x +description: '' +status: '1' +display: + default: + display_plugin: default + id: default + display_title: Master + position: '1' + display_options: + access: + type: none + options: { } + cache: + type: none + options: { } + query: + type: views_query + options: + disable_sql_rewrite: '0' + distinct: '0' + slave: '0' + query_comment: '' + query_tags: { } + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: '0' + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: '1' + sort_asc_label: Asc + sort_desc_label: Desc + pager: + type: full + options: + items_per_page: '10' + offset: '0' + id: '0' + total_pages: '' + expose: + items_per_page: '0' + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 20, 40, 60' + items_per_page_options_all: '0' + items_per_page_options_all_label: '- All -' + offset: '0' + offset_label: Offset + tags: + previous: '‹ previous' + next: 'next ›' + first: '« first' + last: 'last »' + quantity: '9' + style: + type: default + row: + type: 'entity:aggregator_item' + fields: + iid: + table: aggregator_item + field: iid + id: iid + relationship: none + group_type: group + admin_label: '' + label: 'Item ID' + exclude: '0' + alter: + alter_text: '0' + text: '' + make_link: '0' + path: '' + absolute: '0' + external: '0' + replace_spaces: '0' + path_case: none + trim_whitespace: '0' + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: '0' + max_length: '' + word_boundary: '1' + ellipsis: '1' + more_link: '0' + more_link_text: '' + more_link_path: '' + strip_tags: '0' + trim: '0' + preserve_tags: '' + html: '0' + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: '1' + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: '1' + empty: '' + hide_empty: '0' + empty_zero: '0' + hide_alter_empty: '1' + set_precision: '0' + precision: '0' + decimal: . + separator: ',' + format_plural: '0' + format_plural_singular: '1' + format_plural_plural: '@count' + prefix: '' + suffix: '' + filters: { } + sorts: { } + title: 'Aggregator RSS feed' + header: { } + footer: { } + empty: { } + relationships: { } + arguments: { } + feed_2: + display_plugin: feed + id: feed_2 + display_title: 'Feed per category' + position: '2' + display_options: + path: aggregator/rss/% + display_description: '' + arguments: + cid: + id: cid + table: aggregator_category + field: cid + relationship: none + group_type: group + admin_label: '' + default_action: 'not found' + exception: + value: all + title_enable: '0' + title: All + title_enable: '0' + title: '' + breadcrumb_enable: '0' + breadcrumb: '' + default_argument_type: fixed + default_argument_options: + argument: '' + default_argument_skip_url: '0' + summary_options: + base_path: '' + count: '1' + items_per_page: '25' + override: '0' + summary: + sort_order: asc + number_of_records: '0' + format: default_summary + specify_validation: '0' + validate: + type: none + fail: 'not found' + validate_options: { } + break_phrase: '0' + not: '0' + plugin_id: aggregator_category_cid + defaults: + arguments: '0' + feed_1: + display_plugin: feed + id: feed_1 + display_title: Feed + position: '2' + display_options: + path: aggregator/rss + display_description: '' + defaults: + arguments: '1' +label: 'Aggregator RSS feed' +module: views +id: aggregator_rss_feed +tag: aggregator +uuid: 7dfa5cb7-2248-4d52-8c00-cd8e02d1e78e +langcode: en