Index: simplefeed.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/simplefeed/simplefeed.module,v retrieving revision 1.44.2.11 diff -u -p -r1.44.2.11 simplefeed.module --- simplefeed.module 13 Aug 2008 22:28:17 -0000 1.44.2.11 +++ simplefeed.module 25 Sep 2008 22:42:35 -0000 @@ -190,6 +190,26 @@ function simplefeed_validate($node) { if ($duplicate != '' && $duplicate != $node->nid) { form_set_error('url', t('The URL entered already exists. Please try a different URL.')); } + + if (variable_get('simplefeed_check_url', TRUE)) { + include_once './'. drupal_get_path('module', 'simplefeed') .'/simplepie.inc'; + + // init simplepie and have it see if it can find a feed + $feed = new SimplePie(); + $feed->enable_cache(FALSE); + $feed->set_timeout(15); + + // prevent SimplePie from using all of it's data santization since we use Drupal's input formats to handle this + $feed->set_stupidly_fast(TRUE); + $feed->set_feed_url($node->url); + + header("If-Modified-Since:" . 1); + $success = $feed->init(); + + if (!$success) { + form_set_error('url', t('The URL entered doesn\'t have a feed')); + } + } } else { form_set_error('url', t('The URL entered is not valid. It should be in the format of: %url_format', array('%url_format' => 'http://www.example.com/rss.xml'))); @@ -420,6 +440,17 @@ function simplefeed_admin_settings() { '#options' => $throttle, '#default_value' => variable_get('simplefeed_cron_throttle', 50), ); + + $form['simplefeed_check_url'] = array( + '#type' => 'select', + '#title' => t('Verify feed before adding to database'), + '#description' => t('This setting determines whether or not Simplefeed checks if the feed is valid. This does slow done the site when submitting a feed node'), + '#options' => array( + FALSE => t('No. Do not verify feed existance when saving a feed node'), + TRUE => t('Yes. Verify feed existance when saving a feed node'), + ), + '#default_value' => variable_get('simplefeed_check_url', TRUE), + ); return system_settings_form($form); } @@ -471,7 +492,7 @@ function simplefeed_feed_refresh($nid = $limit = variable_get('simplefeed_cron_throttle', 50); // limit in ASC order so we grab the top N that haven't been checked recently // we can only update feed nodes that have a valid refresh time set; ignore "never" and "manual" options - $query = 'SELECT n.nid FROM {node} n INNER JOIN {simplefeed_feed} s ON n.vid = s.vid WHERE ((%d - s.checked) >= s.refresh) AND n.status = 1 AND s.refresh > 1 ORDER BY s.checked ASC'; + $query = 'SELECT n.nid FROM {node} n INNER JOIN {simplefeed_feed} s ON n.vid = s.vid WHERE ((%d - s.checked) >= s.refresh) AND n.status = 1 AND s.refresh > 1 AND s.error = 0 ORDER BY s.checked ASC'; if ($limit != 'unlimited') { $process_feeds = db_query_range($query, time(), 0, $limit); } @@ -510,6 +531,8 @@ function simplefeed_feed_process($nid) { // prevent SimplePie from using all of it's data santization since we use Drupal's input formats to handle this $feed->set_stupidly_fast(TRUE); $feed->set_feed_url($process_feed->url); + + header("If-Modified-Since:" . $process_feed->checked); $success = $feed->init(); if ($success && $feed->data) { @@ -535,6 +558,7 @@ function simplefeed_feed_process($nid) { } else if (isset($feed->error)) { watchdog('simplefeed', t('The feed %feed could not be processed due to the following error: %error', array('%feed' => $process_feed->title, '%error' => $feed->error)), WATCHDOG_ERROR, l('view', 'node/'. $process_feed->nid)); + db_query("UPDATE {simplefeed_feed} SET error = 1 WHERE vid = %d", $process_feed->vid); } }