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' => '