You are here

public function MigrateLinkFieldHandler::prepare in Link 7

Same name and namespace in other branches
  1. 6.2 link.migrate.inc \MigrateLinkFieldHandler::prepare()

Prepare.

File

./link.migrate.inc, line 95

Class

MigrateLinkFieldHandler

Code

public function prepare($entity, array $field_info, array $instance, array $values) {
  if (isset($values['arguments'])) {
    $arguments = $values['arguments'];
    unset($values['arguments']);
  }
  else {
    $arguments = array();
  }
  $language = $this
    ->getFieldLanguage($entity, $field_info, $arguments);

  // URLs are numeric array elements, keyed by delta. As those elements don't
  // exist for empty URLs they are allowed and it's up to the developer what
  // data to migrate, add elements for those URLs up to the maximum delta
  // found.
  //
  // First of all, determine the maximum delta from non-empty URLs.
  $max_delta = max(array_merge(array(
    0,
  ), array_keys($values)));

  // Next, determine the max delta from arguments.
  foreach ($arguments as $key => $value) {
    if (is_array($value)) {
      $max_delta = max($max_delta, max(array_keys($value)));
    }
  }

  // Finally, add missing elements for empty URLs.
  for ($delta = 0; $delta <= $max_delta; $delta++) {
    if (!isset($values[$delta])) {
      $values[$delta] = '';
    }
  }
  foreach ($values as $delta => $value) {
    $item = array();
    if (isset($arguments['title'])) {
      if (!is_array($arguments['title'])) {
        $item['title'] = $arguments['title'];
      }
      elseif (isset($arguments['title'][$delta])) {
        $item['title'] = $arguments['title'][$delta];
      }
    }
    if (isset($arguments['attributes'])) {
      if (is_array($arguments['attributes']) && isset($arguments['attributes'][$delta])) {
        $item['attributes'] = $arguments['attributes'][$delta];
      }
      else {
        $item['attributes'] = $arguments['attributes'];
      }
    }
    $item['url'] = $value;
    if (is_array($language)) {
      $current_language = $language[$delta];
    }
    else {
      $current_language = $language;
    }
    $return[$current_language][$delta] = $item;
  }
  return isset($return) ? $return : NULL;
}