Move URL deconstruction into DeconstructURL function.

This commit is contained in:
Andrew McMillan 2009-11-14 17:35:10 +13:00
parent 6a91cb5b9f
commit 2c418c4545
3 changed files with 71 additions and 27 deletions

View File

@ -327,27 +327,7 @@ class DAVResource
function FromPath($inpath) {
global $c;
$ourpath = rawurldecode($inpath);
/** Allow a path like .../username/calendar.ics to translate into the calendar URL */
if ( preg_match( '#^(/[^/]+/[^/]+).ics$#', $ourpath, $matches ) ) {
$ourpath = $matches[1]. '/';
}
/** remove any leading protocol/server/port/prefix... */
$base_path = ConstructURL('/');
if ( preg_match( '%^(.*?)'.str_replace('%', '\\%',$base_path).'(.*)$%', $ourpath, $matches ) ) {
if ( $matches[1] == '' || $matches[1] == $c->protocol_server_port ) {
$ourpath = $matches[2];
}
}
/** strip doubled slashes */
if ( strstr($ourpath,'//') ) $ourpath = preg_replace( '#//+#', '/', $ourpath);
if ( substr($ourpath,0,1) != '/' ) $ourpath = '/'.$ourpath;
$this->dav_name = $ourpath;
$this->dav_name = DeconstructURL($inpath);
$this->FetchCollection();
if ( $this->_is_collection ) {
@ -800,7 +780,7 @@ EOQRY;
if ( !isset($this->resource) ) $this->FetchResource();
}
}
dbg_error_log('DAVResource',' Checking whether "%s" exists. It would appear %s.', $this->dav_name, ($this->exists ? 'so' : 'not') );
// dbg_error_log('DAVResource',' Checking whether "%s" exists. It would appear %s.', $this->dav_name, ($this->exists ? 'so' : 'not') );
return $this->exists;
}
@ -920,7 +900,7 @@ 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 );
// dbg_error_log( 'DAVResource', ':GetProperty: Failed to find property "%s" on "%s".', $name, $this->dav_name );
}
return $value;
@ -974,7 +954,7 @@ EOQRY;
$resourcetypes = $prop->NewElement('resourcetype' );
$type_list = $this->GetProperty('resourcetype');
if ( !is_array($type_list) ) return true;
dbg_error_log( 'DAVResource', ':ResourceProperty: "%s" are "%s".', $tag, implode(', ',$type_list) );
// dbg_error_log( 'DAVResource', ':ResourceProperty: "%s" are "%s".', $tag, implode(', ',$type_list) );
foreach( $type_list AS $k => $v ) {
if ( $v == '' ) continue;
$reply->NSElement( $resourcetypes, $v );
@ -1075,7 +1055,7 @@ EOQRY;
$reply->NSElement($prop, $tag, $this->dead_properties[$tag] );
}
else {
dbg_error_log( 'DAVResource', 'Request for unsupported property "%s" of path "%s".', $tag, $this->dav_name );
// dbg_error_log( 'DAVResource', 'Request for unsupported property "%s" of path "%s".', $tag, $this->dav_name );
return false;
}
}
@ -1111,7 +1091,7 @@ EOQRY;
$found = $this->principal->PrincipalProperty( $tag, $prop, $reply, $denied );
}
if ( ! $found && ! $request->ServerProperty($tag, $prop, $reply) ) {
dbg_error_log( 'DAVResource', 'Request for unsupported property "%s" of resource "%s".', $tag, $this->dav_name );
// dbg_error_log( 'DAVResource', 'Request for unsupported property "%s" of resource "%s".', $tag, $this->dav_name );
$not_found[] = $reply->Tag($tag);
}
}
@ -1159,7 +1139,7 @@ EOQRY;
if ( !$this->Exists() ) return null;
if ( $props_only ) {
dbg_error_log('LOG WARNING','DAVResource::RenderAsXML Called misguidedly - should be to DAVResource::GetPropStat' );
dbg_error_log('LOG WARNING','DAVResource::RenderAsXML Called misguidedly - should be call to DAVResource::GetPropStat' );
return $this->GetPropStat( $properties, $reply, true );
}

View File

@ -290,6 +290,38 @@ function ConstructURL( $partial_path, $force_script = false ) {
}
/**
* Deconstruct a dav_name from the supplied URL. The dav_name will be urldecoded.
*
* @param string $partial_path The part of the path after the script name
*/
function DeconstructURL( $url, $force_script = false ) {
global $c;
$dav_name = rawurldecode($url);
/** Allow a path like .../username/calendar.ics to translate into the calendar URL */
if ( preg_match( '#^(/[^/]+/[^/]+).ics$#', $dav_name, $matches ) ) {
$dav_name = $matches[1]. '/';
}
/** remove any leading protocol/server/port/prefix... */
if ( !isset($c->deconstruction_base_path) ) $c->deconstruction_base_path = ConstructURL('/');
if ( preg_match( '%^(.*?)'.str_replace('%', '\\%',$c->deconstruction_base_path).'(.*)$%', $dav_name, $matches ) ) {
if ( $matches[1] == '' || $matches[1] == $c->protocol_server_port ) {
$dav_name = $matches[2];
}
}
/** strip doubled slashes */
if ( strstr($dav_name,'//') ) $dav_name = preg_replace( '#//+#', '/', $dav_name);
if ( substr($dav_name,0,1) != '/' ) $dav_name = '/'.$dav_name;
return $dav_name;
}
/**
* Convert a date from ISO format into the sad old HTTP format.
* @param string $isodate The date to convert

View File

@ -290,6 +290,38 @@ function ConstructURL( $partial_path, $force_script = false ) {
}
/**
* Deconstruct a dav_name from the supplied URL. The dav_name will be urldecoded.
*
* @param string $partial_path The part of the path after the script name
*/
function DeconstructURL( $url, $force_script = false ) {
global $c;
$dav_name = rawurldecode($url);
/** Allow a path like .../username/calendar.ics to translate into the calendar URL */
if ( preg_match( '#^(/[^/]+/[^/]+).ics$#', $dav_name, $matches ) ) {
$dav_name = $matches[1]. '/';
}
/** remove any leading protocol/server/port/prefix... */
if ( !isset($c->deconstruction_base_path) ) $c->deconstruction_base_path = ConstructURL('/');
if ( preg_match( '%^(.*?)'.str_replace('%', '\\%',$c->deconstruction_base_path).'(.*)$%', $dav_name, $matches ) ) {
if ( $matches[1] == '' || $matches[1] == $c->protocol_server_port ) {
$dav_name = $matches[2];
}
}
/** strip doubled slashes */
if ( strstr($dav_name,'//') ) $dav_name = preg_replace( '#//+#', '/', $dav_name);
if ( substr($dav_name,0,1) != '/' ) $dav_name = '/'.$dav_name;
return $dav_name;
}
/**
* Convert a date from ISO format into the sad old HTTP format.
* @param string $isodate The date to convert