You are here

public function MigrateTextFieldHandler::prepare in Migrate 7.2

Same name and namespace in other branches
  1. 6.2 plugins/destinations/fields.inc \MigrateTextFieldHandler::prepare()

File

plugins/destinations/fields.inc, line 368
Support for processing entity fields

Class

MigrateTextFieldHandler

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();
  }
  $migration = Migration::currentMigration();
  $destination = $migration
    ->getDestination();
  $language = $this
    ->getFieldLanguage($entity, $field_info, $arguments);
  $max_length = isset($field_info['settings']['max_length']) ? $field_info['settings']['max_length'] : 0;

  // Setup the standard Field API array for saving.
  $delta = 0;
  foreach ($values as $value) {
    $item = array();
    if (isset($arguments['summary'])) {
      if (is_array($arguments['summary'])) {
        $item['summary'] = $arguments['summary'][$delta];
      }
      else {
        $item['summary'] = $arguments['summary'];
      }
    }
    if (isset($arguments['format'])) {
      if (is_array($arguments['format'])) {
        $format = $arguments['format'][$delta];
      }
      else {
        $format = $arguments['format'];
      }
    }
    elseif (!empty($instance['settings']['text_processing'])) {
      $format = $destination
        ->getTextFormat();
    }
    else {
      $format = NULL;
    }
    $item['format'] = $item['value_format'] = $format;

    // If the value is an array, which it might be if the destination entity
    // was loaded via entity_load(), ensure we're handling a string.
    if (is_array($value) && !empty($value[0]) && array_key_exists('value', $value[0])) {
      $value = $value[0]['value'];
    }

    // Make sure the value will fit
    if ($max_length) {
      $item['value'] = drupal_substr($value, 0, $max_length);
      if (!empty($arguments['track_overflow'])) {
        $value_length = drupal_strlen($value);
        if ($value_length > $max_length) {
          $migration
            ->saveMessage(t('Value for field !field exceeds max length of !max_length, actual length is !length', array(
            '!field' => $instance['field_name'],
            '!max_length' => $max_length,
            '!length' => $value_length,
          )), Migration::MESSAGE_INFORMATIONAL);
        }
      }
    }
    else {
      $item['value'] = $value;
    }
    if (is_array($language)) {
      $current_language = $language[$delta];
    }
    else {
      $current_language = $language;
    }
    $return[$current_language][] = $item;
    $delta++;
  }
  return isset($return) ? $return : NULL;
}