DB-model uses now egw_cal_user.cal_status="X" for participants who got deleted. They never get returned by read or search methods, but influence the ctag of the deleted users calendar!

This commit is contained in:
Ralf Becker 2012-01-23 07:41:29 +00:00
parent 1fc54e038b
commit 8514dd5d64

View File

@ -64,6 +64,9 @@ define('WEEK_s',7*DAY_s);
* UI only operates in user-time, so there have to be no conversation at all !!! * UI only operates in user-time, so there have to be no conversation at all !!!
* BO's functions take and return user-time only (!), they convert internaly everything to servertime, because * BO's functions take and return user-time only (!), they convert internaly everything to servertime, because
* SO operates only on server-time * SO operates only on server-time
*
* DB-model uses egw_cal_user.cal_status='X' for participants who got deleted. They never get returned by
* read or search methods, but influence the ctag of the deleted users calendar!
*/ */
class calendar_so class calendar_so
{ {
@ -234,6 +237,7 @@ class calendar_so
foreach($this->db->select($this->user_table,'*',array( foreach($this->db->select($this->user_table,'*',array(
'cal_id' => $ids, 'cal_id' => $ids,
'cal_recur_date' => $recur_date, 'cal_recur_date' => $recur_date,
"cal_status != 'X'",
),__LINE__,__FILE__,false,'ORDER BY cal_user_type DESC,cal_recur_date ASC,'.self::STATUS_SORT,'calendar') as $row) // DESC puts users before resources and contacts ),__LINE__,__FILE__,false,'ORDER BY cal_user_type DESC,cal_recur_date ASC,'.self::STATUS_SORT,'calendar') as $row) // DESC puts users before resources and contacts
{ {
// combine all participant data in uid and status values // combine all participant data in uid and status values
@ -500,13 +504,13 @@ class calendar_so
{ {
case 'showonlypublic': case 'showonlypublic':
$where['cal_public'] = 1; $where['cal_public'] = 1;
$where[] = "$this->user_table.cal_status != 'R'"; break; $where[] = "$this->user_table.cal_status NOT IN ('R','X')"; break;
case 'deleted': case 'deleted':
$where[] = 'cal_deleted IS NOT NULL'; break; $where[] = 'cal_deleted IS NOT NULL'; break;
case 'unknown': case 'unknown':
$where[] = "$this->user_table.cal_status='U'"; break; $where[] = "$this->user_table.cal_status='U'"; break;
case 'not-unknown': case 'not-unknown':
$where[] = "$this->user_table.cal_status != 'U'"; break; $where[] = "$this->user_table.cal_status NOT IN ('U','X')"; break;
case 'accepted': case 'accepted':
$where[] = "$this->user_table.cal_status='A'"; break; $where[] = "$this->user_table.cal_status='A'"; break;
case 'tentative': case 'tentative':
@ -517,9 +521,10 @@ class calendar_so
$where[] = "$this->user_table.cal_status='D'"; break; $where[] = "$this->user_table.cal_status='D'"; break;
case 'all': case 'all':
case 'owner': case 'owner':
$where[] = "$this->user_table.cal_status!='X'"; break;
break; break;
default: default:
$where[] = "$this->user_table.cal_status != 'R'"; $where[] = "$this->user_table.cal_status NOT IN ('R','X')";
break; break;
} }
} }
@ -559,7 +564,7 @@ class calendar_so
" AND (recur_type IS NULL AND rejected_by_user.cal_recur_date=0 OR cal_start=rejected_by_user.cal_recur_date)"; " AND (recur_type IS NULL AND rejected_by_user.cal_recur_date=0 OR cal_start=rejected_by_user.cal_recur_date)";
$or_required = array( $or_required = array(
'rejected_by_user.cal_status IS NULL', 'rejected_by_user.cal_status IS NULL',
"rejected_by_user.cal_status!='R'", "rejected_by_user.cal_status NOT IN ('R','X')",
); );
if ($filter == 'owner') $or_required[] = 'cal_owner='.(int)$remove_rejected_by_user; if ($filter == 'owner') $or_required[] = 'cal_owner='.(int)$remove_rejected_by_user;
$where[] = '('.implode(' OR ',$or_required).')'; $where[] = '('.implode(' OR ',$or_required).')';
@ -700,7 +705,7 @@ class calendar_so
// now ready all users with the given cal_id AND (cal_recur_date=0 or the fitting recur-date) // now ready all users with the given cal_id AND (cal_recur_date=0 or the fitting recur-date)
// This will always read the first entry of each recuring event too, we eliminate it later // This will always read the first entry of each recuring event too, we eliminate it later
$recur_dates[] = 0; $recur_dates[] = 0;
$utcal_id_view = " (SELECT * FROM ".$this->user_table." WHERE cal_id IN (".implode(',',array_unique($ids)).")) utcalid "; $utcal_id_view = " (SELECT * FROM ".$this->user_table." WHERE cal_id IN (".implode(',',array_unique($ids)).") AND cal_status!='X') utcalid ";
//$utrecurdate_view = " (select * from ".$this->user_table." where cal_recur_date in (".implode(',',array_unique($recur_dates)).")) utrecurdates "; //$utrecurdate_view = " (select * from ".$this->user_table." where cal_recur_date in (".implode(',',array_unique($recur_dates)).")) utrecurdates ";
foreach($this->db->select($utcal_id_view,'*',array( foreach($this->db->select($utcal_id_view,'*',array(
//'cal_id' => array_unique($ids), //'cal_id' => array_unique($ids),
@ -1488,7 +1493,7 @@ ORDER BY cal_user_type, cal_usre_id
)); ));
} }
$where[1] = '('.implode(' OR ',$to_or).')'; $where[1] = '('.implode(' OR ',$to_or).')';
$this->db->delete($this->user_table,$where,__LINE__,__FILE__,'calendar'); $this->db->update($this->user_table,array('cal_status'=>'X'),$where,__LINE__,__FILE__,'calendar');
unset($where[1]); unset($where[1]);
} }
} }