From 4f610e9751ddb1734367ce5ed5f96c7118d6e733 Mon Sep 17 00:00:00 2001
From: Axel Rutz <axel.rutz@clever-systems.net>
Date: Mon, 27 Jan 2014 04:53:58 +0100
Subject: [PATCH] Issue #2141639: Add feeds mapper for vat field.

---
 .../commerce_vat_reference.feeds.inc               |   60 ++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 commerce_vat_reference/commerce_vat_reference.feeds.inc

diff --git a/commerce_vat_reference/commerce_vat_reference.feeds.inc b/commerce_vat_reference/commerce_vat_reference.feeds.inc
new file mode 100644
index 0000000..c1a5802
--- /dev/null
+++ b/commerce_vat_reference/commerce_vat_reference.feeds.inc
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * @file
+ * Commerce VAT reference field feeds mapper.
+ */
+
+/**
+ * Implements hook_feeds_processor_targets_alter().
+ *
+ * @see FeedsProcessor::getMappingTargets()
+ */
+function commerce_vat_reference_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_name) {
+  foreach (field_info_instances($entity_type, $bundle_name) as $name => $instance) {
+    $info = field_info_field($name);
+
+    if ($info['type'] === 'commerce_vat_rate_reference') {
+      $targets[$name] = array(
+        'name' => check_plain($instance['label']),
+        'callback' => 'commerce_vat_reference_feeds_set_target',
+        'description' => t('The @label field of the entity.', array('@label' => $instance['label'])),
+      );
+    }
+  }
+}
+
+/**
+ * Callback for mapping var reference fields.
+ */
+function commerce_vat_reference_feeds_set_target($source, $entity, $target, $value) {
+  if (!isset($value)) {
+    return;
+  }
+
+  if (!is_array($value)) {
+    $value = array($value);
+  }
+
+  $info = field_info_field($target);
+
+  // Iterate over all values.
+  $field = array(LANGUAGE_NONE => array());
+
+  foreach ($value as $i => $v) {
+
+    if ($info['cardinality'] == $i) {
+      break;
+    }
+
+    if (is_object($v) && ($v instanceof FeedsElement)) {
+      $v = $v->getValue();
+    }
+
+    if (is_scalar($v)) {
+      $field[LANGUAGE_NONE][$i]['value'] = $v;
+    }
+  }
+
+  $entity->$target = $field;
+}
-- 
1.7.9.5

