From 8c54da49301f7f160dd2d1acaa2d92e2c28364dc Mon Sep 17 00:00:00 2001
From: Alex Barth <alex_b@53995.no-reply.drupal.org>
Date: Sun, 16 May 2010 20:04:15 +0000
Subject: [PATCH] #755544 Monkey Master: Keep batch processing when mapping
 fails.

---
 CHANGELOG.txt                  |  1 +
 plugins/FeedsNodeProcessor.inc | 24 +++++++++++++++---------
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 1ba254b7..a7307ef7 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -3,6 +3,7 @@
 Feeds 6.x 1.0 xxxxxxxxxxxxxxxxxxxx
 ----------------------------------
 
+- #755544 Monkey Master: Keep batch processing when mapping fails.
 - alex_b: Reset import schedule after deleting items from feed.
 - #653412 rbrandon: Do not create items older than expiry time.
 - #725392 nicholasThompson: FeedsBatch does not check feeds folder exists before
diff --git a/plugins/FeedsNodeProcessor.inc b/plugins/FeedsNodeProcessor.inc
index 0ef4778b..c06f8830 100644
--- a/plugins/FeedsNodeProcessor.inc
+++ b/plugins/FeedsNodeProcessor.inc
@@ -41,10 +41,6 @@ class FeedsNodeProcessor extends FeedsProcessor {
           // If updating populate nid and vid avoiding an expensive node_load().
           $node->nid = $nid;
           $node->vid = db_result(db_query("SELECT vid FROM {node} WHERE nid = %d", $nid));
-          $batch->updated++;
-        }
-        else {
-          $batch->created++;
         }
 
         // Populate and prepare node object.
@@ -66,11 +62,21 @@ class FeedsNodeProcessor extends FeedsProcessor {
         $node->log = 'Created/updated by FeedsNodeProcessor';
         $node->uid = 0;
 
-        // Execute mappings from $item to $node.
-        $this->map($item, $node);
-
-        // Save the node.
-        node_save($node);
+        // Map and save nodes. If errors occur don't stop but report them.
+        try {
+          $this->map($item, $node);
+          node_save($node);
+          if (!empty($nid)) {
+            $batch->updated++;
+          }
+          else {
+            $batch->created++;
+          }
+        }
+        catch (Exception $e) {
+          drupal_set_message($e->getMessage(), 'warning');
+          watchdog('feeds', $e->getMessage(), array(), WATCHDOG_WARNING);
+        }
       }
 
       $processed++;
-- 
GitLab