3 require_once(
"RRule.php");
4 require_once(
"vCalendar.php");
10 function update_instance_ranges($collection_dav_name) {
18 $qry =
new AwlQuery();
20 $in_transaction = ($qry->TransactionState() == 1);
21 if ( ! $in_transaction ) $qry->Begin();
24 "SELECT d.dav_id, c.collection_id, d.caldav_data, c.timezone, i.first_instance_start, i.last_instance_end 26 INNER JOIN collection c ON d.collection_id = c.collection_id 27 INNER JOIN calendar_item i ON d.collection_id = i.collection_id AND d.dav_id = i.dav_id 28 WHERE c.dav_name = :dav_name",
29 [
":dav_name" => $collection_dav_name]
32 while( $row = $qry->Fetch() ) {
34 $range = getVCalendarRange(
new vCalendar($row->caldav_data), $row->timezone);
35 }
catch (Exception $e) {
36 dbg_error_log(
'instance_range',
'Error parsing calendar item, skipping update');
40 $new_start = isset($range->from) ? $range->from->UTC() : null;
41 $new_end = isset($range->until) ? $range->until->UTC() : null;
43 if ($new_start != $row->first_instance_start || $new_end != $row->last_instance_end) {
44 $inner_qry =
new AwlQuery(
46 SET first_instance_start = :first_instance_start, 47 last_instance_end = :last_instance_end 48 WHERE collection_id = :collection_id AND dav_id = :dav_id",
50 ":dav_id" => $row->dav_id,
51 ":collection_id" => $row->collection_id,
53 ":first_instance_start" => $new_start,
54 ":last_instance_end" => $new_end
57 $inner_qry->Exec(
'UpdateInstanceRange',__LINE__,__FILE__);
61 if ( ! $in_transaction ) $qry->Commit();