From a08a91e8bbac0b2f12ecff8b6b0429d0d24a9dc7 Mon Sep 17 00:00:00 2001 From: "Bogomil Shopov (Kolab Systems)" Date: Sat, 18 Jun 2011 09:05:48 +0300 Subject: [PATCH 1/3] Updating recurrencies : dayli, weekly --- .../calendar/drivers/kolab/kolab_calendar.php | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index 0b6dbbf6..d50c544f 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -338,12 +338,13 @@ class kolab_calendar ); } - /** + /** * Convert the given event record into a data structure that can be passed to Kolab_Storage backend for saving * (opposite of self::_to_rcube_event()) */ private function _from_rcube_event($event) { + $priority_map = $this->priority_map; $object = array ( @@ -356,7 +357,7 @@ class kolab_calendar 'end-date'=>$event['end'], 'sensitivity'=>$this->sensitivity_map[$event['sensitivity']], 'show-time-as' => $event['free_busy'], - 'priority' => $this->priority_map[$event['priority']] + 'priority' => isset($priority_map[$event['priority']]) ? $priority_map[$event['priority']] : 1 ); @@ -383,9 +384,38 @@ class kolab_calendar $object['alarm'] = $avalue; } } - - + //recurr object/array + $ra = $event['recurrence']; + + //Frequency abd interval + $object['recurrence']['cycle'] = strtolower($ra['FREQ']); + $object['recurrence']['interval'] = intval($ra['INTERVAL']); + + //Range Type + if($ra['UNTIL']){ + $object['recurrence']['range-type']='date'; + $object['recurrence']['range']=$ra['UNTIL']; + } + if($ra['COUNT']){ + $object['recurrence']['range-type']='number'; + $object['recurrence']['range']=$ra['COUNT']; + } + //weekly + + if ($ra['FREQ']=='WEEKLY'){ + $daymap = array('MO'=>'monday','TU'=>'tuesday','WE'=>'wednesday','TH'=>'thursday','FR'=>'friday','SA'=>'saturday','SU'=>'sunday'); + $weekdays = split(",",$ra['BYDAY']); + foreach ($weekdays as $days){ + $weekly[]=$daymap[$days]; + } + + $object['recurrence']['day']=$weekly; + } + + + + return $object; } From dd5e0e7d983c4c0ae6f93c36e820c7f99a063e9a Mon Sep 17 00:00:00 2001 From: "Bogomil Shopov (Kolab Systems)" Date: Sat, 18 Jun 2011 14:39:58 +0300 Subject: [PATCH 2/3] Changing the interface for monthly reccurences + adding functionality to handle it. --- .../calendar/drivers/kolab/kolab_calendar.php | 34 +++++++++++++++++-- plugins/calendar/lib/calendar_ui.php | 19 ++++++++++- plugins/calendar/localization/en_US.inc | 3 ++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index d50c544f..7814e373 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -345,7 +345,8 @@ class kolab_calendar private function _from_rcube_event($event) { $priority_map = $this->priority_map; - + $daymap = array('MO'=>'monday','TU'=>'tuesday','WE'=>'wednesday','TH'=>'thursday','FR'=>'friday','SA'=>'saturday','SU'=>'sunday'); + $object = array ( // kolab => roundcube @@ -404,7 +405,7 @@ class kolab_calendar //weekly if ($ra['FREQ']=='WEEKLY'){ - $daymap = array('MO'=>'monday','TU'=>'tuesday','WE'=>'wednesday','TH'=>'thursday','FR'=>'friday','SA'=>'saturday','SU'=>'sunday'); + $weekdays = split(",",$ra['BYDAY']); foreach ($weekdays as $days){ $weekly[]=$daymap[$days]; @@ -413,8 +414,37 @@ class kolab_calendar $object['recurrence']['day']=$weekly; } + //monthly (temporary hack to follow current Horde logic) + if ($ra['FREQ']=='MONTHLY'){ + + if($ra['BYDAY']=='NaN'){ + + + $object['recurrence']['daynumber']=1; + $object['recurrence']['day']=array(date('L',$event['start'])); + $object['recurrence']['cycle']='monthly'; + $object['recurrence']['type']='weekday'; + + + } + else { + $object['recurrence']['daynumber']=date('j',$event['start']); + $object['recurrence']['cycle']='monthly'; + $object['recurrence']['type']="daynumber"; + } + + } + + //year + if ($ra['FREQ']=='YEARLY'){ + + + } + + //exclusion + $object['recurrence']['type']=array(split(',',$ra['UNTIL'])); return $object; } diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php index 5c091933..0c190d58 100644 --- a/plugins/calendar/lib/calendar_ui.php +++ b/plugins/calendar/lib/calendar_ui.php @@ -341,7 +341,23 @@ class calendar_ui $select = $this->interval_selector(array('name' => 'interval', 'class' => 'edit-recurrence-interval', 'id' => 'edit-recurrence-interval-monthly')); $html = html::div($attrib, html::label(null, $this->calendar->gettext('every')) . $select->show(1) . html::span('label-after', $this->calendar->gettext('months'))); // day of month selection - $checkbox = new html_checkbox(array('name' => 'bymonthday', 'class' => 'edit-recurrence-monthly-bymonthday')); + + //hidden fields to emulate user selection: + $input_bymonthday = new html_hiddenfield(array('name' => 'bymonthday', 'value' => 1)); + $input_byday = new html_hiddenfield(array('name' => 'byday', 'value' => 1)); + $input_bydayp = new html_hiddenfield(array('name' => 'bydayprefix', 'value' => 1)); + + $radio = new html_radiobutton(array('name' => 'repeatmode', 'class' => 'edit-recurrence-monthly-mode')); + $table = new html_table(array('cols' => 2, 'border' => 0, 'cellpadding' => 0, 'class' => 'formtable')); + $table->add('label', html::label(null, $radio->show('', array('value' => 'BYDAY')) . ' ' . $this->calendar->gettext('on_the_same_weekday'))); + $table->add('label', html::label(null, $radio->show('', array('value' => 'BYMONTHDAY')) . ' ' . $this->calendar->gettext('on_the_same_date'))); + $html .= $input_byday->show(); + $html .= $input_bymonthday->show(); + $html .= $input_bydayp->show(); + $html .= html::div($attrib, $table->show()); + + /* + $checkbox = new html_radiobutton(array('name' => 'bymonthday', 'class' => 'edit-recurrence-monthly-bymonthday')); for ($monthdays = '', $d = 1; $d <= 31; $d++) { $monthdays .= html::label(array('class' => 'monthday'), $checkbox->show('', array('value' => $d)) . $d); $monthdays .= $d % 7 ? ' ' : html::br(); @@ -356,6 +372,7 @@ class calendar_ui $table->add(null, $this->rrule_selectors($attrib['part'])); $html .= html::div($attrib, $table->show()); + */ break; // annually recurrence form diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc index c5b1c13c..72e3c5b4 100644 --- a/plugins/calendar/localization/en_US.inc +++ b/plugins/calendar/localization/en_US.inc @@ -58,6 +58,9 @@ $labels['prev_month'] = 'Previous month'; $labels['next_year'] = 'Next year'; $labels['next_month'] = 'Next month'; $labels['choose_date'] = 'Choose date'; +$labels['on_the_same_date'] = 'on the same date'; +$labels['on_the_same_weekday'] = 'on the same weekday'; + // alarm/reminder settings $labels['alarmemail'] = 'Send E-mail'; From f72d82f7098a96d866931d2a08ea54a2799e7e32 Mon Sep 17 00:00:00 2001 From: "Bogomil Shopov (Kolab Systems)" Date: Sat, 18 Jun 2011 17:19:01 +0300 Subject: [PATCH 3/3] Final version of reccurence and some minor changes. --- .../calendar/drivers/kolab/kolab_calendar.php | 94 ++++++++++--------- plugins/calendar/lib/calendar_ui.php | 2 +- 2 files changed, 51 insertions(+), 45 deletions(-) diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index 7814e373..d9a78201 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -120,6 +120,7 @@ class kolab_calendar $events = array(); foreach ($this->events as $id => $event) { // TODO: filter events by search query + if (!empty($search)) { } @@ -347,6 +348,7 @@ class kolab_calendar $priority_map = $this->priority_map; $daymap = array('MO'=>'monday','TU'=>'tuesday','WE'=>'wednesday','TH'=>'thursday','FR'=>'friday','SA'=>'saturday','SU'=>'sunday'); + $object = array ( // kolab => roundcube @@ -387,65 +389,69 @@ class kolab_calendar } //recurr object/array - $ra = $event['recurrence']; - - //Frequency abd interval - $object['recurrence']['cycle'] = strtolower($ra['FREQ']); - $object['recurrence']['interval'] = intval($ra['INTERVAL']); - - //Range Type - if($ra['UNTIL']){ - $object['recurrence']['range-type']='date'; - $object['recurrence']['range']=$ra['UNTIL']; - } - if($ra['COUNT']){ - $object['recurrence']['range-type']='number'; - $object['recurrence']['range']=$ra['COUNT']; - } - //weekly - - if ($ra['FREQ']=='WEEKLY'){ + if (count($event['recurrence'])>1){ - $weekdays = split(",",$ra['BYDAY']); - foreach ($weekdays as $days){ - $weekly[]=$daymap[$days]; + $ra = $event['recurrence']; + + //Frequency abd interval + $object['recurrence']['cycle'] = strtolower($ra['FREQ']); + $object['recurrence']['interval'] = intval($ra['INTERVAL']); + + //Range Type + if($ra['UNTIL']){ + $object['recurrence']['range-type']='date'; + $object['recurrence']['range']=$ra['UNTIL']; } - - $object['recurrence']['day']=$weekly; + if($ra['COUNT']){ + $object['recurrence']['range-type']='number'; + $object['recurrence']['range']=$ra['COUNT']; } - - //monthly (temporary hack to follow current Horde logic) - if ($ra['FREQ']=='MONTHLY'){ + //weekly - if($ra['BYDAY']=='NaN'){ - - - $object['recurrence']['daynumber']=1; - $object['recurrence']['day']=array(date('L',$event['start'])); - $object['recurrence']['cycle']='monthly'; - $object['recurrence']['type']='weekday'; - - - } - else { - $object['recurrence']['daynumber']=date('j',$event['start']); - $object['recurrence']['cycle']='monthly'; - $object['recurrence']['type']="daynumber"; + if ($ra['FREQ']=='WEEKLY'){ + + $weekdays = split(",",$ra['BYDAY']); + foreach ($weekdays as $days){ + $weekly[]=$daymap[$days]; + } + + $object['recurrence']['day']=$weekly; } + //monthly (temporary hack to follow current Horde logic) + if ($ra['FREQ']=='MONTHLY'){ + + if($ra['BYDAY']=='NaN'){ + + + $object['recurrence']['daynumber']=1; + $object['recurrence']['day']=array(date('L',$event['start'])); + $object['recurrence']['cycle']='monthly'; + $object['recurrence']['type']='weekday'; + + + } + else { + $object['recurrence']['daynumber']=date('j',$event['start']); + $object['recurrence']['cycle']='monthly'; + $object['recurrence']['type']="daynumber"; + } + } //year - if ($ra['FREQ']=='YEARLY'){ - - - } + //exclusion $object['recurrence']['type']=array(split(',',$ra['UNTIL'])); + } + //whole dday event + if($event['allday']==1) + $object['_is_all_day']=1; + return $object; } diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php index 0c190d58..9bf831ac 100644 --- a/plugins/calendar/lib/calendar_ui.php +++ b/plugins/calendar/lib/calendar_ui.php @@ -311,7 +311,7 @@ class calendar_ui $select->add($this->calendar->gettext('daily'), 'DAILY'); $select->add($this->calendar->gettext('weekly'), 'WEEKLY'); $select->add($this->calendar->gettext('monthly'), 'MONTHLY'); - $select->add($this->calendar->gettext('yearly'), 'YEARLY'); + // $select->add($this->calendar->gettext('yearly'), 'YEARLY'); $html = html::label('edit-frequency', $this->calendar->gettext('frequency')) . $select->show(''); break;