--- olld/date.inc Fri Nov 27 11:22:40 2009 +++ date.inc Fri Nov 27 11:12:30 2009 @@ -13,24 +13,41 @@ */ function date_feeds_node_processor_targets_alter(&$targets, $content_type) { $info = content_types($content_type); + + // Here we are being asked to list sub fields we would like to map to. + $sub_fields = array(); + $sub_fields['ical'] = 'iCal VEVENT'; + $sub_fields['start_date'] = 'Start Date (date only)'; + $sub_fields['start_time'] = 'Start Time (time only)'; + $sub_fields['start_datetime'] = 'Start Date (date and time)'; + $sub_fields['start_stamp'] = 'Start Date (timestamp)'; + $sub_fields['end_date'] = 'End Date (date only)'; + $sub_fields['end_time'] = 'End Time (time only)'; + $sub_fields['end_datetime'] = 'End Date (date and time)'; + $sub_fields['end_stamp'] = 'End Date (timestamp)'; + $sub_fields['all_day'] = 'All Day'; + $sub_fields['timezone'] = 'Timezone'; // The $info['fields'] holds CCK fields such as date and links. if (isset($info['fields']) && count($info['fields'])) { foreach ($info['fields'] as $field_name => $field) { // Check to see if the field type is a date (CCK). - if ($field['type'] == 'date') { + //There are 3 type of date fields: date, datetime and datestamp (deprecated but used to support legacy data). + if (in_array($field['type'], array('date', 'datestamp', 'datetime'))) { // Set the name for the source label to be the label of the field or the field name if no label exists $name = isset($field['widget']['label']) ? $field['widget']['label'] : $field_name; - - //Sets the targets to map - $targets[$field_name.'#date'] = array( - 'name' => $name . ' (' . t('date').')', - 'callback' => 'date_feeds_set_target', - 'description' => t('The Date for the CCK !name field of the node.', array('!name' => $name)), - ); + foreach ($sub_fields as $sub_field => $f) { + + //Sets the targets to map + $targets[$field_name.'#'.$sub_field] = array( + 'name' => $name . ' (' . $sub_field .')', + 'callback' => 'date_feeds_set_target', + 'description' => t('The '.$f.' for the !name field of the node.', array('!name' => $name)), + ); + } } } } @@ -46,22 +63,53 @@ * In plain English, maps the source elemnts to the target. */ function date_feeds_set_target(&$node, $target, $values) { - //For argument sake, $target = field_date#date + //Check to see if we are actuall passed any values to map, if not just return. + if (empty($values)) { + return; + } //Seperate out component parts. $field_name should be set to field_date, $sub_field to date. list($field_name, $sub_field) = split('#', $target); - + //Set $field to $node->field_date OR a blank array... $field = isset($node->$field_name) ? $node->$field_name : array(); + switch ($sub_field) { + case 'ical': + //TODO: Port code from 'FeedAPI' module - Function feedapi_mapper_date_ical($node, $field, $feed_element); + return; + + case 'start_datetime': + case 'end_datetime': + //TODO: Port code from 'FeedAPI' module - Function feedapi_mapper_date_datetime($node, $field, $feed_element, $sub_field); + return; + + case 'start_stamp': + case 'end_stamp': + //TODO: Port code from 'FeedAPI' module - Function feedapi_mapper_date_stamp($node, $field, $feed_element, $sub_field); + return; + + default: + /** + * Includes: + * start_date + * start_time + * end_date + * end_time + * all_day + * timezone + */ + //TODO: Port code from 'FeedAPI' module - Function feedapi_mapper_date_part($node, $field, $feed_element, $sub_field); + return; + } + // Handle multiple value fields. - if (is_array($values)) { + /*if (is_array($values)) { $field[0]['value'] = $values['DATE']['DTSTART']['datetime']; $field[0]['value2'] = $values['DATE']['DTEND']['datetime']; } else { $field[0]['value'] = $values; } - - $node->$field_name = $field; + $node->$field_name = $field;*/ }