mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-09-01 18:48:17 +00:00
Make calendar-query report work with bound collections.
This commit is contained in:
parent
76d411a6ab
commit
961d1c494a
@ -257,6 +257,14 @@ function BuildSqlFilter( $filter ) {
|
||||
*/
|
||||
|
||||
$responses = array();
|
||||
$collection = new DAVResource($request->path);
|
||||
$bound_from = $collection->bound_from();
|
||||
if ( !$collection->Exists() ) {
|
||||
$request->DoResponse( 404 );
|
||||
}
|
||||
if ( ! ($collection->IsCalendar() || $collection->IsSchedulingCollection()) ) {
|
||||
$request->DoResponse( 403, translate('The calendar-query report must be run against a collection') );
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Once we are past DB version 1.2.1 we can change this query more radically. The best performance to
|
||||
@ -266,16 +274,16 @@ $responses = array();
|
||||
* AND caldav_data.caldav_type = 'VEVENT' ORDER BY caldav_data.user_no, caldav_data.dav_name;
|
||||
*/
|
||||
|
||||
$where = " WHERE caldav_data.user_no = $request->user_no AND caldav_data.dav_name ~ ".qpg("^".$request->path)." ";
|
||||
$where = " WHERE caldav_data.collection_id = " . $collection->resource_id();
|
||||
if ( is_array($qry_filters) ) {
|
||||
dbg_log_array( "calquery", "qry_filters", $qry_filters, true );
|
||||
$where .= BuildSqlFilter( $qry_filters );
|
||||
}
|
||||
if ( ! $request->AllowedTo('all') ) {
|
||||
if ( $collection->Privileges() != privilege_to_bits('DAV::all') ) {
|
||||
$where .= "AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) ";
|
||||
}
|
||||
|
||||
if ( isset($c->hide_TODO) && $c->hide_TODO && ! $request->AllowedTo('all') ) {
|
||||
if ( isset($c->hide_TODO) && $c->hide_TODO && ! $collection->HavePrivilegeTo('DAV::write-content') ) {
|
||||
$where .= "AND caldav_data.caldav_type NOT IN ('VTODO') ";
|
||||
}
|
||||
|
||||
@ -285,10 +293,13 @@ if ( isset($c->hide_older_than) && intval($c->hide_older_than > 0) ) {
|
||||
|
||||
$sql = "SELECT * 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 );
|
||||
if ( $qry->Exec("calquery",__LINE__,__FILE__) && $qry->rows > 0 ) {
|
||||
$qry = new AwlQuery( $sql );
|
||||
if ( $qry->Exec("calquery",__LINE__,__FILE__) && $qry->rows() > 0 ) {
|
||||
while( $calendar_object = $qry->Fetch() ) {
|
||||
if ( !$need_post_filter || apply_filter( $qry_filters, $calendar_object ) ) {
|
||||
if ( $bound_from != $collection->dav_name() ) {
|
||||
$calendar_object->dav_name = str_replace( $bound_from, $collection->dav_name(), $calendar_object->dav_name);
|
||||
}
|
||||
if ( $need_expansion ) {
|
||||
$ics = new iCalComponent($calendar_object->caldav_data);
|
||||
$expanded = expand_event_instances($ics, $expand_range_start, $expand_range_end);
|
||||
|
||||
199
testing/tests/regression-suite/969-REPORT-bound.result
Normal file
199
testing/tests/regression-suite/969-REPORT-bound.result
Normal file
@ -0,0 +1,199 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<response>
|
||||
<href>/caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics</href>
|
||||
<propstat>
|
||||
<prop>
|
||||
<C:calendar-data>BEGIN:VCALENDAR
|
||||
PRODID:-//davical.org//NONSGML AWL Calendar//EN
|
||||
VERSION:2.0
|
||||
CALSCALE:GREGORIAN
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081020T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081021T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081022T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081023T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081024T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081027T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081028T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081029T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081030T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054958Z
|
||||
LAST-MODIFIED:20081023T055044Z
|
||||
DTSTAMP:20081023T054958Z
|
||||
UID:33169d69-2969-4a96-a3e1-2e312b7614e6
|
||||
SUMMARY:Daily Action Meeting
|
||||
RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081031T110000Z
|
||||
DURATION:PT30M
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
</C:calendar-data>
|
||||
</prop>
|
||||
<status>HTTP/1.1 200 OK</status>
|
||||
</propstat>
|
||||
</response>
|
||||
<response>
|
||||
<href>/caldav.php/user4/user2/047871e3-6b70-4178-9af8-0ceb50f7b092.ics</href>
|
||||
<propstat>
|
||||
<prop>
|
||||
<C:calendar-data>BEGIN:VCALENDAR
|
||||
PRODID:-//davical.org//NONSGML AWL Calendar//EN
|
||||
VERSION:2.0
|
||||
CALSCALE:GREGORIAN
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054934Z
|
||||
LAST-MODIFIED:20081023T055059Z
|
||||
DTSTAMP:20081023T054934Z
|
||||
UID:047871e3-6b70-4178-9af8-0ceb50f7b092
|
||||
SUMMARY:Weekly Project Meeting
|
||||
RRULE:FREQ=WEEKLY;INTERVAL=1
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081020T090000Z
|
||||
DURATION:PT60M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T054934Z
|
||||
LAST-MODIFIED:20081023T055059Z
|
||||
DTSTAMP:20081023T054934Z
|
||||
UID:047871e3-6b70-4178-9af8-0ceb50f7b092
|
||||
SUMMARY:Weekly Project Meeting
|
||||
RRULE:FREQ=WEEKLY;INTERVAL=1
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081027T090000Z
|
||||
DURATION:PT60M
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
</C:calendar-data>
|
||||
</prop>
|
||||
<status>HTTP/1.1 200 OK</status>
|
||||
</propstat>
|
||||
</response>
|
||||
<response>
|
||||
<href>/caldav.php/user4/user2/9429a973-2b13-4b1a-be09-948d75425c45.ics</href>
|
||||
<propstat>
|
||||
<prop>
|
||||
<C:calendar-data>BEGIN:VCALENDAR
|
||||
PRODID:-//davical.org//NONSGML AWL Calendar//EN
|
||||
VERSION:2.0
|
||||
CALSCALE:GREGORIAN
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T055115Z
|
||||
LAST-MODIFIED:20081023T055139Z
|
||||
DTSTAMP:20081023T055115Z
|
||||
UID:9429a973-2b13-4b1a-be09-948d75425c45
|
||||
SUMMARY:Weekly catch-up
|
||||
RRULE:FREQ=WEEKLY;INTERVAL=1
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081024T140000Z
|
||||
DURATION:PT60M
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CREATED:20081023T055115Z
|
||||
LAST-MODIFIED:20081023T055139Z
|
||||
DTSTAMP:20081023T055115Z
|
||||
UID:9429a973-2b13-4b1a-be09-948d75425c45
|
||||
SUMMARY:Weekly catch-up
|
||||
RRULE:FREQ=WEEKLY;INTERVAL=1
|
||||
X-MOZ-GENERATION:2
|
||||
DTSTART:20081031T140000Z
|
||||
DURATION:PT60M
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
</C:calendar-data>
|
||||
</prop>
|
||||
<status>HTTP/1.1 200 OK</status>
|
||||
</propstat>
|
||||
</response>
|
||||
</multistatus>
|
||||
29
testing/tests/regression-suite/969-REPORT-bound.test
Normal file
29
testing/tests/regression-suite/969-REPORT-bound.test
Normal file
@ -0,0 +1,29 @@
|
||||
#
|
||||
# Test REPORT access to a bound calendar using a ticket.
|
||||
#
|
||||
TYPE=REPORT
|
||||
URL=http://regression.host/caldav.php/user4/user2/
|
||||
AUTH=user4:user4
|
||||
|
||||
HEADER=User-Agent: DAViCalTester/public
|
||||
HEADER=Content-Type: text/xml; charset="UTF-8"
|
||||
|
||||
|
||||
BEGINDATA
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<calendar-query xmlns:D="DAV:" xmlns="urn:ietf:params:xml:ns:caldav">
|
||||
<D:prop>
|
||||
<calendar-data>
|
||||
<expand start="20081001T000000Z" end="20081101T000000Z"/>
|
||||
</calendar-data>
|
||||
</D:prop>
|
||||
<filter>
|
||||
<comp-filter name="VCALENDAR">
|
||||
<comp-filter name="VEVENT">
|
||||
<time-range start="20081001T000000Z" end="20081101T000000Z"/>
|
||||
</comp-filter>
|
||||
</comp-filter>
|
||||
</filter>
|
||||
</calendar-query>
|
||||
ENDDATA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user