Codestyle matters!
Fix saving of recurrence exclusions
This commit is contained in:
parent
76c451059d
commit
507712e533
1 changed files with 140 additions and 159 deletions
|
@ -207,7 +207,6 @@ class kolab_calendar
|
||||||
|
|
||||||
// resolve recurring events (maybe move to _fetch_events() for general use?)
|
// resolve recurring events (maybe move to _fetch_events() for general use?)
|
||||||
if ($event['recurrence']) {
|
if ($event['recurrence']) {
|
||||||
|
|
||||||
$recurrence = new Horde_Date_Recurrence($event['start']);
|
$recurrence = new Horde_Date_Recurrence($event['start']);
|
||||||
$recurrence->fromRRule20(calendar::to_rrule($event['recurrence']));
|
$recurrence->fromRRule20(calendar::to_rrule($event['recurrence']));
|
||||||
|
|
||||||
|
@ -216,6 +215,7 @@ class kolab_calendar
|
||||||
|
|
||||||
$duration = $event['end'] - $event['start'];
|
$duration = $event['end'] - $event['start'];
|
||||||
$next = new Horde_Date($event['start']);
|
$next = new Horde_Date($event['start']);
|
||||||
|
$i = 1;
|
||||||
while ($next = $recurrence->nextActiveRecurrence(array('year' => $next->year, 'month' => $next->month, 'mday' => $next->mday + 1, 'hour' => $next->hour, 'min' => $next->min, 'sec' => $next->sec))) {
|
while ($next = $recurrence->nextActiveRecurrence(array('year' => $next->year, 'month' => $next->month, 'mday' => $next->mday + 1, 'hour' => $next->hour, 'min' => $next->min, 'sec' => $next->sec))) {
|
||||||
$rec_start = $next->timestamp();
|
$rec_start = $next->timestamp();
|
||||||
$rec_end = $rec_start + $duration;
|
$rec_end = $rec_start + $duration;
|
||||||
|
@ -223,6 +223,7 @@ class kolab_calendar
|
||||||
// add to output if in range
|
// add to output if in range
|
||||||
if ($rec_start <= $end && $rec_end >= $start) {
|
if ($rec_start <= $end && $rec_end >= $start) {
|
||||||
$rec_event = $event;
|
$rec_event = $event;
|
||||||
|
$rec_event['id'] .= '-' . $i++;
|
||||||
$rec_event['recurrence_id'] = $event['id'];
|
$rec_event['recurrence_id'] = $event['id'];
|
||||||
$rec_event['start'] = $rec_start;
|
$rec_event['start'] = $rec_start;
|
||||||
$rec_event['end'] = $rec_end;
|
$rec_event['end'] = $rec_end;
|
||||||
|
@ -252,12 +253,17 @@ class kolab_calendar
|
||||||
|
|
||||||
//generate new event from RC input
|
//generate new event from RC input
|
||||||
$object = $this->_from_rcube_event($event);
|
$object = $this->_from_rcube_event($event);
|
||||||
|
|
||||||
//generate new UID
|
|
||||||
$object['uid'] = $this->storage->generateUID();
|
|
||||||
|
|
||||||
$saved = $this->storage->save($object);
|
$saved = $this->storage->save($object);
|
||||||
|
|
||||||
|
if (PEAR::isError($saved)) {
|
||||||
|
raise_error(array(
|
||||||
|
'code' => 600, 'type' => 'php',
|
||||||
|
'file' => __FILE__, 'line' => __LINE__,
|
||||||
|
'message' => "Error saving event object to Kolab server:" . $saved->getMessage()),
|
||||||
|
true, false);
|
||||||
|
$saved = false;
|
||||||
|
}
|
||||||
|
|
||||||
return $saved;
|
return $saved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,7 +284,7 @@ class kolab_calendar
|
||||||
raise_error(array(
|
raise_error(array(
|
||||||
'code' => 600, 'type' => 'php',
|
'code' => 600, 'type' => 'php',
|
||||||
'file' => __FILE__, 'line' => __LINE__,
|
'file' => __FILE__, 'line' => __LINE__,
|
||||||
'message' => "Error saving contact object to Kolab server:" . $saved->getMessage()),
|
'message' => "Error saving event object to Kolab server:" . $saved->getMessage()),
|
||||||
true, false);
|
true, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -294,17 +300,15 @@ class kolab_calendar
|
||||||
* @see Driver:remove_event()
|
* @see Driver:remove_event()
|
||||||
* @return boolean True on success, False on error
|
* @return boolean True on success, False on error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function delete_event($event)
|
public function delete_event($event)
|
||||||
{
|
{
|
||||||
|
|
||||||
$deleted = false;
|
$deleted = false;
|
||||||
$deleteme = $this->storage->delete($event['id']);
|
$deleteme = $this->storage->delete($event['id']);
|
||||||
if (PEAR::isError($deleteme)) {
|
if (PEAR::isError($deleteme)) {
|
||||||
raise_error(array(
|
raise_error(array(
|
||||||
'code' => 600, 'type' => 'php',
|
'code' => 600, 'type' => 'php',
|
||||||
'file' => __FILE__, 'line' => __LINE__,
|
'file' => __FILE__, 'line' => __LINE__,
|
||||||
'message' => "Error saving contact object to Kolab server:" . $deleteme->getMessage()),
|
'message' => "Error deleting event object from Kolab server:" . $deleteme->getMessage()),
|
||||||
true, false);
|
true, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -390,7 +394,7 @@ class kolab_calendar
|
||||||
|
|
||||||
if ($recurrence['exclusion']) {
|
if ($recurrence['exclusion']) {
|
||||||
foreach ((array)$recurrence['exclusion'] as $excl)
|
foreach ((array)$recurrence['exclusion'] as $excl)
|
||||||
$rrule['EXDATE'][] = strtotime($excl);
|
$rrule['EXDATE'][] = strtotime($excl) - $this->cal->timezone * 3600 - date('Z'); // shift to user's timezone
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,7 +429,6 @@ class kolab_calendar
|
||||||
$priority_map = $this->priority_map;
|
$priority_map = $this->priority_map;
|
||||||
$daymap = array('MO'=>'monday','TU'=>'tuesday','WE'=>'wednesday','TH'=>'thursday','FR'=>'friday','SA'=>'saturday','SU'=>'sunday');
|
$daymap = array('MO'=>'monday','TU'=>'tuesday','WE'=>'wednesday','TH'=>'thursday','FR'=>'friday','SA'=>'saturday','SU'=>'sunday');
|
||||||
|
|
||||||
|
|
||||||
$object = array(
|
$object = array(
|
||||||
// kolab => roundcube
|
// kolab => roundcube
|
||||||
'summary' => $event['title'],
|
'summary' => $event['title'],
|
||||||
|
@ -436,37 +439,28 @@ class kolab_calendar
|
||||||
'end-date' => $event['end'],
|
'end-date' => $event['end'],
|
||||||
'sensitivity' =>$this->sensitivity_map[$event['sensitivity']],
|
'sensitivity' =>$this->sensitivity_map[$event['sensitivity']],
|
||||||
'show-time-as' => $event['free_busy'],
|
'show-time-as' => $event['free_busy'],
|
||||||
'priority' => isset($priority_map[$event['priority']]) ? $priority_map[$event['priority']] : 1
|
'priority' => isset($priority_map[$event['priority']]) ? $priority_map[$event['priority']] : 1,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
//handle alarms
|
//handle alarms
|
||||||
if ($event['alarms']) {
|
if ($event['alarms']) {
|
||||||
|
|
||||||
//get the value
|
//get the value
|
||||||
$alarmbase = explode(":", $event['alarms']);
|
$alarmbase = explode(":", $event['alarms']);
|
||||||
|
|
||||||
//get number only
|
//get number only
|
||||||
$avalue = preg_replace('/[^0-9]/', '', $alarmbase[0]);
|
$avalue = preg_replace('/[^0-9]/', '', $alarmbase[0]);
|
||||||
|
|
||||||
if(preg_match("/H/",$alarmbase[0]))
|
if (preg_match("/H/",$alarmbase[0])) {
|
||||||
{
|
|
||||||
$object['alarm'] = $avalue*60;
|
$object['alarm'] = $avalue*60;
|
||||||
|
} else if (preg_match("/D/",$alarmbase[0])) {
|
||||||
}else if (preg_match("/D/",$alarmbase[0]))
|
|
||||||
{
|
|
||||||
$object['alarm'] = $avalue*24*60;
|
$object['alarm'] = $avalue*24*60;
|
||||||
|
} else {
|
||||||
}else
|
|
||||||
{
|
|
||||||
//minutes
|
|
||||||
$object['alarm'] = $avalue;
|
$object['alarm'] = $avalue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//recurr object/array
|
//recurr object/array
|
||||||
if (count($event['recurrence']) > 1) {
|
if (count($event['recurrence']) > 1) {
|
||||||
|
|
||||||
$ra = $event['recurrence'];
|
$ra = $event['recurrence'];
|
||||||
|
|
||||||
//Frequency abd interval
|
//Frequency abd interval
|
||||||
|
@ -482,10 +476,9 @@ class kolab_calendar
|
||||||
$object['recurrence']['range-type'] = 'number';
|
$object['recurrence']['range-type'] = 'number';
|
||||||
$object['recurrence']['range'] = $ra['COUNT'];
|
$object['recurrence']['range'] = $ra['COUNT'];
|
||||||
}
|
}
|
||||||
|
|
||||||
//weekly
|
//weekly
|
||||||
|
|
||||||
if ($ra['FREQ']=='WEEKLY') {
|
if ($ra['FREQ']=='WEEKLY') {
|
||||||
|
|
||||||
$weekdays = split(",", $ra['BYDAY']);
|
$weekdays = split(",", $ra['BYDAY']);
|
||||||
foreach ($weekdays as $days) {
|
foreach ($weekdays as $days) {
|
||||||
$weekly[] = $daymap[$days];
|
$weekly[] = $daymap[$days];
|
||||||
|
@ -496,33 +489,23 @@ class kolab_calendar
|
||||||
|
|
||||||
//monthly (temporary hack to follow current Horde logic)
|
//monthly (temporary hack to follow current Horde logic)
|
||||||
if ($ra['FREQ']=='MONTHLY') {
|
if ($ra['FREQ']=='MONTHLY') {
|
||||||
|
|
||||||
if ($ra['BYDAY'] == 'NaN') {
|
if ($ra['BYDAY'] == 'NaN') {
|
||||||
|
|
||||||
|
|
||||||
$object['recurrence']['daynumber']=1;
|
$object['recurrence']['daynumber']=1;
|
||||||
$object['recurrence']['day'] = array(date('L', $event['start']));
|
$object['recurrence']['day'] = array(date('L', $event['start']));
|
||||||
$object['recurrence']['cycle'] = 'monthly';
|
$object['recurrence']['cycle'] = 'monthly';
|
||||||
$object['recurrence']['type'] = 'weekday';
|
$object['recurrence']['type'] = 'weekday';
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$object['recurrence']['daynumber'] = date('j', $event['start']);
|
$object['recurrence']['daynumber'] = date('j', $event['start']);
|
||||||
$object['recurrence']['cycle'] = 'monthly';
|
$object['recurrence']['cycle'] = 'monthly';
|
||||||
$object['recurrence']['type']="daynumber";
|
$object['recurrence']['type'] = 'daynumber';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
//year ???
|
||||||
|
|
||||||
//year
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//exclusion
|
|
||||||
$object['recurrence']['type']=array(split(',',$ra['UNTIL']));
|
|
||||||
|
|
||||||
|
//exclusions
|
||||||
|
$object['recurrence']['exclusion'] = (array)$ra['EXDATE'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// whole day event
|
// whole day event
|
||||||
|
@ -533,10 +516,8 @@ class kolab_calendar
|
||||||
$object['_is_all_day'] = 1;
|
$object['_is_all_day'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return $object;
|
return $object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue