$fieldinfo) { foreach ($fieldinfo['columns'] as $colname => $colinfo) { $cck_fieldname = node_import_cck_name($fieldname, $colname); $fields[$cck_fieldname] = node_import_cck_field_defaults($fieldinfo); switch ($colname) { case 'value': $fields[$cck_fieldname]['title'] = $fieldinfo['widget']['label']; $fields[$cck_fieldname]['input_format'] = 'date'; $fields[$cck_fieldname]['date_format'] = $fieldinfo['widget']['type'] == 'date_select' ? DATE_ARRAY : DATE_ISO; $fields[$cck_fieldname]['output_format'] = DATE_ISO; $fields[$cck_fieldname]['map_required'] = $fieldinfo['required']; break; case 'value2': $fields[$cck_fieldname]['title'] = $fieldinfo['widget']['label'] .' - '. t('To date'); $fields[$cck_fieldname]['input_format'] = 'date'; $fields[$cck_fieldname]['date_format'] = $fieldinfo['widget']['type'] == 'date_select' ? DATE_ARRAY : DATE_ISO; $fields[$cck_fieldname]['output_format'] = DATE_ISO; $fields[$cck_fieldname]['map_required'] = $fieldinfo['required'] && ($fieldinfo['todate'] == 'required'); break; default: $fields[$cck_fieldname]['title'] = t('Unsupported: ') . $fieldinfo['widget']['label'] .' - '. $colname; break; } } } return $fields; } /** * Implementation of hook_node_import_values_alter(). */ function date_node_import_values_alter(&$values, $type, $defaults, $options, $fields, $preview) { foreach (node_import_cck_fields($type, 'date') as $fieldname => $fieldinfo) { switch ($fieldinfo['widget']['type']) { // Select List default: case 'date_select': date_node_import_values_alter_date_select(&$values, $fields, $fieldname, $fieldinfo); break; // Text Field with custom input format case 'date_text': date_node_import_values_alter_date_text(&$values, $fields, $fieldname, $fieldinfo); break; // Text Field with Date Pop-up calendar case 'date_popup': date_node_import_values_alter_date_popup(&$values, $fields, $fieldname, $fieldinfo); break; } } } function date_node_import_values_alter_date_text(&$values, $fields, $fieldname, $fieldinfo) { foreach ($fieldinfo['columns'] as $colname => $colinfo) { $cck_fieldname = node_import_cck_name($fieldname, $colname); foreach ($values[$fieldname] as $i => $value) { // Get the format that is expected from the pop-up calendar. $widgetFormat = $fieldinfo['widget']['input_format']; // Remove parts that are not valid for the selected granularity $widgetFormat = date_limit_format($widgetFormat, $fieldinfo['granularity']); // Get the original value format we need to convert $time = strtotime($value[$colname]); /* $colname is 'value' in most cases. * We trash the original 'value' field and replace it with an array containing the various pieces entered * from the 'pop-up calendar'. */ $values[$fieldname][$i][$colname] = array(); $values[$fieldname][$i][$colname]['date'] = date($widgetFormat, $time); } } } function date_node_import_values_alter_date_popup(&$values, $fields, $fieldname, $fieldinfo) { foreach ($fieldinfo['columns'] as $colname => $colinfo) { $cck_fieldname = node_import_cck_name($fieldname, $colname); foreach ($values[$fieldname] as $i => $value) { // Get the format that is expected from the pop-up calendar. $widgetFormat = $fieldinfo['widget']['input_format']; // Remove parts that are not valid for the selected granularity $widgetFormat = date_limit_format($widgetFormat, $fieldinfo['granularity']); // Separate the widget format into a date part and a time part $widgetFormatPieces = explode(' - ', $widgetFormat, 2); $dateFormat = $widgetFormatPieces[0]; $timeFormat = $widgetFormatPieces[1]; // Get the original value format we need to convert $time = strtotime($value[$colname]); /* $colname is 'value' in most cases. * We trash the original 'value' field and replace it with an array containing the various pieces entered * from the 'pop-up calendar'. */ $values[$fieldname][$i][$colname] = array(); $values[$fieldname][$i][$colname]['date'] = date($dateFormat, $time); $values[$fieldname][$i][$colname]['time'] = date($timeFormat, $time); } } } function date_node_import_values_alter_date_select(&$values, $fields, $fieldname, $fieldinfo) { foreach ($fieldinfo['columns'] as $colname => $colinfo) { $cck_fieldname = node_import_cck_name($fieldname, $colname); foreach ($values[$fieldname] as $i => $value) { // TODO: Take into account granularity! $values[$fieldname][$i][$colname] = date_convert( $value[$colname], $fields[$cck_fieldname]['output_format'], $fields[$cck_fieldname]['date_format']); // Strangely, hours don't appear to be padded the same way for 12-hour... // $values[$fieldname][$i][$colname]['hour'] = str_pad( // $values[$fieldname][$i][$colname]['hour'], // 2, // "0", // STR_PAD_LEFT); $values[$fieldname][$i][$colname]['minute'] = str_pad( $values[$fieldname][$i][$colname]['minute'], 2, "0", STR_PAD_LEFT); $values[$fieldname][$i][$colname]['second'] = str_pad( $values[$fieldname][$i][$colname]['second'], 2, "0", STR_PAD_LEFT); } } }