Skip to content
Snippets Groups Projects
Commit 714c9e35 authored by Chris Leppanen's avatar Chris Leppanen
Browse files

Make link mapper less retarded.

parent 1c6777a4
No related branches found
No related tags found
No related merge requests found
...@@ -59,5 +59,4 @@ function date_feeds_set_target($source, $entity, $target, $feed_element) { ...@@ -59,5 +59,4 @@ function date_feeds_set_target($source, $entity, $target, $feed_element) {
} }
} }
$feed_element->buildDateField($entity, $field_name); $feed_element->buildDateField($entity, $field_name);
} }
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
/** /**
* Implements hook_feeds_processor_targets_alter(). * Implements hook_feeds_processor_targets_alter().
* *
* @see FeedsNodeProcessor::getMappingTargets(). * @see FeedsProcessor::getMappingTargets()
*/ */
function link_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_name) { function link_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_name) {
foreach (field_info_instances($entity_type, $bundle_name) as $name => $instance) { foreach (field_info_instances($entity_type, $bundle_name) as $name => $instance) {
...@@ -16,16 +16,18 @@ function link_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_nam ...@@ -16,16 +16,18 @@ function link_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_nam
if ($info['type'] == 'link_field') { if ($info['type'] == 'link_field') {
if (array_key_exists('url', $info['columns'])) { if (array_key_exists('url', $info['columns'])) {
$targets[$name . ':url'] = array( $targets[$name . ':url'] = array(
'name' => t('@name URL', array('@name' => $instance['label'])), 'name' => t('@name: URL', array('@name' => $instance['label'])),
'callback' => 'link_feeds_set_target', 'callback' => 'link_feeds_set_target',
'description' => t('The @label field of the node.', array('@label' => $instance['label'])), 'description' => t('The @label field of the entity.', array('@label' => $instance['label'])),
'real_target' => $name,
); );
} }
if (array_key_exists('title', $info['columns'])) { if (array_key_exists('title', $info['columns'])) {
$targets[$name . ':title'] = array( $targets[$name . ':title'] = array(
'name' => t('@name Title', array('@name' => $instance['label'])), 'name' => t('@name: Title', array('@name' => $instance['label'])),
'callback' => 'link_feeds_set_target', 'callback' => 'link_feeds_set_target',
'description' => t('The @label field of the node.', array('@label' => $instance['label'])), 'description' => t('The @label field of the entity.', array('@label' => $instance['label'])),
'real_target' => $name,
); );
} }
} }
...@@ -50,31 +52,25 @@ function link_feeds_set_target($source, $entity, $target, $value) { ...@@ -50,31 +52,25 @@ function link_feeds_set_target($source, $entity, $target, $value) {
} }
// Iterate over all values. // Iterate over all values.
$i = 0; list($field_name, $column) = explode(':', $target);
$info = field_info_field($target); $info = field_info_field($field_name);
list($field_name, $sub_field) = explode(':', $target);
$field = isset($entity->$field_name) ? $entity->$field_name : array();
$delta = 0;
foreach ($value as $v) { foreach ($value as $v) {
if ($info['cardinality'] == $delta) {
break;
}
if (is_object($v) && ($v instanceof FeedsElement)) { if (is_object($v) && ($v instanceof FeedsElement)) {
$v = $v->getValue(); $v = $v->getValue();
} }
if (!is_array($v) && !is_object($v)) {
if (strstr($target, 'url')) { if (is_scalar($v)) {
if (isset($entity->{$field_name}['und'][$i]['title'])) { $field['und'][$delta][$column] = $v;
$field['und'][$i]['title'] = $entity->{$field_name}['und'][$i]['title']; $delta++;
}
$field['und'][$i]['url'] = $v;
}
elseif (strstr($target, 'title')) {
if (isset($entity->{$field_name}['und'][$i]['url'])) {
$field['und'][$i]['url'] = $entity->{$field_name}['und'][$i]['url'];
}
$field['und'][$i]['title'] = $v;
}
}
if ($info['cardinality'] == 1) {
break;
} }
$i++;
} }
$entity->{$field_name} = $field; $entity->$field_name = $field;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment