$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) { // Provide default value if the field has no values. if (count($values[$fieldname]) == 0) { $values[$fieldname] = array(); $values[$fieldname][0] = array(); $values[$fieldname][0][$colname] = array ( 'date' => null ); } else { 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) { // Provide default value if the field has no values. if (count($values[$fieldname]) == 0) { $values[$fieldname] = array(); $values[$fieldname][0] = array(); $values[$fieldname][0][$colname] = array ( 'date' => null, 'time' => null ); } else { foreach ($values[$fieldname] as $i => $value) { //Timezone is handled separately - just wrap in an array('timezone' => $timezone) if ($colname == 'timezone') { $values[$fieldname][$i]['timezone'] = array('timezone' => $values[$fieldname][$i]['timezone']); continue; } // 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 equal to '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); // AM/PM are case sensitive... $values[$fieldname][$i][$colname]['time'] = strtoupper(date($timeFormat, $time)); } } } } function date_node_import_values_alter_date_select(&$values, $fields, $fieldname, $fieldinfo) { foreach ($fieldinfo['columns'] as $colname => $colinfo) { // Provide default value if the field has no values. if (count($values[$fieldname]) == 0) { $values[$fieldname] = array(); $values[$fieldname][0] = array(); $values[$fieldname][0][$colname] = array ( 'year' => null, 'hour' => 0, 'minute' => 0, 'second' => 0, 'month' => null, 'day' => null ); } else { $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); } } } }