date.inc in Node import 6
Support file for the CCK Date module.
File
supported/date/date.incView source
<?php
/**
* @file
* Support file for the CCK Date module.
*/
/**
* Implementation of hook_node_import_fields().
*/
function date_node_import_fields($type) {
$fields = array();
foreach (node_import_cck_fields($type, 'date') as $fieldname => $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.
// If a custom format was entered, use it instead.
if ($fieldinfo['widget']['input_format_custom']) {
$widgetFormat = $fieldinfo['widget']['input_format_custom'];
}
else {
$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();
if ($time == FALSE) {
$values[$fieldname][$i][$colname]['date'] = $value[$colname];
}
else {
$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.
// If a custom format was entered, use it instead.
if ($fieldinfo['widget']['input_format_custom']) {
$widgetFormat = $fieldinfo['widget']['input_format_custom'];
}
else {
$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();
if ($time == FALSE) {
$values[$fieldname][$i][$colname]['date'] = '';
}
else {
$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);
}
}
}
}
Functions
Name | Description |
---|---|
date_node_import_fields | Implementation of hook_node_import_fields(). |
date_node_import_values_alter | Implementation of hook_node_import_values_alter(). |
date_node_import_values_alter_date_popup | |
date_node_import_values_alter_date_select | |
date_node_import_values_alter_date_text |