Index: feedapi.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi.install,v
retrieving revision 1.5.2.21.2.12
diff -u -p -r1.5.2.21.2.12 feedapi.install
--- feedapi.install	3 Apr 2009 16:55:24 -0000	1.5.2.21.2.12
+++ feedapi.install	6 Apr 2009 08:35:46 -0000
@@ -27,16 +27,6 @@ function feedapi_schema() {
         'not null' => TRUE,
         'default' => 'XML feed',
         'length' => '50'),
-      'processors' => array(
-        'type' => 'varchar',
-        'not null' => TRUE,
-        'default' => '',
-        'length' => '255'),
-      'parsers' => array(
-        'type' => 'varchar',
-        'not null' => TRUE,
-        'default' => '',
-        'length' => '255'),
       'checked' => array(
         'type' => 'int',
         'default' => 0,
@@ -46,9 +36,6 @@ function feedapi_schema() {
         'length' => '32'),
       'link' => array(
         'type' => 'text'),
-      'settings' => array(
-        'type' => 'text',
-        'size' => 'big'),
       'half_done' => array(
         'type' => 'int',
         'size' => 'tiny'),
@@ -196,3 +183,14 @@ function feedapi_update_6105() {
   db_add_index($ret, 'feedapi', 'nid', array('nid'));
   return $ret;
 }
+
+/**
+ * Drops per-feed configuration.
+ */
+function feedapi_update_6106() {
+  $ret = array();
+  db_drop_field($ret, 'feedapi', 'processors');
+  db_drop_field($ret, 'feedapi', 'parsers');
+  db_drop_field($ret, 'feedapi', 'settings');
+  return $ret;
+}
Index: feedapi.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi.module,v
retrieving revision 1.23.2.119.2.53
diff -u -p -r1.23.2.119.2.53 feedapi.module
--- feedapi.module	6 Apr 2009 07:20:07 -0000	1.23.2.119.2.53
+++ feedapi.module	6 Apr 2009 08:35:47 -0000
@@ -151,11 +151,11 @@ function feedapi_nodeapi(&$node, $op, $t
           $node->feed = $feed;
           $node->feed->vid = $node->vid;
           $node->feed->nid = $node->nid;
-          $node->feed->settings = feedapi_get_settings($node->type, $node->vid);
+          $node->feed->node_type = $node->type;
+          $node->feed->settings = feedapi_get_settings($node->type);
           // Load parsers and processors from content type
-          $node_type_settings = feedapi_get_settings($node->type);
-          $node->feed->parsers = _feedapi_format_settings($node_type_settings, 'parsers');
-          $node->feed->processors = _feedapi_format_settings($node_type_settings, 'processors');
+          $node->feed->parsers = _feedapi_format_settings($node->feed->settings, 'parsers');
+          $node->feed->processors = _feedapi_format_settings($node->feed->settings, 'processors');
         }
         break;
       case 'delete':
@@ -327,7 +327,7 @@ function feedapi_purge_confirm_submit($f
  */
 function feedapi_expire($feed, $settings = NULL) {
   // Backwards compatibility, get settings if not passed
-  $settings = is_null($settings) ? feedapi_get_settings(NULL, $feed->nid) : $settings;
+  $settings = is_null($settings) ? feedapi_get_settings($feed->node_type) : $settings;
   // Each processor can have its own expiration criteria ?
   $expired = _feedapi_invoke('expire', $feed, $settings);
   // Return the number of expired items
@@ -519,56 +519,6 @@ function feedapi_form_alter(&$form, $for
         '#maxlength' => 2048,
       );
     }
-    // Show per-node-type feedapi, parser options only for users with permissions.
-    if (user_access('advanced feedapi options')) {
-      // retrieve forms.
-      $modules = module_implements('feedapi_settings_form');
-      foreach ($modules as $module) {
-        if ($feedapi_form = module_invoke($module, 'feedapi_settings_form', 'general')) {
-          $form['feedapi'] = array_merge_recursive($form['feedapi'], $feedapi_form);
-        }
-      }
-
-      $submodules_names = array(
-        'parsers' => t('Parsers'),
-        'processors' => t('Processors'),
-      );
-      foreach (array("parsers" => "feedapi_feed", "processors" => "feedapi_item") as $type => $requirement) {
-        $suitable_handlers = module_implements($requirement, TRUE);
-        foreach ($suitable_handlers as $module) {
-          if (isset($node_type_settings[$type][$module]) && $node_type_settings[$type][$module]['enabled']) {
-            $result = array();
-            $result = module_invoke($module, 'feedapi_settings_form', $type);
-            if (is_array($result)) {
-              $result['#weight'] = $node_type_settings[$type][$module]['weight'];
-              $form['feedapi'][$type][$module] = $result;
-              $form['feedapi'][$type][$module]['#type'] = 'fieldset';
-              $form['feedapi'][$type][$module]['#title'] = feedapi_get_natural_name($module);
-              $form['feedapi'][$type][$module]['#collapsible'] = TRUE;
-              $form['feedapi'][$type][$module]['#collapsed'] = FALSE;
-              $form['feedapi'][$type][$module]['#tree'] = TRUE;
-            }
-          }
-        }
-        if (isset($form['feedapi'][$type])) {
-          $form['feedapi'][$type]['#type'] = 'fieldset';
-          $form['feedapi'][$type]['#title'] = $submodules_names[$type];
-          $form['feedapi'][$type]['#collapsible'] = TRUE;
-          $form['feedapi'][$type]['#collapsed'] = TRUE;
-          $form['feedapi'][$type]['#tree'] = TRUE;
-        }
-      }
-    }
-    // If we are on a node form, get per node settings and populate form.
-    if (isset($form['#node']->nid)) {
-      $settings = feedapi_get_settings($form['type']['#value'], $form['#node']->vid);
-    }
-    elseif (isset($node_type_settings)) {
-      $settings = $node_type_settings;
-    }
-    if (isset($settings)) {
-      $form['feedapi'] = _feedapi_populate($form['feedapi'], $settings);
-    }
     $form['#validate'][] = 'feedapi_node_validate';
   }
 }
@@ -621,7 +571,7 @@ function feedapi_node_validate($form, &$
 function feedapi_content_type_submit($form, &$form_state) {
   // TODO: Drupal automatically stores mutilated 'feedapi_'. $form['#node_type']->type - remove.
   $type = !empty($form['#node_type']->type) ? $form['#node_type']->type : $form['#post']['type'];
-  _feedapi_store_settings(array('node_type' => $type), $form_state['values']['feedapi']);
+  _feedapi_store_settings($type, $form_state['values']['feedapi']);
 }
 
 /**
@@ -855,18 +805,14 @@ function feedapi_refresh($node, $destina
 function _feedapi_insert(&$node, $teaser, $page) {
   if (isset($node->feed->url) && isset($node->feed->feed_type)) {
     db_query("INSERT INTO {feedapi} (
-            nid, vid, url, link, feed_type, processors,
-            parsers, checked, settings) VALUES
-            (%d, %d, '%s', '%s', '%s', '%s', '%s', %d, '%s')",
+            nid, vid, url, link, feed_type, checked) VALUES
+            (%d, %d, '%s', '%s', '%s', %d)",
       $node->nid,
       $node->vid,
       $node->feed->url,
       isset($node->feed->options->link) ? $node->feed->options->link : '',
       $node->feed->feed_type,
-      serialize($node->feed->processors),
-      serialize($node->feed->parsers),
-      0,
-      serialize(array())
+      0
     );
     // Store add on module's settings if user has permission to do so.
     if (user_access('advanced feedapi options')) {
@@ -874,10 +820,9 @@ function _feedapi_insert(&$node, $teaser
       if (!isset($node->feedapi)) {
          $node->feedapi = (array) $node->feed->settings;
       }
-      _feedapi_store_settings(array('vid' => $node->vid), $node->feedapi);
     }
     // Refresh feed if the user would like to do that
-    $settings = feedapi_get_settings($node->type, $node->nid);
+    $settings = feedapi_get_settings($node->type);
     if (isset($settings['refresh_on_create'])) {
       if ($settings['refresh_on_create'] == TRUE) {
         $node->feed->nid = $node->nid;
@@ -906,19 +851,12 @@ function _feedapi_update(&$node, $teaser
       return;
     }
     db_query("UPDATE {feedapi} SET
-            url = '%s', feed_type = '%s', processors = '%s',
-            parsers = '%s', link = '%s' WHERE vid = %d",
+            url = '%s', feed_type = '%s', link = '%s' WHERE vid = %d",
       isset($node->feed->url) ? $node->feed->url : $node->feedapi['feedapi_url'],
       isset($node->feed->feed_type) ? $node->feed->feed_type : '',
-      isset($node->feed->processors) ? serialize($node->feed->processors) : serialize($old_config->feed->processors),
-      isset($node->feed->parsers) ? serialize($node->feed->parsers) : serialize($old_config->feed->parsers),
       isset($node->feed->options->link) ? $node->feed->options->link : '',
       $node->vid
     );
-    // Store add on module's settings if user has permission to do so.
-    if (user_access('advanced feedapi options')) {
-      _feedapi_store_settings(array('vid' => $node->vid), $node->feedapi);
-    }
   }
 }
 
@@ -1025,23 +963,15 @@ function _feedapi_process_text($text, $a
 }
 
 /**
- * Stores settings per content type or per node.
+ * Stores settings per content type
  *
- * @param $args
- *  Associative array which is $args['nid'] = N or $args['node_type'] = "content_type". Depends on what to store for
+ * @param $type
+ *   Name of the content-type
  * @param $settings
- *  The settings data itself
+ *   The settings data itself
  */
-function _feedapi_store_settings($args, $settings) {
-  if (isset($args['vid'])) {
-    db_query("UPDATE {feedapi} SET settings = '%s', skip = %d WHERE vid = %d", serialize($settings), $settings['skip'], $args['vid']);
-    module_invoke_all('feedapi_after_settings', $args['vid'], $settings);
-    // This ensures that next time, not the cached, but the updated value will be used.
-    feedapi_get_settings(NULL, $args['vid'], TRUE);
-  }
-  elseif ($args['node_type']) {
-    variable_set('feedapi_settings_'. $args['node_type'], $settings);
-  }
+function _feedapi_store_settings($type, $settings) {
+  variable_set('feedapi_settings_'. $type, $settings);
 }
 
 /**
@@ -1118,7 +1048,7 @@ function _feedapi_invoke_refresh(&$feed,
     }
     return 0;
   }
-  $settings = feedapi_get_settings(NULL, $feed->vid);
+  $settings = feedapi_get_settings($feed->node_type);
   
   // Step 1: Force processors to delete old items and determine the max. create elements.
   $counter['expired'] = feedapi_expire($feed);
@@ -1242,6 +1172,7 @@ function _feedapi_invoke_purge(&$feed, $
 function _feedapi_build_feed_object($node_type, $url) {
   $feed = new stdClass();
   $feed->url = $url;
+  $feed->node_type = $node_type;
   $node_type_settings = feedapi_get_settings($node_type);
   $feed->processors = _feedapi_format_settings($node_type_settings, 'processors');
   $feed->parsers = _feedapi_format_settings($node_type_settings, 'parsers');
@@ -1281,54 +1212,11 @@ function _feedapi_format_settings($node_
  * Retrieve settings per content type or per node.
  * 
  * @param $node_type
- *  Content type name or NULL if per node
- * @param $vid
- *  Node vid or NULL if per content type
- * @param $reset
- *  If TRUE, the data is returned from the database.
+ *  Content type name
  * @return
  *  The associative array of feedapi settings
- * 
- * @todo: Use node type settings for pulling on/off and weight of
- *       parsers/processors, use per node settings to override their
- *       configuration, this allows us a more predictable
- *       presets/settings behaviour. See d. o. #191692
- * Watch out: cache permutations of node_type or node_type+nid or nid.
- * Watch out: changes within page load likely.
  */
-function feedapi_get_settings($node_type, $vid = FALSE, $reset = FALSE) {
-  static $node_settings;
-  
-  if (is_numeric($vid)) {
-    if (!isset($node_settings[$vid]) || $reset) {
-      if ($settings = db_fetch_object(db_query('SELECT settings FROM {feedapi} WHERE vid = %d', $vid))) {
-        $settings = unserialize($settings->settings);
-        // If parsers don't have any settings, create an empty array
-        if (!isset($settings['parsers'])) {
-          $settings['parsers'] = array();
-        }
-        // If processors don't have any settings, create an empty array
-        if (!isset($settings['processors'])) {
-          $settings['processors'] = array();
-        }
-      }
-      if (is_array($settings) && count($settings['processors']) == 0 && count($settings['parsers']) == 0) {
-        $settings = NULL;
-      }
-      $node_settings[$vid] = !empty($settings) && is_array($settings) ? $settings : FALSE;
-    }
-    if (!is_array($node_settings[$vid])) {
-      if (empty($node_type)) {
-        // In normal case, this shouldn't happen. This is an emergency branch
-        $node_type = db_result(db_query("SELECT type FROM {node} WHERE vid = %d", $vid));
-      }
-    }
-    else {
-      return $node_settings[$vid];
-    }
-  }
-  
-  // Fallback: node_type.
+function feedapi_get_settings($node_type) {
   if (isset($node_type) && is_string($node_type)) {
     if ($settings = variable_get('feedapi_settings_'. $node_type, FALSE)) {
       // Sanitize data right now, tricky users may turned off the module
Index: feedapi_node/tests/feedapi_node.module.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_node/tests/Attic/feedapi_node.module.test,v
retrieving revision 1.1.4.19
diff -u -p -r1.1.4.19 feedapi_node.module.test
--- feedapi_node/tests/feedapi_node.module.test	6 Apr 2009 07:20:07 -0000	1.1.4.19
+++ feedapi_node/tests/feedapi_node.module.test	6 Apr 2009 08:35:47 -0000
@@ -119,7 +119,7 @@ class FeedAPI_Node_Tests extends DrupalT
       // Disable feed item expiring
       $settings = feedapi_get_settings($this->info->type, $nid);
       $settings['items_delete'] = FEEDAPI_NEVER_DELETE_OLD;
-      _feedapi_store_settings(array('nid' => $nid), $settings);
+      _feedapi_store_settings($this->info->type, $settings);
 
       // Refresh the feed
       $this->drupalGet("node/$nid/refresh");
@@ -222,9 +222,11 @@ class FeedAPI_Node_Tests extends DrupalT
       }
       
       // Test refresh on feed creation
+      $settings = feedapi_get_settings($this->info->type, $nid);
+      $settings['refresh_on_create'] = TRUE;
+      _feedapi_store_settings($this->info->type, $settings);
       $edit = array(
         'feedapi[feedapi_url]' => $feed_url,
-        'feedapi[refresh_on_create]' => TRUE,
       );
       $this->drupalPost('node/add/'. $this->info->type, $edit, 'Save');
       
@@ -263,23 +265,21 @@ class FeedAPI_Node_Tests extends DrupalT
     $settings = feedapi_get_settings($this->info->type);
     
     // Create the initial revision, first submission
-    $feed_url = "http://novaak.net/test_feed.rss?". $this->randomName();
+    $feed_url1 = "http://novaak.net/test_feed.rss?". $this->randomName();
+    $feed_url2 = "http://novaak.net/test_feed.rss?". $this->randomName();
     $edit = array(
-      'feedapi[processors][feedapi_node][node_date]' => 'current',
-      'feedapi[feedapi_url]' => $feed_url,
+      'feedapi[feedapi_url]' => $feed_url1,
     );
     $this->drupalPost('node/add/'. $this->info->type, $edit, 'Save');
     $this->assertText(t('Link to site'), 'The node is created.');
-    $nid = db_result(db_query("SELECT nid FROM {feedapi} WHERE url = '%s'", $feed_url));
+    $nid = db_result(db_query("SELECT nid FROM {feedapi} WHERE url = '%s'", $feed_url1));
     $vids = array();
     // Get the current vid
     $vids[] = db_result(db_query("SELECT vid FROM {node} WHERE nid = %d", $nid));
     
     // Edit the node, change a setting, create a new revision
     $edit = array(
-      'feedapi[processors][feedapi_node][node_date]' => 'feed',
-      'revision' => TRUE,
-      'log' => 'changelog blabla',
+      'feedapi[feedapi_url]' => $feed_url2,
     );
     $this->drupalPost('node/'. $nid .'/edit', $edit, 'Save');
     $vids[] = db_result(db_query("SELECT vid FROM {node} WHERE nid = %d", $nid));
@@ -288,17 +288,14 @@ class FeedAPI_Node_Tests extends DrupalT
     $num = db_result(db_query('SELECT COUNT(*) FROM {feedapi} WHERE nid = %d', $nid));
     $this->assertTrue($num == 2, 'Feed table contains the two revision entries.');
     
-    $settings = array();
-    $settings[] = feedapi_get_settings(NULL, $vids[0]);
-    $settings[] = feedapi_get_settings(NULL, $vids[1]);
-    $this->assertTrue($settings[0]['processors']['feedapi_node']['node_date'] == 'current', 'The initial revision has correct setting');
-    $this->assertTrue($settings[1]['processors']['feedapi_node']['node_date'] == 'feed', 'The first revision has correct setting');
+    $edited_feed = node_load($nid);
+    $this->assertTrue($edited_feed->feed->url == $feed_url2, 'The first revision has correct setting');
     
     // Do a revert to the initial revision
     $this->drupalPost('node/'. $nid .'/revisions/'. $vids[0] .'/revert', array(), 'Revert');
     $vids[] = db_result(db_query("SELECT vid FROM {node} WHERE nid = %d", $nid));
-    $settings[] = feedapi_get_settings(NULL, $vids[2]);
-    $this->assertTrue($settings[2]['processors']['feedapi_node']['node_date'] == 'current', 'The reverted revision has correct setting.');
+    $edited_feed = node_load($nid);
+    $this->assertTrue($edited_feed->feed->url == $feed_url1, 'The reverted revision has correct setting.');
     
     $this->drupalPost("node/$nid/edit", $edit, t('Delete'));
     $this->drupalPost("node/$nid/delete", array(), t('Delete'));
