### Eclipse Workspace Patch 1.0
#P Date
Index: date_repeat/date_repeat_form.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/date/date_repeat/date_repeat_form.inc,v
retrieving revision 1.15.4.1
diff -u -r1.15.4.1 date_repeat_form.inc
--- date_repeat/date_repeat_form.inc	20 Jun 2008 01:32:43 -0000	1.15.4.1
+++ date_repeat/date_repeat_form.inc	25 Jun 2008 22:51:05 -0000
@@ -56,7 +56,7 @@
   $element['#description'] = t('Choose a frequency and period to repeat this date. If nothing is selected, the date will not repeat.');
   $element['#collapsible'] = TRUE;
   $element['#collapsed'] = !empty($element['#repeat_collapsed']) ? $element['#repeat_collapsed'] : 0;
-  
+
   $element['INTERVAL'] = array(
     '#type' => 'select',
     //'#title' => t('Interval'),
@@ -105,7 +105,7 @@
   if (!empty($merged_values['BYDAY']) || !empty($merged_values['BYMONTH'])) {
     $collapsed = FALSE;
   }
-	// start the advanced fieldset
+    // start the advanced fieldset
   $element['advanced'] = array(
     '#type' => 'fieldset',
     '#title' => t('Advanced'),
@@ -211,11 +211,18 @@
 
   if (is_array($form_values['UNTIL']['datetime']) && array_key_exists('date', $form_values['UNTIL']['datetime'])) {
     $form_values['UNTIL']['datetime'] = $form_values['UNTIL']['datetime']['date'];
+  } elseif(is_array($form_values['UNTIL']['datetime']) && !array_key_exists('date', $form_values['UNTIL']['datetime'])) {
+    // date_api_ical_build_rrule() assumes that the datetime key is a DATE_DATETIME, otherwise it errors
+    // upon form submission with form validation failure, the datetime key is a DATE_ARRAY, but without the date key
+    // so convert to DATE_DATETIME for the situation where date_api_ical_build_rrule() is run on it in _date_repeat_rrule_process()
+    //$form_values['UNTIL']['datetime'] = date_convert($form_values['UNTIL']['datetime'], DATE_ARRAY, DATE_DATETIME);
   }
   if (isset($form_values['EXDATE']) && is_array($form_values['EXDATE'])) {
     foreach ($form_values['EXDATE'] as $delta => $value) {
       if (is_array($value['datetime']) && array_key_exists('date', $value['datetime'])) {
        $form_values['EXDATE'][$delta]['datetime'] = $value['datetime']['date'];
+      } elseif(is_array($value['datetime']) && !array_key_exists('date', $value['datetime']) && isset($value['datetime']['year'])) {
+        $form_values['EXDATE'][$delta]['datetime'] = date_convert($value['datetime'], DATE_ARRAY, DATE_DATETIME);
       }
     }
   }
@@ -228,9 +235,12 @@
 function date_repeat_rrule_validate($element, &$form_state) {
   include_once('./'. drupal_get_path('module', 'date_api') .'/date_api_ical.inc');
   $form_values = $form_state['values'];
-  $field_name = $element['#parents'][0];
-  $item = $form_values[$field_name]['rrule'];
-  $item = date_repeat_merge($item);
+  if($element['#tree']) {
+    foreach($element['#parents'] as $v) {
+        $form_values = $form_values[$v];
+    }
+  }
+  $item = date_repeat_merge($form_values);
   $rrule = date_api_ical_build_rrule($item);
   form_set_value($element, $rrule, $form_state);
 }
