mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-08-24 17:36:39 +00:00
Switch freebusy report to AwlQuery and iCalComponent.
This commit is contained in:
parent
85a0be9914
commit
98609364db
@ -12,13 +12,14 @@ $fbq_end = $fbq_content[0]->GetAttribute('end');
|
||||
if ( ! ( isset($fbq_start) || isset($fbq_end) ) ) {
|
||||
$request->DoResponse( 400, 'All valid freebusy requests MUST contain a time-range filter' );
|
||||
}
|
||||
$where = " WHERE caldav_data.dav_name ~ ? ";
|
||||
$where .= "AND rrule_event_overlaps( dtstart, dtend, rrule, ".qpg($fbq_start).", ".qpg($fbq_end)." ) ";
|
||||
$params = array( ':path_match' => '^'.$request->path.$request->DepthRegexTail(), ':start' => $fbq_start, ':end' => $fbq_end );
|
||||
$where = ' WHERE caldav_data.dav_name ~ :path_match ';
|
||||
$where .= 'AND rrule_event_overlaps( dtstart, dtend, rrule, :start, :end) ';
|
||||
$where .= "AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) ";
|
||||
$where .= "AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) ";
|
||||
$where .= "AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ";
|
||||
|
||||
if ( ! $request->AllowedTo('all') ) {
|
||||
if ( $request->Privileges() != privilege_to_bits('all') ) {
|
||||
$where .= "AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) ";
|
||||
}
|
||||
|
||||
@ -29,8 +30,8 @@ $sql .= "to_char(calendar_item.dtstart at time zone 'GMT',".iCalendar::SqlDateFo
|
||||
$sql .= "to_char(calendar_item.dtend at time zone 'GMT',".iCalendar::SqlDateFormat().") AS finish ";
|
||||
$sql .= "FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name)".$where;
|
||||
if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= " ORDER BY dav_id";
|
||||
$qry = new PgQuery( $sql, "^".$request->path.$request->DepthRegexTail() );
|
||||
if ( $qry->Exec("REPORT",__LINE__,__FILE__) && $qry->rows > 0 ) {
|
||||
$qry = new AwlQuery( $sql, $params );
|
||||
if ( $qry->Exec("REPORT",__LINE__,__FILE__) && $qry->rows() > 0 ) {
|
||||
while( $calendar_object = $qry->Fetch() ) {
|
||||
if ( $calendar_object->transp != "TRANSPARENT" ) {
|
||||
switch ( $calendar_object->status ) {
|
||||
@ -51,8 +52,12 @@ if ( $qry->Exec("REPORT",__LINE__,__FILE__) && $qry->rows > 0 ) {
|
||||
}
|
||||
}
|
||||
}
|
||||
$freebusy = iCalendar::iCalHeader();
|
||||
$freebusy .= sprintf("BEGIN:VFREEBUSY\nDTSTAMP:%s\nDTSTART:%s\nDTEND:%s\n", date('Ymd\THis\Z'), $fbq_start, $fbq_end);
|
||||
|
||||
$freebusy = new iCalComponent();
|
||||
$freebusy->SetType('VFREEBUSY');
|
||||
$freebusy->AddProperty('DTSTAMP', date('Ymd\THis\Z'));
|
||||
$freebusy->AddProperty('DTSTART', $fbq_start);
|
||||
$freebusy->AddProperty('DTEND', $fbq_end);
|
||||
|
||||
foreach( $busy_tentative AS $k => $v ) {
|
||||
$start = new iCalDate($v->start);
|
||||
@ -64,11 +69,11 @@ foreach( $busy_tentative AS $k => $v ) {
|
||||
if ( $date->GreaterThan($fbq_end) ) break;
|
||||
$todate = clone($date);
|
||||
$todate->AddDuration($duration);
|
||||
$freebusy .= sprintf("FREEBUSY;FBTYPE=BUSY-TENTATIVE:%s/%s\n", $date->Render('Ymd\THis'), $todate->Render('Ymd\THis') );
|
||||
$freebusy->AddProperty( 'FREEBUSY', $date->Render('Ymd\THis').'/'.$todate->Render('Ymd\THis'), array('FBTYPE' => 'BUSY-TENTATIVE') );
|
||||
}
|
||||
}
|
||||
else {
|
||||
$freebusy .= sprintf("FREEBUSY;FBTYPE=BUSY-TENTATIVE:%s/%s\n", $start->Render('Ymd\THis'), $v->finish );
|
||||
$freebusy->AddProperty( 'FREEBUSY', $start->Render('Ymd\THis').'/'.$v->finish, array('FBTYPE' => 'BUSY-TENTATIVE') );
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,16 +87,18 @@ foreach( $busy AS $k => $v ) {
|
||||
if ( $date->GreaterThan($fbq_end) ) break;
|
||||
$todate = clone($date);
|
||||
$todate->AddDuration($duration);
|
||||
$freebusy .= sprintf("FREEBUSY:%s/%s\n", $date->Render('Ymd\THis'), $todate->Render('Ymd\THis') );
|
||||
$freebusy->AddProperty( 'FREEBUSY', $date->Render('Ymd\THis').'/'.$todate->Render('Ymd\THis') );
|
||||
}
|
||||
}
|
||||
else {
|
||||
$freebusy .= sprintf("FREEBUSY:%s/%s\n", $start->Render('Ymd\THis'), $v->finish );
|
||||
$freebusy->AddProperty( 'FREEBUSY', $start->Render('Ymd\THis').'/'.$v->finish );
|
||||
}
|
||||
}
|
||||
|
||||
$freebusy .= "END:VFREEBUSY\n";
|
||||
$freebusy .= iCalendar::iCalFooter();
|
||||
$request->DoResponse( 200, $freebusy, 'text/calendar' );
|
||||
$result = new iCalComponent();
|
||||
$result->VCalendar();
|
||||
$result->AddComponent($freebusy);
|
||||
|
||||
$request->DoResponse( 200, $result->Render(), 'text/calendar' );
|
||||
// Won't return from that
|
||||
|
||||
|
||||
@ -1,38 +1,39 @@
|
||||
HTTP/1.1 200 OK
|
||||
Date: Dow, 01 Jan 2000 00:00:00 GMT
|
||||
DAV: 1, 2, access-control, calendar-access, calendar-schedule, extended-mkcol, calendar-proxy
|
||||
Content-Length: 1162
|
||||
Content-Length: 1210
|
||||
Content-Type: text/calendar
|
||||
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//davical.org//NONSGML AWL Calendar//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VFREEBUSY
|
||||
CALSCALE:GREGORIAN
|
||||
BEGIN:VFREEBUSY
|
||||
DTSTAMP:yyyymmddThhmmssZ
|
||||
DTSTART:20061004T140000Z
|
||||
DTEND:20070105T220000Z
|
||||
FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000/20061223T080000
|
||||
FREEBUSY:20061101T233000/20061102T003000
|
||||
FREEBUSY:20061031T210000/20061031T220000
|
||||
FREEBUSY:20061102T210000/20061102T220000
|
||||
FREEBUSY:20061109T210000/20061109T220000
|
||||
FREEBUSY:20061116T210000/20061116T220000
|
||||
FREEBUSY:20061123T210000/20061123T220000
|
||||
FREEBUSY:20061130T210000/20061130T220000
|
||||
FREEBUSY:20061207T210000/20061207T220000
|
||||
FREEBUSY:20061214T210000/20061214T220000
|
||||
FREEBUSY:20061221T210000/20061221T220000
|
||||
FREEBUSY:20061228T210000/20061228T220000
|
||||
FREEBUSY:20070104T210000/20070104T220000
|
||||
FREEBUSY:20061223T030000/20061223T050000
|
||||
FREEBUSY:20061223T000000/20061223T020000
|
||||
FREEBUSY:20061103T030000/20061103T044500
|
||||
FREEBUSY:20061117T030000/20061117T044500
|
||||
FREEBUSY:20061201T030000/20061201T044500
|
||||
FREEBUSY:20061215T030000/20061215T044500
|
||||
FREEBUSY:20061229T030000/20061229T044500
|
||||
FREEBUSY:20061102T183000/20061102T203000
|
||||
FREEBUSY:20061202T183000/20061202T203000
|
||||
FREEBUSY:20070102T183000/20070102T203000
|
||||
END:VFREEBUSY
|
||||
DTSTART:20061004T140000Z
|
||||
DTEND:20070105T220000Z
|
||||
FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000/20061223T080000
|
||||
FREEBUSY:20061101T233000/20061102T003000
|
||||
FREEBUSY:20061031T210000/20061031T220000
|
||||
FREEBUSY:20061102T210000/20061102T220000
|
||||
FREEBUSY:20061109T210000/20061109T220000
|
||||
FREEBUSY:20061116T210000/20061116T220000
|
||||
FREEBUSY:20061123T210000/20061123T220000
|
||||
FREEBUSY:20061130T210000/20061130T220000
|
||||
FREEBUSY:20061207T210000/20061207T220000
|
||||
FREEBUSY:20061214T210000/20061214T220000
|
||||
FREEBUSY:20061221T210000/20061221T220000
|
||||
FREEBUSY:20061228T210000/20061228T220000
|
||||
FREEBUSY:20070104T210000/20070104T220000
|
||||
FREEBUSY:20061223T030000/20061223T050000
|
||||
FREEBUSY:20061223T000000/20061223T020000
|
||||
FREEBUSY:20061103T030000/20061103T044500
|
||||
FREEBUSY:20061117T030000/20061117T044500
|
||||
FREEBUSY:20061201T030000/20061201T044500
|
||||
FREEBUSY:20061215T030000/20061215T044500
|
||||
FREEBUSY:20061229T030000/20061229T044500
|
||||
FREEBUSY:20061102T183000/20061102T203000
|
||||
FREEBUSY:20061202T183000/20061202T203000
|
||||
FREEBUSY:20070102T183000/20070102T203000
|
||||
END:VFREEBUSY
|
||||
END:VCALENDAR
|
||||
|
||||
@ -17,4 +17,4 @@ BEGINDATA
|
||||
</C:free-busy-query>
|
||||
ENDDATA
|
||||
|
||||
REPLACE=/^DTSTAMP:\d{8}T\d{6}Z$/DTSTAMP:yyyymmddThhmmssZ/
|
||||
REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/
|
||||
|
||||
@ -1,71 +1,72 @@
|
||||
HTTP/1.1 200 OK
|
||||
Date: Dow, 01 Jan 2000 00:00:00 GMT
|
||||
DAV: 1, 2, access-control, calendar-access, calendar-schedule, extended-mkcol, calendar-proxy
|
||||
Content-Length: 2515
|
||||
Content-Length: 2596
|
||||
Content-Type: text/calendar
|
||||
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//davical.org//NONSGML AWL Calendar//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VFREEBUSY
|
||||
CALSCALE:GREGORIAN
|
||||
BEGIN:VFREEBUSY
|
||||
DTSTAMP:yyyymmddThhmmssZ
|
||||
DTSTART:20061001T000000Z
|
||||
DTEND:20070630T235959Z
|
||||
FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000/20061223T080000
|
||||
FREEBUSY:20061101T233000/20061102T003000
|
||||
FREEBUSY:20061031T210000/20061031T220000
|
||||
FREEBUSY:20061102T210000/20061102T220000
|
||||
FREEBUSY:20061109T210000/20061109T220000
|
||||
FREEBUSY:20061116T210000/20061116T220000
|
||||
FREEBUSY:20061123T210000/20061123T220000
|
||||
FREEBUSY:20061130T210000/20061130T220000
|
||||
FREEBUSY:20061207T210000/20061207T220000
|
||||
FREEBUSY:20061214T210000/20061214T220000
|
||||
FREEBUSY:20061221T210000/20061221T220000
|
||||
FREEBUSY:20061228T210000/20061228T220000
|
||||
FREEBUSY:20070104T210000/20070104T220000
|
||||
FREEBUSY:20070111T210000/20070111T220000
|
||||
FREEBUSY:20070118T210000/20070118T220000
|
||||
FREEBUSY:20070125T210000/20070125T220000
|
||||
FREEBUSY:20070201T210000/20070201T220000
|
||||
FREEBUSY:20070208T210000/20070208T220000
|
||||
FREEBUSY:20070215T210000/20070215T220000
|
||||
FREEBUSY:20070222T210000/20070222T220000
|
||||
FREEBUSY:20070301T210000/20070301T220000
|
||||
FREEBUSY:20070308T210000/20070308T220000
|
||||
FREEBUSY:20070315T210000/20070315T220000
|
||||
FREEBUSY:20070322T210000/20070322T220000
|
||||
FREEBUSY:20070329T210000/20070329T220000
|
||||
FREEBUSY:20070405T210000/20070405T220000
|
||||
FREEBUSY:20070412T210000/20070412T220000
|
||||
FREEBUSY:20070419T210000/20070419T220000
|
||||
FREEBUSY:20070426T210000/20070426T220000
|
||||
FREEBUSY:20061223T030000/20061223T050000
|
||||
FREEBUSY:20061103T030000/20061103T044500
|
||||
FREEBUSY:20061117T030000/20061117T044500
|
||||
FREEBUSY:20061201T030000/20061201T044500
|
||||
FREEBUSY:20061215T030000/20061215T044500
|
||||
FREEBUSY:20061229T030000/20061229T044500
|
||||
FREEBUSY:20070112T030000/20070112T044500
|
||||
FREEBUSY:20070126T030000/20070126T044500
|
||||
FREEBUSY:20070209T030000/20070209T044500
|
||||
FREEBUSY:20070223T030000/20070223T044500
|
||||
FREEBUSY:20070309T030000/20070309T044500
|
||||
FREEBUSY:20070323T030000/20070323T044500
|
||||
FREEBUSY:20070406T030000/20070406T044500
|
||||
FREEBUSY:20070420T030000/20070420T044500
|
||||
FREEBUSY:20070504T030000/20070504T044500
|
||||
FREEBUSY:20070518T030000/20070518T044500
|
||||
FREEBUSY:20070601T030000/20070601T044500
|
||||
FREEBUSY:20070615T030000/20070615T044500
|
||||
FREEBUSY:20070629T030000/20070629T044500
|
||||
FREEBUSY:20061102T183000/20061102T203000
|
||||
FREEBUSY:20061202T183000/20061202T203000
|
||||
FREEBUSY:20070102T183000/20070102T203000
|
||||
FREEBUSY:20070202T183000/20070202T203000
|
||||
FREEBUSY:20070302T183000/20070302T203000
|
||||
FREEBUSY:20070402T183000/20070402T203000
|
||||
FREEBUSY:20070502T183000/20070502T203000
|
||||
FREEBUSY:20070602T183000/20070602T203000
|
||||
END:VFREEBUSY
|
||||
DTSTART:20061001T000000Z
|
||||
DTEND:20070630T235959Z
|
||||
FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000/20061223T080000
|
||||
FREEBUSY:20061101T233000/20061102T003000
|
||||
FREEBUSY:20061031T210000/20061031T220000
|
||||
FREEBUSY:20061102T210000/20061102T220000
|
||||
FREEBUSY:20061109T210000/20061109T220000
|
||||
FREEBUSY:20061116T210000/20061116T220000
|
||||
FREEBUSY:20061123T210000/20061123T220000
|
||||
FREEBUSY:20061130T210000/20061130T220000
|
||||
FREEBUSY:20061207T210000/20061207T220000
|
||||
FREEBUSY:20061214T210000/20061214T220000
|
||||
FREEBUSY:20061221T210000/20061221T220000
|
||||
FREEBUSY:20061228T210000/20061228T220000
|
||||
FREEBUSY:20070104T210000/20070104T220000
|
||||
FREEBUSY:20070111T210000/20070111T220000
|
||||
FREEBUSY:20070118T210000/20070118T220000
|
||||
FREEBUSY:20070125T210000/20070125T220000
|
||||
FREEBUSY:20070201T210000/20070201T220000
|
||||
FREEBUSY:20070208T210000/20070208T220000
|
||||
FREEBUSY:20070215T210000/20070215T220000
|
||||
FREEBUSY:20070222T210000/20070222T220000
|
||||
FREEBUSY:20070301T210000/20070301T220000
|
||||
FREEBUSY:20070308T210000/20070308T220000
|
||||
FREEBUSY:20070315T210000/20070315T220000
|
||||
FREEBUSY:20070322T210000/20070322T220000
|
||||
FREEBUSY:20070329T210000/20070329T220000
|
||||
FREEBUSY:20070405T210000/20070405T220000
|
||||
FREEBUSY:20070412T210000/20070412T220000
|
||||
FREEBUSY:20070419T210000/20070419T220000
|
||||
FREEBUSY:20070426T210000/20070426T220000
|
||||
FREEBUSY:20061223T030000/20061223T050000
|
||||
FREEBUSY:20061103T030000/20061103T044500
|
||||
FREEBUSY:20061117T030000/20061117T044500
|
||||
FREEBUSY:20061201T030000/20061201T044500
|
||||
FREEBUSY:20061215T030000/20061215T044500
|
||||
FREEBUSY:20061229T030000/20061229T044500
|
||||
FREEBUSY:20070112T030000/20070112T044500
|
||||
FREEBUSY:20070126T030000/20070126T044500
|
||||
FREEBUSY:20070209T030000/20070209T044500
|
||||
FREEBUSY:20070223T030000/20070223T044500
|
||||
FREEBUSY:20070309T030000/20070309T044500
|
||||
FREEBUSY:20070323T030000/20070323T044500
|
||||
FREEBUSY:20070406T030000/20070406T044500
|
||||
FREEBUSY:20070420T030000/20070420T044500
|
||||
FREEBUSY:20070504T030000/20070504T044500
|
||||
FREEBUSY:20070518T030000/20070518T044500
|
||||
FREEBUSY:20070601T030000/20070601T044500
|
||||
FREEBUSY:20070615T030000/20070615T044500
|
||||
FREEBUSY:20070629T030000/20070629T044500
|
||||
FREEBUSY:20061102T183000/20061102T203000
|
||||
FREEBUSY:20061202T183000/20061202T203000
|
||||
FREEBUSY:20070102T183000/20070102T203000
|
||||
FREEBUSY:20070202T183000/20070202T203000
|
||||
FREEBUSY:20070302T183000/20070302T203000
|
||||
FREEBUSY:20070402T183000/20070402T203000
|
||||
FREEBUSY:20070502T183000/20070502T203000
|
||||
FREEBUSY:20070602T183000/20070602T203000
|
||||
END:VFREEBUSY
|
||||
END:VCALENDAR
|
||||
|
||||
@ -19,4 +19,4 @@ BEGINDATA
|
||||
</C:free-busy-query>
|
||||
ENDDATA
|
||||
|
||||
REPLACE=/^DTSTAMP:\d{8}T\d{6}Z$/DTSTAMP:yyyymmddThhmmssZ/
|
||||
REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user