You are here

function entityreference_feeds_feeds_set_target in Entity reference feeds 7

Callback for mapping.

Parameters

FeedsSource $source: A FeedsSource object.

Entity $entity: The entity to map to.

string $target: The target key on $entity to map to.

array $value: The value to map. Should be an array.

1 string reference to 'entityreference_feeds_feeds_set_target'
_entityreference_feeds_get_targets in ./entityreference_feeds.module
@file This is the main module file for entity reference feeds.

File

./entityreference_feeds.module, line 160
This is the main module file for entity reference feeds.

Code

function entityreference_feeds_feeds_set_target($source, $entity, $target, $value, $mapping) {
  $entity->entityreference_feeds_source_id = $source->id;

  //$entity->entityreference_feeds_source_feed_nid = $source->feed_nid;

  // Assume that the passed in value could really be any number of values.
  if (is_array($value)) {
    $values = $value;
  }
  else {
    $values = array(
      $value,
    );
  }
  list($field_name, $target_bundle, $target_callback, $target_target) = explode(':', $target, 4);

  // Get some useful field information.
  $field_info = field_info_field($field_name);
  $target_type = $field_info['settings']['target_type'];
  if (!isset($entity->entityreference_feeds_items)) {
    $entity->entityreference_feeds_items = array();
  }
  if (!isset($entity->entityreference_feeds_items[$field_name])) {
    $entity->entityreference_feeds_items[$field_name] = array();
  }
  if (!isset($entity->entityreference_feeds_items[$field_name][$target_bundle])) {
    $entity->entityreference_feeds_items[$field_name][$target_bundle] = array();
  }
  $bundle_items =& $entity->entityreference_feeds_items[$field_name][$target_bundle];
  foreach ($values as $delta => $target_value) {
    if (!isset($bundle_items[$delta])) {
      $target_entity_info = entity_get_info($target_type);
      $target_entity = new stdClass();
      if (!empty($target_entity_info['entity keys']['bundle'])) {
        $target_entity->{$target_entity_info['entity keys']['bundle']} = $target_bundle;
      }
      $bundle_items[$delta]['target_entity'] = $target_entity;
      $bundle_items[$delta]['creation_values'] = array();
    }
    else {
      $target_entity =& $bundle_items[$delta]['target_entity'];
    }
    if (!isset($target_entity->feeds_item)) {
      entityreference_feeds_newItemInfo($target_entity, $target_type, $source->id, $source->feed_nid);
    }
    if ($target_callback !== 'entityreference_feeds' && function_exists($target_callback)) {

      //$real_target = isset($targets[$target]['real_target']) ? $targets[$target]['real_target'] : $target_target;

      //$bundle_items[$delta]['real_targets'][$real_target] = $real_target;

      //Note: Most feed mappers, at least the ones in Feeds > 7.x-2.0-alpha8, assume target value is an array
      $target_callback($source, $target_entity, $target_target, array(
        $target_value,
      ), $mapping);
    }
    else {
      switch ($target_target) {
        case 'url':
        case 'guid':
          $target_entity->feeds_item->{$target_target} = $target_value;
          break;
        default:
          $bundle_items[$delta]['creation_values'][$target_target] = $target_value;
          break;
      }
    }
  }
}