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

Reply via email to