Author: ts
Date: Tue Sep 25 06:28:31 2007
New Revision: 6256
Log:
- Make unknown live properties appear as dead properties.
# We silently ignored them so far. Hint from Wireshark session.
- Made parsing of dead propertier its own method.
- Fixed spelling errors in property content extraction.
- Corrected handling of error responses.
Modified:
trunk/Webdav/src/transport.php
Modified: trunk/Webdav/src/transport.php
==============================================================================
--- trunk/Webdav/src/transport.php [iso-8859-1] (original)
+++ trunk/Webdav/src/transport.php [iso-8859-1] Tue Sep 25 06:28:31 2007
@@ -709,18 +709,7 @@
// Other namespaces are always dead properties
else
{
- // Create standalone XML for property
- // @TODO How do we need to take care about different
namespaces here?
- // It may possibly occur, that shortcut clashes occur...
- $propDom = new DOMDocument();
- $copiedNode = $propDom->importNode( $currentNode, true );
- $propDom->appendChild( $copiedNode );
-
- $property = new ezcWebdavDeadProperty(
- $currentNode->namespaceURI,
- $currentNode->localName,
- $propDom->saveXML()
- );
+ $property = $this->extractDeadProperty( $currentNode );
$flag === null ? $storage->attach( $property ) :
$storage->attach( $property, $flag );
}
}
@@ -728,7 +717,31 @@
}
/**
- * Extracts a live property from an DOMElement.
+ * Extract a dead property from a DOMElement.
+ * This method is responsible for parsing a [EMAIL PROTECTED]
ezcWebdavDeadProperty}
+ * (unknown) property from a DOMElement.
+ *
+ * @param DOMElement $domElement
+ * @return ezcWebdavDeadProperty
+ * @todo How do we need to take care about different namespaces here?
+ */
+ protected function extractDeadProperty( DOMElement $domElement )
+ {
+ // Create standalone XML for property
+ // It may possibly occur, that shortcut clashes occur...
+ $propDom = new DOMDocument();
+ $copiedNode = $propDom->importNode( $domElement, true );
+ $propDom->appendChild( $copiedNode );
+
+ return new ezcWebdavDeadProperty(
+ $domElement->namespaceURI,
+ $domElement->localName,
+ $propDom->saveXML()
+ );
+ }
+
+ /**
+ * Extracts a live property from a DOMElement.
* This method is responsible for parsing WebDAV live properties. The
* DOMElement $domElement must be an XML element in the DAV: namepsace. If
* the received property is not defined in RFC 2518, null is returned.
@@ -812,20 +825,20 @@
$property = new ezcWebdavSourceProperty();
if ( $domElement->hasChildNodes() === true )
{
- $property->links = $this->extractLinkContent( $domElemente
);
+ $property->links = $this->extractLinkContent( $domElement
);
}
break;
case 'supportedlock':
$property = new ezcWebdavSupportedLockProperty();
if ( $domElement->hasChildNodes() === true )
{
- $property->links = $this->extractLockEntryContent(
$domElemente );
+ $property->links = $this->extractLockEntryContent(
$domElement );
}
break;
default:
// @TODO Implement extension plugins
// Currently just ignore
- $property = null;
+ $property = $this->extractDeadProperty( $domElement );
}
return $property;
}
@@ -1124,7 +1137,7 @@
header( (string) $info->response );
// Send headers defined by response
- $headers = $info->repsonse->getHeaders();
+ $headers = $info->response->getHeaders();
foreach ( $headers as $name => $value )
{
header( "{$name}: {$value}" );
@@ -1153,7 +1166,10 @@
foreach ( $response->responses as $subResponse )
{
$multistatusElement->appendChild(
- $dom->importNode( $this->processResponse( $subResponse
)->body->documentElement, true )
+ ( $subResponse instanceof ezcWebdavErrorResponse
+ ? $dom->importNode( $this->processErrorResponse(
$subResponse, true )->body->documentElement, true )
+ : $dom->importNode( $this->processResponse( $subResponse
)->body->documentElement, true )
+ )
);
}
@@ -1235,24 +1251,28 @@
* Returns an XML representation of the given response object.
*
* @param ezcWebdavErrorResponse $response
+ * @param bool $xml DOMDocument in result only generated of true.
* @return DOMDocument|null
*/
- protected function processErrorResponse( ezcWebdavErrorResponse $response )
- {
- $dom = $this->getDom();
-
- $responseElement = $dom->appendChild(
- $this->newDomElement( $dom, 'response' )
- );
-
- $responseElement->appendChild(
- $this->newDomElement( $dom, 'href' )
- )->nodeValue = $this->options->pathFactory->generateUriFromPath(
$response->requestUri );
-
- $responseElement->appendChild(
- $this->newDomElement( $dom, 'status' )
- )->nodeValue = (string) $response;
-
+ protected function processErrorResponse( ezcWebdavErrorResponse $response,
$xml = false )
+ {
+ $dom = null;
+ if ( $xml === true )
+ {
+ $dom = $this->getDom();
+ $responseElement = $dom->appendChild(
+ $this->newDomElement( $dom, 'response' )
+ );
+
+ $responseElement->appendChild(
+ $this->newDomElement( $dom, 'href' )
+ )->nodeValue = $this->options->pathFactory->generateUriFromPath(
$response->requestUri );
+
+ $responseElement->appendChild(
+ $this->newDomElement( $dom, 'status' )
+ )->nodeValue = (string) $response;
+
+ }
return new ezcWebdavDisplayInformation( $response, $dom );
}
@@ -1285,10 +1305,12 @@
$response->setHeader( 'Content-Type', $contentTypeHeader );
}
// Generate Content-Length header if necessary
+ /*
if ( $response->getHeader( 'Content-Length' ) === null )
{
$response->setHeader( 'Content-Length', ( strlen(
$response->resource->content ) + 1 ) );
}
+ */
return new ezcWebdavDisplayInformation( $response,
$response->resource->content );
}
--
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components