diff --git a/date_api/date_api_ical.inc b/date_api/date_api_ical.inc index 4911298..b8af232 100644 --- a/date_api/date_api_ical.inc +++ b/date_api/date_api_ical.inc @@ -702,8 +702,10 @@ function date_api_ical_build_rrule($form_values) { } // Grab the RRULE data and put them into iCal RRULE format. - $rrule .= 'RRULE:FREQ=' . (!array_key_exists('FREQ', $form_values) ? 'DAILY' : $form_values['FREQ']); - $rrule .= ';INTERVAL=' . (!array_key_exists('INTERVAL', $form_values) ? 1 : $form_values['INTERVAL']); + if (array_key_exists('FREQ', $form_values) && $form_values['FREQ'] != 'NONE') { + $rrule .= 'RRULE:FREQ=' . (!array_key_exists('FREQ', $form_values) ? 'DAILY' : $form_values['FREQ']); + $rrule .= ';INTERVAL=' . (!array_key_exists('INTERVAL', $form_values) ? 1 : $form_values['INTERVAL']); + } // Unset the empty 'All' values. if (array_key_exists('BYDAY', $form_values) && is_array($form_values['BYDAY'])) { @@ -786,10 +788,12 @@ function date_api_ical_build_rrule($form_values) { if (!empty($ex_dates)) { sort($ex_dates); $rrule .= chr(13) . chr(10) . 'EXDATE:' . implode(',', $ex_dates); + // RDATE ONLY SUPPORT: RRULE could by empty, and no \r\n is needed + $rrule .= (!empty($rrule) ? chr(13) . chr(10) : '') . 'RDATE:' . implode(',', $ex_dates); } } elseif (!empty($form_values['EXDATE'])) { - $rrule .= chr(13) . chr(10) . 'EXDATE:' . $form_values['EXDATE']; + $rrule .= (!empty($rrule) ? chr(13) . chr(10) : '') . 'EXDATE:' . $form_values['EXDATE']; } // Exceptions dates go last, on their own line. diff --git a/date_repeat/date_repeat.module b/date_repeat/date_repeat.module index 61d971b..53b80dd 100644 --- a/date_repeat/date_repeat.module +++ b/date_repeat/date_repeat.module @@ -54,6 +54,7 @@ function date_repeat_freq_options() { 'WEEKLY' => t('Weekly', array(), array('context' => 'datetime_singular')), 'MONTHLY' => t('Monthly', array(), array('context' => 'datetime_singular')), 'YEARLY' => t('Yearly', array(), array('context' => 'datetime_singular')), + 'NONE' => t('None (only included dates)', array(), array('context' => 'datetime_singular')), ); } diff --git a/date_repeat/date_repeat_calc.inc b/date_repeat/date_repeat_calc.inc index d840df6..5bb1183 100644 --- a/date_repeat/date_repeat_calc.inc +++ b/date_repeat/date_repeat_calc.inc @@ -46,7 +46,7 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi $rrule = date_ical_parse_rrule('RRULE:', $rrule); // These default values indicate there is no RRULE here. - if ($rrule['FREQ'] == 'NONE' || (isset($rrule['INTERVAL']) && $rrule['INTERVAL'] == 0)) { + if (empty($additions) && $rrule['FREQ'] == 'NONE' || (isset($rrule['INTERVAL']) && $rrule['INTERVAL'] == 0)) { return array(); } diff --git a/date_repeat/date_repeat_form.inc b/date_repeat/date_repeat_form.inc index 76023d7..0fc438f 100644 --- a/date_repeat/date_repeat_form.inc +++ b/date_repeat/date_repeat_form.inc @@ -85,7 +85,7 @@ function _date_repeat_rrule_process($element, &$form_state, $form) { $element['FREQ'] = array( '#type' => 'select', '#title' => t('Repeats', array(), array('context' => 'Date repeat')), - '#default_value' => !empty($rrule['FREQ']) ? $rrule['FREQ'] : 'WEEKLY', + '#default_value' => !empty($rrule['FREQ']) ? $rrule['FREQ'] : (empty($additions) ? 'WEEKLY' : 'NONE'), '#options' => date_repeat_freq_options(), '#prefix' => '
', '#suffix' => '
', @@ -646,6 +646,9 @@ function _date_repeat_rrule_process($element, &$form_state, $form) { 'invisible' => array( ":input[name=\"{$element['#name']}[FREQ]\"]" => array('value' => 'NONE'), ), + 'checked' => array( + ":input[name=\"{$element['#name']}[FREQ]\"]" => array('value' => 'NONE'), + ) ), '#default_value' => empty($form_state['num_additions'][$instance]) ? 0 : 1, ); @@ -886,7 +889,10 @@ function date_repeat_merge($form_values, $element) { unset($form_values['monthly']); unset($form_values['yearly']); - if (array_key_exists('range_of_repeat', $form_values)) { + if (array_key_exists('FREQ', $form_values) && $form_values['FREQ'] == "NONE" && array_key_exists('range_of_repeat', $form_values)) { + $form_values['range_of_repeat'] = 'NONE'; + } + else if (array_key_exists('range_of_repeat', $form_values)) { switch ($form_values['range_of_repeat']) { case 'COUNT': $form_values['COUNT'] = $form_values['count_child']; @@ -975,7 +981,7 @@ function date_repeat_rrule_validate($element, &$form_state) { $parents = $element['#parents']; array_pop($parents); $field_values = drupal_array_get_nested_value($form_state['values'], $parents); - if ($field_values['show_repeat_settings'] === 0 || $field_values['rrule']['FREQ'] === 'NONE') { + if ($field_values['show_repeat_settings'] === 0) { form_set_value($element, NULL, $form_state); return; } diff --git a/date_repeat_field/date_repeat_field.module b/date_repeat_field/date_repeat_field.module index d4d4c90..bd21524 100644 --- a/date_repeat_field/date_repeat_field.module +++ b/date_repeat_field/date_repeat_field.module @@ -336,7 +336,7 @@ function date_repeat_field_widget_validate($element, &$form_state) { $rrule_values = date_repeat_merge($input['rrule'], $element['rrule']); // If no repeat information was set, treat this as a normal, non-repeating value. - if ($rrule_values['FREQ'] == 'NONE' || empty($input['show_repeat_settings'])) { + if (empty($input['show_repeat_settings'])) { $item['rrule'] = NULL; form_set_value($element, $item, $form_state); return; @@ -475,7 +475,7 @@ function date_repeat_build_dates($rrule = NULL, $rrule_values = NULL, $field, $i } else { // No UNTIL and no COUNT? - return array(); + $end_datetime = $start_datetime; } // Split the RRULE into RRULE, EXDATE, and RDATE parts.