function content_migrate_prepare_node in Migrate Extras 6
Implementation of hook_migrate_prepare_node().
File
- ./
content.migrate.inc, line 59 - Hooks for handling CCK fields on destination nodes
Code
function content_migrate_prepare_node(&$node, $tblinfo, $row) {
static $types, $fieldinfo = array();
$errors = array();
if (!isset($types)) {
$types = (array) content_types();
}
if (isset($types[$node->type])) {
$content_type = $types[$node->type];
foreach ($content_type['fields'] as $field) {
$field_name = $field['field_name'];
// Find the column names for this field type and process each.
if (!isset($fieldinfo[$node->type][$field_name])) {
$fieldinfo[$node->type][$field_name] = content_database_info($field);
}
$db_info = $fieldinfo[$node->type][$field_name];
foreach ($db_info['columns'] as $column => $info) {
$dummy_name = $field['field_name'] . '_' . $column;
// Force a node value for missing data.
if (empty($node->{$dummy_name})) {
$values = array();
}
else {
// Explode multiple values to create the $delta and $value for each.
if ($field['multiple']) {
$values = explode($tblinfo->multiple_separator, $node->{$dummy_name});
}
else {
$values = array(
0 => $node->{$dummy_name},
);
}
}
foreach ($values as $delta => $value) {
switch ($field['type']) {
case 'date':
case 'datestamp':
case 'datetime':
// Get properly formatted date for value column.
// Assume timezone and offset values are correct as input.
if ($column == 'value' || $column == 'value2') {
if ($field['type'] == 'date' || $field['type'] == 'datetime') {
// A value like "1957" could be either a Unix timestamp
// or an ISO year-only date... Favor the ISO interpreation
// If the imported date is a (partial) ISO date, convert it
// to date's ISO date.
// TODO: Need to pass granularity for partial dates to work
if (date_is_valid($value, DATE_ISO)) {
$value = date_convert($value, DATE_ISO, DATE_ISO);
}
elseif (is_numeric($value) && date_is_valid($value, DATE_UNIX)) {
$value = date_convert($value, DATE_UNIX, DATE_ISO);
}
else {
$value = date_convert(strtotime($value), DATE_UNIX, DATE_ISO);
}
}
else {
// Is this already a unix timestamp? If not try strototime.
if (!is_numeric($value) || !date_is_valid($value, DATE_UNIX)) {
$value = strtotime($value);
}
}
}
break;
case 'nodereference':
// If $value is numeric use it, otherwise
// find a node title that matches and get nid.
if (intval($value) > 0) {
$value = intval($value);
}
break;
case 'userreference':
// If $value is numeric use it, otherwise
// find a user name that matches and get uid.
if (intval($value) > 0) {
$value = intval($value);
}
else {
if ($account = user_load(array(
'name' => $author['name'],
))) {
$value = $account->uid;
}
}
break;
case 'number_integer':
// Make sure numeric data is brought in as numeric values.
$value = intval($value);
break;
case 'number_decimal':
$value = floatval($value);
break;
}
// Set the correct node field values.
if (isset($field_name) && isset($node->{$field_name}) && is_array($node->{$field_name})) {
if (isset($node->{$field_name}[$delta])) {
$node->{$field_name}[$delta] += array(
$column => $value,
);
}
else {
$node->{$field_name} += array(
$delta => array(
$column => $value,
),
);
}
}
else {
$node->{$field_name} = array(
$delta => array(
$column => $value,
),
);
}
}
}
// Unset the dummy column value.
if (isset($node->{$dummy_name})) {
unset($node->{$dummy_name});
}
}
// Handle defaulting of date "to" from "from"
}
return $errors;
}