diff --git a/inc/DAVResource.php b/inc/DAVResource.php index b7034d2d..8b0213b2 100644 --- a/inc/DAVResource.php +++ b/inc/DAVResource.php @@ -485,20 +485,20 @@ EOSQL; function FetchPrincipal() { if ( isset($this->principal) ) return; $this->principal = new CalDAVPrincipal( array( "path" => $this->bound_from() ) ); - if ( $this->_is_principal && $this->principal->Exists() ) { - $this->exists = true; - $this->unique_tag = '"'.$this->principal->dav_etag.'"'; - $this->created = $this->principal->created; - $this->modified = $this->principal->modified; - $this->resourcetypes = ''; - $this->resource_id = $this->principal->principal_id; - $this->collection = $this->principal->AsCollection(); - $this->user_no = $this->principal->user_no; - } - elseif ( $this->_is_principal ) { - $this->exists = false; + if ( $this->_is_principal ) { + $this->exists = $this->principal->Exists(); $this->collection->dav_name = $this->dav_name; $this->collection->type = 'principal'; + if ( $this->exists ) { + $this->displayname = $this->principal->GetProperty('displayname'); + $this->unique_tag = '"'.$this->principal->dav_etag.'"'; + $this->created = $this->principal->created; + $this->modified = $this->principal->modified; + $this->resourcetypes = ''; + $this->resource_id = $this->principal->principal_id; + $this->collection = $this->principal->AsCollection(); + $this->user_no = $this->principal->user_no; + } } } @@ -1018,6 +1018,17 @@ EOQRY; } + /** + * Returns the URL of our resource + */ + function url() { + if ( !isset($this->dav_name) ) { + throw Exception("What! How can dav_name not be set?"); + } + return ConstructURL($this->dav_name); + } + + /** * Returns the dav_name of the resource in our internal namespace */ @@ -1069,10 +1080,7 @@ EOQRY; */ function principal_url() { if ( !isset($this->principal) ) $this->FetchPrincipal(); - if ( $this->principal->Exists() ) { - return $this->principal->principal_url; - } - return null; + return $this->principal->url(); } @@ -1236,8 +1244,21 @@ EOQRY; return $type_list; } + case 'resource': + if ( !isset($this->resource) ) $this->FetchResource(); + return clone($this->resource); + break; + + case 'principal': + if ( !isset($this->principal) ) $this->FetchPrincipal(); + return clone($this->principal); + break; + default: - if ( isset($this->{$name}) ) return $this->{$name}; + if ( isset($this->{$name}) ) { + if ( ! is_object($this->{$name}) ) return $this->{$name}; + return clone($this->{$name}); + } if ( $this->_is_principal ) { if ( !isset($this->principal) ) $this->FetchPrincipal(); if ( isset($this->principal->{$name}) ) return $this->principal->{$name}; @@ -1254,7 +1275,11 @@ EOQRY; if ( isset($this->principal->{$name}) ) return $this->principal->{$name}; if ( isset($this->collection->{$name}) ) return $this->collection->{$name}; } -// dbg_error_log( 'DAVResource', ':GetProperty: Failed to find property "%s" on "%s".', $name, $this->dav_name ); + if ( isset($this->{$name}) ) { + if ( ! is_object($this->{$name}) ) return $this->{$name}; + return clone($this->{$name}); + } + // dbg_error_log( 'DAVResource', ':GetProperty: Failed to find property "%s" on "%s".', $name, $this->dav_name ); } return $value;