Improve find_event()

This commit is contained in:
Jörg Lehrke 2010-03-09 17:03:33 +00:00
parent 6f68c0a41b
commit 1162445002

View File

@ -1482,8 +1482,6 @@ class calendar_boupdate extends calendar_bo
if ($filter == 'master') if ($filter == 'master')
{ {
// No chance to find a master without [U]ID
if (emtpy($event['uid']) && empty($event['id'])) return $matchingEvents;
$query[] = 'recur_type!='. MCAL_RECUR_NONE; $query[] = 'recur_type!='. MCAL_RECUR_NONE;
$query['cal_recurrence'] = 0; $query['cal_recurrence'] = 0;
} }
@ -1535,6 +1533,9 @@ class calendar_boupdate extends calendar_bo
} }
unset($event['id']); unset($event['id']);
// No chance to find a master without [U]ID
if ($filter == 'master' && empty($event['uid'])) return $matchingEvents;
// only query calendars of users, we have READ-grants from // only query calendars of users, we have READ-grants from
$users = array(); $users = array();
foreach(array_keys($this->grants) as $user) foreach(array_keys($this->grants) as $user)
@ -1623,7 +1624,15 @@ class calendar_boupdate extends calendar_bo
$query[] = ('cal_start<' . ($event['start'] + 2)); $query[] = ('cal_start<' . ($event['start'] + 2));
} }
} }
$matchFields = array('priority', 'public', 'non_blocking', 'recurrence'); if ($filter == 'relax')
{
$matchFields = array();
}
else
{
$matchFields = array('priority', 'public', 'non_blocking');
}
$matchFields[] = 'recurrence';
foreach ($matchFields as $key) foreach ($matchFields as $key)
{ {
if (isset($event[$key])) $query['cal_'.$key] = $event[$key]; if (isset($event[$key])) $query['cal_'.$key] = $event[$key];
@ -1700,7 +1709,7 @@ class calendar_boupdate extends calendar_bo
continue; continue;
} }
if (!empty($event['uid']) && $filter == 'exact') break; if (!empty($event['uid']) && $filter == 'exact' || $filter == 'master') break;
// check times // check times
if ($filter != 'relax') if ($filter != 'relax')
@ -1717,7 +1726,7 @@ class calendar_boupdate extends calendar_bo
continue; continue;
} }
} }
elseif ($filter != 'master') else
{ {
if (abs($event['end'] - $egwEvent['end']) >= 120) if (abs($event['end'] - $egwEvent['end']) >= 120)
{ {
@ -1732,15 +1741,10 @@ class calendar_boupdate extends calendar_bo
} }
// check for real match // check for real match
$matchFields = array('title'); $matchFields = array('title', 'description');
switch ($filter) if ($filter != 'relax')
{ {
case 'master': $matchFields[] = 'location';
break;
case 'relax':
$matchFields[] = 'location';
default:
$matchFields[] = 'description';
} }
foreach ($matchFields as $key) foreach ($matchFields as $key)
{ {
@ -1751,13 +1755,13 @@ class calendar_boupdate extends calendar_bo
{ {
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__. error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.
"() event[$key] differ: '" . $event[$key] . "() event[$key] differ: '" . $event[$key] .
"' <> '" . $egwEvent[$key]) . "'"; "' <> '" . $egwEvent[$key] . "'");
} }
continue 2; // next foundEvent continue 2; // next foundEvent
} }
} }
if ($filter != 'master' && is_array($event['category'])) if (is_array($event['category']))
{ {
// check categories // check categories
$egwCategories = explode(',', $egwEvent['category']); $egwCategories = explode(',', $egwEvent['category']);
@ -1786,7 +1790,7 @@ class calendar_boupdate extends calendar_bo
} }
} }
if ($filter != 'relax' && $filter != 'master') if ($filter != 'relax')
{ {
// check participants // check participants
if (is_array($event['participants'])) if (is_array($event['participants']))
@ -1824,71 +1828,67 @@ class calendar_boupdate extends calendar_bo
} }
} }
if ($filter != 'master') if ($event['recur_type'] == MCAL_RECUR_NONE)
{ {
if ($event['recur_type'] == MCAL_RECUR_NONE) if ($egwEvent['recur_type'] != MCAL_RECUR_NONE)
{ {
if ($egwEvent['recur_type'] != MCAL_RECUR_NONE) // We found a pseudo Exception
{ $pseudos[] = $egwEvent['id'] . ':' . $event['start'];
// We found a pseudo Exception continue;
$pseudos[] = $egwEvent['id'] . ':' . $event['start'];
continue;
}
} }
elseif ($filter != 'relax') }
elseif ($filter != 'relax')
{
// check exceptions
// $exceptions[$remote_ts] = $egw_ts
$exceptions = $this->so->get_recurrence_exceptions($egwEvent, $event['$tzid'], 0, 0, 'map');
if (is_array($event['recur_exception']))
{ {
// check exceptions foreach ($event['recur_exception'] as $key => $day)
// $exceptions[$remote_ts] = $egw_ts
$exceptions = $this->so->get_recurrence_exceptions($egwEvent, $event['$tzid'], 0, 0, 'map');
if (is_array($event['recur_exception']))
{ {
foreach ($event['recur_exception'] as $key => $day) if (isset($exceptions[$day]))
{ {
if (isset($exceptions[$day])) unset($exceptions[$day]);
{
unset($exceptions[$day]);
}
else
{
if ($this->log)
{
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.
"() additional event['recur_exception']: $day");
}
continue 2;
}
} }
if (!empty($exceptions)) else
{ {
if ($this->log) if ($this->log)
{ {
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__. error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.
'() missing event[recur_exception]: ' . "() additional event['recur_exception']: $day");
array2string($event['recur_exception']));
}
continue;
}
}
// check recurrence information
foreach (array('recur_type', 'recur_interval', 'recur_enddate') as $key)
{
if (isset($event[$key])
&& $event[$key] != $egwEvent[$key])
{
if ($this->log)
{
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.
"() events[$key] differ: " . $event[$key] .
' <> ' . $egwEvent[$key]);
} }
continue 2; continue 2;
} }
} }
if (!empty($exceptions))
{
if ($this->log)
{
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.
'() missing event[recur_exception]: ' .
array2string($event['recur_exception']));
}
continue;
}
}
// check recurrence information
foreach (array('recur_type', 'recur_interval', 'recur_enddate') as $key)
{
if (isset($event[$key])
&& $event[$key] != $egwEvent[$key])
{
if ($this->log)
{
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__.
"() events[$key] differ: " . $event[$key] .
' <> ' . $egwEvent[$key]);
}
continue 2;
}
} }
} }
$matchingEvents[] = $egwEvent['id']; // exact match $matchingEvents[] = $egwEvent['id']; // exact match
if ($filter = 'master') break;
} }
// append pseudos as last entries // append pseudos as last entries
$matchingEvents = array_merge($matchingEvents, $pseudos); $matchingEvents = array_merge($matchingEvents, $pseudos);