<?php
// $Id: date.inc,v 1.1.2.3 2009/04/14 06:32:03 robrechtj Exp $
/**
* @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) {
foreach ($fieldinfo['columns'] as $colname => $colinfo) {
$cck_fieldname = node_import_cck_name($fieldname, $colname);
foreach ($values[$fieldname] as $i => $value) {
/* Get array from (converted) date from file
NB array includes the timestamp value */
$date_in = $value[$colname];
$date_array = date_convert($date_in, DATE_ISO, DATE_ARRAY);
$timestamp = $date_array[0];
/*Determine format req'd by CCK date widget */
$format = $fieldinfo['widget']['input_format'];
if ($format == 'custom') $format = $fieldinfo['widget']['input_format_custom'];
/* Store values in form expected by widget validate functions */
switch ($fieldinfo['widget']['type']) {
case 'date_pop_up':
case 'date_pop_up_repeat':
$time_format = date_limit_format($format, array('hour', 'minute', 'second'));
$date_format = date_limit_format($format, array('year', 'month', 'day'));
$date = date($date_format,$timestamp);
$time = date($time_format,$timestamp);
$values[$fieldname][$i][$colname] = array('date'=>$date,'time'=>$time);
break;
case 'date_text':
$date = date($format,$timestamp);
$values[$fieldname][$i][$colname] = array('date'=>$date);
break;
case 'date_select':
case 'date_select_repeat':
$values[$fieldname][$i][$colname] = $date_array;
break;
}
}
}
}
}
/**
* @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'] = '';
}
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);
}
}
}
}