From 6303ecb8c813f8e52efeeafd943b8b23679140d9 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 22 Dec 2008 19:38:31 +0000 Subject: - Patch #303930 by Aron Novak, alex_b, et al: introduced pluggable architecture for aggregator --- modules/aggregator/aggregator.admin.inc | 145 +++++--- modules/aggregator/aggregator.api.php | 214 ++++++++++++ modules/aggregator/aggregator.fetcher.inc | 80 +++++ modules/aggregator/aggregator.info | 3 + modules/aggregator/aggregator.install | 3 + modules/aggregator/aggregator.module | 504 ++++------------------------ modules/aggregator/aggregator.pages.inc | 3 +- modules/aggregator/aggregator.parser.inc | 327 ++++++++++++++++++ modules/aggregator/aggregator.processor.inc | 177 ++++++++++ 9 files changed, 979 insertions(+), 477 deletions(-) create mode 100644 modules/aggregator/aggregator.api.php create mode 100644 modules/aggregator/aggregator.fetcher.inc create mode 100644 modules/aggregator/aggregator.parser.inc create mode 100644 modules/aggregator/aggregator.processor.inc (limited to 'modules') diff --git a/modules/aggregator/aggregator.admin.inc b/modules/aggregator/aggregator.admin.inc index 63934ce4d..9ba5285e4 100644 --- a/modules/aggregator/aggregator.admin.inc +++ b/modules/aggregator/aggregator.admin.inc @@ -52,36 +52,36 @@ function aggregator_view() { * @see aggregator_form_feed_validate() * @see aggregator_form_feed_submit() */ -function aggregator_form_feed(&$form_state, $edit = array('refresh' => 900, 'block' => 5, 'title' => '', 'url' => '', 'fid' => NULL)) { +function aggregator_form_feed(&$form_state, $feed = NULL) { $period = drupal_map_assoc(array(900, 1800, 3600, 7200, 10800, 21600, 32400, 43200, 64800, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval'); - if ($edit['refresh'] == '') { - $edit['refresh'] = 3600; + if (empty($feed->refresh)) { + $feed->refresh = 3600; } $form['title'] = array('#type' => 'textfield', '#title' => t('Title'), - '#default_value' => $edit['title'], + '#default_value' => isset($feed->title) ? $feed->title : '', '#maxlength' => 255, '#description' => t('The name of the feed (or the name of the website providing the feed).'), '#required' => TRUE, ); $form['url'] = array('#type' => 'textfield', '#title' => t('URL'), - '#default_value' => $edit['url'], + '#default_value' => isset($feed->url) ? $feed->url : '', '#maxlength' => 255, '#description' => t('The fully-qualified URL of the feed.'), '#required' => TRUE, ); $form['refresh'] = array('#type' => 'select', '#title' => t('Update interval'), - '#default_value' => $edit['refresh'], + '#default_value' => isset($feed->refresh) ? $feed->refresh : 900, '#options' => $period, '#description' => t('The length of time between feed updates. Requires a correctly configured cron maintenance task.', array('@cron' => url('admin/reports/status'))), ); $form['block'] = array('#type' => 'select', '#title' => t('News items in block'), - '#default_value' => $edit['block'], + '#default_value' => isset($feed->block) ? $feed->block : 5, '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)), '#description' => t("Drupal can make a block with the most recent news items of this feed. You can configure blocks to be displayed in the sidebar of your page. This setting lets you configure the number of news items to show in this feed's block. If you choose '0' this feed's block will be disabled.", array('@block-admin' => url('admin/build/block'))), ); @@ -89,11 +89,12 @@ function aggregator_form_feed(&$form_state, $edit = array('refresh' => 900, 'blo // Handling of categories. $options = array(); $values = array(); - $categories = db_query('SELECT c.cid, c.title, f.fid FROM {aggregator_category} c LEFT JOIN {aggregator_category_feed} f ON c.cid = f.cid AND f.fid = :fid ORDER BY title', array(':fid' => $edit['fid'])); + $categories = db_query('SELECT c.cid, c.title, f.fid FROM {aggregator_category} c LEFT JOIN {aggregator_category_feed} f ON c.cid = f.cid AND f.fid = :fid ORDER BY title', array(':fid' => isset($feed->fid) ? $feed->fid : NULL)); foreach ($categories as $category) { $options[$category->cid] = check_plain($category->title); if ($category->fid) $values[] = $category->cid; } + if ($options) { $form['category'] = array( '#type' => 'checkboxes', @@ -108,14 +109,14 @@ function aggregator_form_feed(&$form_state, $edit = array('refresh' => 900, 'blo '#value' => t('Save'), ); - if ($edit['fid']) { + if (!empty($feed->fid)) { $form['delete'] = array( '#type' => 'submit', '#value' => t('Delete'), ); $form['fid'] = array( '#type' => 'hidden', - '#value' => $edit['fid'], + '#value' => $feed->fid, ); } @@ -200,7 +201,7 @@ function aggregator_admin_remove_feed($form_state, $feed) { '#value' => $feed, ), ), - t('Are you sure you want to remove all items from the feed %feed?', array('%feed' => $feed['title'])), + t('Are you sure you want to remove all items from the feed %feed?', array('%feed' => $feed->title)), 'admin/content/aggregator', t('This action cannot be undone.'), t('Remove items'), @@ -375,7 +376,7 @@ function _aggregator_parse_opml($opml) { * Menu callback; refreshes a feed, then redirects to the overview page. * * @param $feed - * An associative array describing the feed to be refreshed. + * An object describing the feed to be refreshed. */ function aggregator_admin_refresh_feed($feed) { aggregator_refresh($feed); @@ -386,37 +387,105 @@ function aggregator_admin_refresh_feed($feed) { * Form builder; Configure the aggregator system. * * @ingroup forms - * @see system_settings_form() */ -function aggregator_admin_settings() { - $items = array(0 => t('none')) + drupal_map_assoc(array(3, 5, 10, 15, 20, 25), '_aggregator_items'); - $period = drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200, 4838400, 9676800), 'format_interval'); - - $form['aggregator_allowed_html_tags'] = array( - '#type' => 'textfield', '#title' => t('Allowed HTML tags'), '#size' => 80, '#maxlength' => 255, - '#default_value' => variable_get('aggregator_allowed_html_tags', '