? 404006_feedapi_api_consolidation.patch
? 405896_dont_blow_away_feedapi.patch
? feedapi_api_break.patch
? feedapi_remove_unneeded_code.patch
Index: feedapi.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi.module,v
retrieving revision 1.23.2.119.2.47
diff -u -p -r1.23.2.119.2.47 feedapi.module
--- feedapi.module	24 Feb 2009 07:34:42 -0000	1.23.2.119.2.47
+++ feedapi.module	18 Mar 2009 16:42:57 -0000
@@ -251,7 +251,6 @@ function feedapi_views_api() {
  * Invoke feedapi API callback functions.
  *
  * @param $op
- *  "load"    Load the feed items basic data into the $feed->items[]
  *  "refresh"  Re-download the feed and process newly arrived item
  *  "purge"    Delete all the feed items
  * 
@@ -278,8 +277,6 @@ function feedapi_invoke($op, &$feed, $pa
   _feedapi_sanitize_processors($feed);
 
   switch ($op) {
-    case 'load':
-      return _feedapi_invoke_load($feed, $param);
     case 'refresh':
       return _feedapi_invoke_refresh($feed, $param);
     case 'purge':
@@ -337,7 +334,7 @@ function feedapi_expire($feed, $settings
  */
 function feedapi_expire_item($feed, $item) {
   foreach ($feed->processors as $processor) {
-    module_invoke($processor, 'feedapi_item', 'delete', $item, $feed->nid);
+    module_invoke($processor, 'feedapi_item', 'delete', $feed->nid, $item);
   }
 }
 
@@ -1005,7 +1002,7 @@ function feedapi_enabled_type($node_type
 function _feedapi_invoke($op, &$feed, $param) {
   $output = array();
   foreach ($feed->processors as $processor) {
-    $result = module_invoke($processor, 'feedapi_item', $op, $feed, $param);
+    $result = module_invoke($processor, 'feedapi_item', $op, $feed->nid, $param);
     // Result may be a list of items or single values (count)
     if ($result) {
       if (is_array($result)) {
@@ -1021,22 +1018,6 @@ function _feedapi_invoke($op, &$feed, $p
 
 /**
  * Helper function for feedapi_invoke().
- * Load a list of feed items into the feed object from the processors.
- */
-function _feedapi_invoke_load(&$feed, $param) {
-  $feed->items = array();
-  foreach ($feed->processors as $processor) {
-    $items = module_invoke($processor, 'feedapi_item', 'fetch', $feed);
-    if (is_array($items)) {
-      foreach ($items as $item) {
-        $feed->items[] = $item;
-      }
-    }
-  }
-}
-
-/**
- * Helper function for feedapi_invoke().
  * Refresh the feed, call the proper parsers and processors' hooks.
  * Don't call this function directly, use feedapi_refresh() instead.
  * 
@@ -1097,9 +1078,9 @@ function _feedapi_invoke_refresh(&$feed,
     $item->is_updated = FALSE;
     $item->is_new = FALSE;
     foreach ($feed->processors as $processor) {
-      if (!module_invoke($processor, 'feedapi_item', 'unique', $item, $feed->nid, $settings['processors'][$processor])) {
+      if (!module_invoke($processor, 'feedapi_item', 'unique', $feed->nid, $item, $settings['processors'][$processor])) {
         if ($settings['update_existing'] == TRUE) {
-          module_invoke($processor, 'feedapi_item', 'update', $item, $feed->nid, $settings['processors'][$processor]);
+          module_invoke($processor, 'feedapi_item', 'update', $feed->nid, $item, $settings['processors'][$processor]);
           $item->is_updated = TRUE;
         }
       }
@@ -1111,7 +1092,7 @@ function _feedapi_invoke_refresh(&$feed,
         if ($diff > $items_delete && ($items_delete > FEEDAPI_NEVER_DELETE_OLD)) {
           break;
         }
-        $result = module_invoke($processor, 'feedapi_item', 'save', $item, $feed->nid, $settings['processors'][$processor]);
+        $result = module_invoke($processor, 'feedapi_item', 'insert', $feed->nid, $item, $settings['processors'][$processor]);
         if ($result !== FALSE) {
           $item->is_new = TRUE;
         }
@@ -1173,7 +1154,7 @@ function _feedapi_invoke_purge(&$feed, $
   // Delete items from the processors
   foreach ($feed->processors as $processor) {
     // FIXME: it's possible now to accidentally delete an item from another processor
-    module_invoke($processor, 'feedapi_item', 'purge', $feed);
+    module_invoke($processor, 'feedapi_item', 'purge', $feed->nid);
   }
   // Reset hash.
   db_query("UPDATE {feedapi} SET hash = 0 WHERE nid = %d", $feed->nid);
Index: feedapi_node/feedapi_node.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_node/Attic/feedapi_node.module,v
retrieving revision 1.1.2.18.2.26
diff -u -p -r1.1.2.18.2.26 feedapi_node.module
--- feedapi_node/feedapi_node.module	17 Mar 2009 19:20:14 -0000	1.1.2.18.2.26
+++ feedapi_node/feedapi_node.module	18 Mar 2009 16:42:57 -0000
@@ -188,7 +188,7 @@ function feedapi_node_feedapi_item($op) 
   switch ($op) {
     case 'type':
       return array("XML feed");
-    case 'save':
+    case 'insert':
     case 'expire':
     case 'update':
     case 'delete':
@@ -250,12 +250,14 @@ function feedapi_node_feedapi_after_refr
  *       }
  *     }
  */
-function _feedapi_node_expire($feed, $settings) {
+function _feedapi_node_expire($feed_nid, $item = NULL, $settings = NULL) {
   $count = 0;
   if ($settings['items_delete'] > FEEDAPI_NEVER_DELETE_OLD) {
     $timexpire = time() - $settings['items_delete'];
     // @ TODO Review this query conditions
-    $result = db_query("SELECT * FROM {feedapi_node_item} fn JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fn.nid WHERE ff.feed_nid = %d AND ( (fn.timestamp > 0 AND fn.timestamp < %d) OR (fn.timestamp = 0 AND fn.arrived > 0 AND fn.arrived < %d) )", $feed->nid, $timexpire, $timexpire);
+    $result = db_query("SELECT * FROM {feedapi_node_item} fn JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fn.nid WHERE ff.feed_nid = %d AND ( (fn.timestamp > 0 AND fn.timestamp < %d) OR (fn.timestamp = 0 AND fn.arrived > 0 AND fn.arrived < %d) )", $feed_nid, $timexpire, $timexpire);
+    $node = node_load($feed_nid);
+    $feed = $node->feed;
     while ($item = db_fetch_object($result)) {
       // We callback feedapi for deleting
       feedapi_expire_item($feed, $item);
@@ -269,21 +271,21 @@ function _feedapi_node_expire($feed, $se
  * Create a node from the feed item
  * Store the relationship between the node and the feed item
  */
-function _feedapi_node_save($feed_item, $feed_nid, $settings = array()) {
+function _feedapi_node_insert($feed_nid, $item = NULL, $settings = array()) {
   // Avoid error message flood when creating tons of items.
   static $error_msg = FALSE;
   
   module_load_include('inc', 'node', 'node.pages');
   // Don't save anything if neither url nor guid given.
-  if (!$feed_item->options->original_url) {
-    if (!$feed_item->options->guid) {
-      return $feed_item;
+  if (!$item->options->original_url) {
+    if (!$item->options->guid) {
+      return $item;
     }
   }
   // Constructs the node object.
   $node = new stdClass();
-  if (isset($feed_item->nid)) {
-    $node->nid = $feed_item->nid;
+  if (isset($item->nid)) {
+    $node->nid = $item->nid;
     $node->vid = db_result(db_query("SELECT vid FROM {node_revisions} WHERE nid = %d", $node->nid));
   }
   // Determines the node type.
@@ -327,32 +329,33 @@ function _feedapi_node_save($feed_item, 
     $node->status = 1;
   }
   $feed_node = node_load($feed_nid);
-  $node->title = $feed_item->title;
-  $node->body = $feed_item->description;
-  $node->teaser = node_teaser($feed_item->description);
+  $node->title = $item->title;
+  $node->body = $item->description;
+  $node->teaser = node_teaser($item->description);
   // Stick feed item on node so that add on modules can act on it.
   // A feed item can come in from more than one feed.
   $node->feedapi_node->feed_nids[$feed_nid] = $feed_nid;
-  $node->feedapi_node->feed_item = $feed_item;
+  $node->feedapi_node->feed_item = $item;
   // For backwards compatibility - todo: move to using feedapi_node->feed_nids and feedapi_node->feed_item.
   $node->feedapi->feed_nid = $feed_nid;
-  $node->feedapi->feed_item = $feed_item;
+  $node->feedapi->feed_item = $item;
   $node->created = time();
   node_object_prepare($node);
-  if (!isset($feed_item->nid)) {
-    $node->created = (isset($settings['node_date']) && $settings['node_date'] == 'feed') ? $feed_item->options->timestamp : time();
+  if (!isset($item->nid)) {
+    $node->created = (isset($settings['node_date']) && $settings['node_date'] == 'feed') ? $item->options->timestamp : time();
   }
   else {
-    $node->created = db_result(db_query("SELECT created FROM {node} WHERE nid = %d", $feed_item->nid));
+    $node->created = db_result(db_query("SELECT created FROM {node} WHERE nid = %d", $item->nid));
   }
   $node->uid = $feed_node->uid;
   
   // If there are dupes on other feeds, don't create new feed item, but link this feed
   // to existing feed item.
   // Heads up: if there is a duplicate on the SAME feed, 
-  // _feedapi_node_save() won't even be called.
-  if (isset($feed_item->feedapi_node->duplicates)) {
-    foreach ($feed_item->feedapi_node->duplicates as $fi_nid => $f_nids) {
+  // _feedapi_node_insert() won't even be called.
+  if (isset($item->feedapi_node->duplicates)) {
+    $dups = array_keys($item->feedapi_node->duplicates);
+    foreach ($dups as $fi_nid) {
       $feed_item_node = node_load($fi_nid);
       $feed_item_node->feedapi_node->feed_nids[$feed_nid] = $feed_nid;
       node_object_prepare($feed_item_node);
@@ -362,33 +365,33 @@ function _feedapi_node_save($feed_item, 
   else {
     node_save($node);
   }
-  return $feed_item;
+  return $item;
 }
 
 /**
  * Update a node which already assigned to a feed item
  */
-function _feedapi_node_update($feed_item, $feed_nid, $settings = array()) {
+function _feedapi_node_update($feed_nid, $item = NULL, $settings = NULL) {
   // Determine which node is assigned to this item
-  if ($feed_item->options->guid) {
-    $node = db_fetch_object(db_query("SELECT nid FROM {feedapi_node_item} WHERE guid = '%s'", $feed_item->options->guid));
+  if ($item->options->guid) {
+    $node = db_fetch_object(db_query("SELECT nid FROM {feedapi_node_item} WHERE guid = '%s'", $item->options->guid));
   }
   else {
-    $node = db_fetch_object(db_query("SELECT nid FROM {feedapi_node_item} WHERE url = '%s'", $feed_item->options->original_url));
+    $node = db_fetch_object(db_query("SELECT nid FROM {feedapi_node_item} WHERE url = '%s'", $item->options->original_url));
   }
   if (is_object($node)) {
-    $feed_item->nid = $node->nid;
+    $item->nid = $node->nid;
   }
-  _feedapi_node_save($feed_item, $feed_nid, $settings);
-  return $feed_item;
+  _feedapi_node_insert($feed_nid, $item, $settings);
+  return $item;
 }
 
 /**
  * Delete a node which already assigned to a feed item
  */
-function _feedapi_node_delete($feed_item) {
-  if (isset($feed_item->nid)) {
-    _feedapi_node_node_delete($feed_item->nid);
+function _feedapi_node_delete($feed_nid, $item = NULL) {
+  if (isset($item->nid)) {
+    _feedapi_node_node_delete($item->nid);
   }
   else {
     // Let's throw an error on the off chance we land here.
@@ -399,14 +402,14 @@ function _feedapi_node_delete($feed_item
 /**
  * Delete all nodes associated with a feed.
  */
-function _feedapi_node_purge($feed) {
-  $total = db_result(db_query('SELECT COUNT(*) FROM {feedapi_node_item_feed} WHERE feed_nid = %d', $feed->nid));
+function _feedapi_node_purge($feed_nid) {
+  $total = db_result(db_query('SELECT COUNT(*) FROM {feedapi_node_item_feed} WHERE feed_nid = %d', $feed_nid));
   
   $deleted = 0;
   $max_execution_time = ini_get('max_execution_time');
   while ($deleted < $total) {
     // Take hundred items at a time.
-    $result = db_query_range('SELECT feed_item_nid as nid FROM {feedapi_node_item_feed} WHERE feed_nid = %d', $feed->nid, 0, 100);
+    $result = db_query_range('SELECT feed_item_nid as nid FROM {feedapi_node_item_feed} WHERE feed_nid = %d', $feed_nid, 0, 100);
     
     while ($node = db_fetch_object($result)) {
       node_delete($node->nid);
@@ -431,25 +434,6 @@ function _feedapi_node_purge($feed) {
 }
 
 /**
- * Construct the basic information (nid, feed_nid) of all feeds into an array.
- * 
- * @param $feed
- *  Feed object
- * @return
- *  The array of feed elements with basic information
- */
-function _feedapi_node_fetch($feed) {
-  $result = db_query("SELECT fni.nid, ff.feed_nid, fni.arrived, fni.timestamp FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid = %d ORDER BY fni.timestamp DESC", $feed->nid);
-  $items = array();
-  while ($item = db_fetch_object($result)) {
-    $node = node_load($item->nid);
-    $item->title = $node->title;
-    $items[] = $item;
-  }
-  return $items;
-}
-
-/**
  * Tell if the feed item was seen before or not at the feed
  *
  * @param $feed_item
@@ -459,16 +443,16 @@ function _feedapi_node_fetch($feed) {
  * @return
  *  TRUE if the item is new, FALSE if the item is a duplicated one
  */
-function _feedapi_node_unique($feed_item, $feed_nid, $settings) {
+function _feedapi_node_unique($feed_nid, $item = NULL, $settings = NULL) {
   // Feed item is duplicate, if URL or GUID are duplicate or if they are both missing.
-  if (isset($feed_item->options->original_url)) {
-    $count = db_result(db_query("SELECT fni.nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE fni.url = '%s' AND ff.feed_nid = %d", $feed_item->options->original_url, $feed_nid));
+  if (isset($item->options->original_url)) {
+    $count = db_result(db_query("SELECT fni.nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE fni.url = '%s' AND ff.feed_nid = %d", $item->options->original_url, $feed_nid));
     if ($count) {
       return FALSE;
     }
   }
-  if (isset($feed_item->options->guid)) {
-    $count = db_result(db_query("SELECT fni.nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE fni.guid = '%s' AND ff.feed_nid = %d", $feed_item->options->guid, $feed_nid));
+  if (isset($item->options->guid)) {
+    $count = db_result(db_query("SELECT fni.nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE fni.guid = '%s' AND ff.feed_nid = %d", $item->options->guid, $feed_nid));
     if ($count) {
       return FALSE;
     }
@@ -479,21 +463,21 @@ function _feedapi_node_unique($feed_item
   // Todo: don't link to feed items whose feed is not x_dedupe enabled.
   if ($settings['x_dedupe']) {
     
-    if (isset($feed_item->options->original_url)) {
-      $result = db_query("SELECT fni.nid, ff.feed_nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid <> %d AND fni.url = '%s'", $feed_nid, $feed_item->options->original_url);
+    if (isset($item->options->original_url)) {
+      $result = db_query("SELECT fni.nid, ff.feed_nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid <> %d AND fni.url = '%s'", $feed_nid, $item->options->original_url);
       while ($existing_feed_item = db_fetch_object($result)) {
-        $feed_item->feedapi_node->duplicates[$existing_feed_item->nid][] = $existing_feed_item->feed_nid;
+        $item->feedapi_node->duplicates[$existing_feed_item->nid][] = $existing_feed_item->feed_nid;
       }
     }
-    if (!isset($feed_item->feedapi_node->duplicates) && isset($feed_item->options->guid)) {
-      $result = db_query("SELECT fni.nid, ff.feed_nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid <> %d AND fni.guid = '%s'", $feed_nid, $feed_item->options->guid);
+    if (!isset($item->feedapi_node->duplicates) && isset($item->options->guid)) {
+      $result = db_query("SELECT fni.nid, ff.feed_nid FROM {feedapi_node_item} fni JOIN {feedapi_node_item_feed} ff ON ff.feed_item_nid = fni.nid WHERE ff.feed_nid <> %d AND fni.guid = '%s'", $feed_nid, $item->options->guid);
       while ($existing_feed_item = db_fetch_object($result)) {
-        $feed_item->feedapi_node->duplicates[$existing_feed_item->nid][] = $existing_feed_item->feed_nid;
+        $item->feedapi_node->duplicates[$existing_feed_item->nid][] = $existing_feed_item->feed_nid;
       }
     }
   }
   
-  if (isset($feed_item->options->original_url) || isset($feed_item->options->guid)) {
+  if (isset($item->options->original_url) || isset($item->options->guid)) {
     return TRUE;
   }
   // Neither GUID, nor URL present: no unique item.
