so class STEP1: reverted wrong recurrence rebuild with $max. fixed not working move() method for egw_cal_user. fixed participant status orphans

This commit is contained in:
Christian Binder 2009-07-17 14:49:19 +00:00
parent 86db825cbf
commit e77ed49566

View File

@ -606,11 +606,9 @@ ORDER BY cal_user_type, cal_usre_id
$set_recurrences = (isset($event['cal_start']) && (int)$min != (int) $event['cal_start']) || $set_recurrences = (isset($event['cal_start']) && (int)$min != (int) $event['cal_start']) ||
$event['recur_type'] != $old_recur['recur_type'] || $event['recur_data'] != $old_recur['recur_data'] || $event['recur_type'] != $old_recur['recur_type'] || $event['recur_data'] != $old_recur['recur_data'] ||
(int)$event['recur_interval'] != (int)$old_recur['recur_interval'] || $event['recur_enddate'] != $old_recur['recur_enddate'] || (int)$event['recur_interval'] != (int)$old_recur['recur_interval'] || $event['recur_enddate'] != $old_recur['recur_enddate'] ||
count(array_diff($old_exceptions,$event['recur_exception'])); // exception deleted or added count(array_diff($old_exceptions,$event['recur_exception'])); // exception deleted (jaytraxx: handling this better follows soon)
$max = (int) $this->db->select($this->dates_table,'MAX(cal_start)',array('cal_id'=>$cal_id),__LINE__,__FILE__,false,'','calendar')->fetchColumn();
} else {
$max = 0;
} }
$event['recur_exception'] = empty($event['recur_exception']) ? null : implode(',',$event['recur_exception']); $event['recur_exception'] = empty($event['recur_exception']) ? null : implode(',',$event['recur_exception']);
unset($event[0]); // unset the 'etag=etag+1', as it's not in the repeats table unset($event[0]); // unset the 'etag=etag+1', as it's not in the repeats table
if($event['recur_type'] != MCAL_RECUR_NONE) if($event['recur_type'] != MCAL_RECUR_NONE)
@ -623,21 +621,16 @@ ORDER BY cal_user_type, cal_usre_id
} }
if ($set_recurrences) if ($set_recurrences)
{ {
if ((int)$min != (int)$event['cal_start'])
{
// We need to reset all recurrences
$max = -1;
}
// delete all, but the lowest dates record // delete all, but the lowest dates record
$this->db->delete($this->dates_table,array( $this->db->delete($this->dates_table,array(
'cal_id' => $cal_id, 'cal_id' => $cal_id,
'cal_start > '.(int)$min, 'cal_start > '.(int)$min,
),__LINE__,__FILE__,'calendar'); ),__LINE__,__FILE__,'calendar');
// delete all user-records, with recur-date > old enddate // delete all user-records, with recur-date != 0
$this->db->delete($this->user_table,array( $this->db->delete($this->user_table,array(
'cal_id' => $cal_id, 'cal_id' => $cal_id,
'cal_recur_date > '.(int)$max, 'cal_recur_date != 0',
),__LINE__,__FILE__,'calendar'); ),__LINE__,__FILE__,'calendar');
} }
} }
@ -753,7 +746,7 @@ ORDER BY cal_user_type, cal_usre_id
{ {
// move the recur-date of the participants // move the recur-date of the participants
$this->db->query("UPDATE $this->user_table SET cal_recur_date=cal_recur_date+$move_start WHERE $where AND cal_recur_date ". $this->db->query("UPDATE $this->user_table SET cal_recur_date=cal_recur_date+$move_start WHERE $where AND cal_recur_date ".
((int)$change_since ? '>= '.(int)$change_since : '!= 0') + " ORDER BY cal_recur_date DESC",__LINE__,__FILE__); ((int)$change_since ? '>= '.(int)$change_since : '!= 0') . " ORDER BY cal_recur_date DESC",__LINE__,__FILE__);
} }
if ($move_start || $move_end) if ($move_start || $move_end)
{ {
@ -830,7 +823,6 @@ ORDER BY cal_user_type, cal_usre_id
if ($change_since !== false) // existing entries only if ($change_since !== false) // existing entries only
{ {
// delete not longer set participants // delete not longer set participants
$where[0] = 'cal_recur_date=0';
$deleted = array(); $deleted = array();
foreach($this->db->select($this->user_table,'DISTINCT cal_user_type,cal_user_id,cal_quantity',$where, foreach($this->db->select($this->user_table,'DISTINCT cal_user_type,cal_user_id,cal_quantity',$where,
__LINE__,__FILE__,false,'','calendar') as $row) __LINE__,__FILE__,false,'','calendar') as $row)
@ -848,7 +840,6 @@ ORDER BY cal_user_type, cal_usre_id
unset($participants[$uid]); // we don't touch them unset($participants[$uid]); // we don't touch them
} }
} }
unset($where[0]);
if (count($deleted)) if (count($deleted))
{ {