]> err.no Git - sope/commitdiff
improved WebDAV support for Cadaver
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sun, 11 Jun 2006 14:31:00 +0000 (14:31 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sun, 11 Jun 2006 14:31:00 +0000 (14:31 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1271 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-appserver/NGObjWeb/ChangeLog
sope-appserver/NGObjWeb/DynamicElements/WOxHTMLElemBuilder.m
sope-appserver/NGObjWeb/Templates/WOxComponentElemBuilder.m
sope-appserver/NGObjWeb/Templates/WOxElemBuilder.m
sope-appserver/NGObjWeb/Version
sope-appserver/NGObjWeb/WORequestHandler.m
sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m
sope-appserver/NGObjWeb/doc/WOCopyValue.3 [new file with mode: 0644]
sope-appserver/NGObjWeb/doc/WOSetHeader.3 [new file with mode: 0644]

index 438bac41352e9f89d001e4403150088443d3f40b..c4b4db3ab5857e4cbd306f241c71b0b8ce076f87 100644 (file)
@@ -1,3 +1,13 @@
+2006-06-11  Helge Hess  <helge.hess@opengroupware.org>
+
+       * v4.5.235
+
+       * WebDAV/SoWebDAVRenderer.m: added a hack for Cadaver so that it
+         doesn't show errors on missing properties (enabled 'brief' mode),
+         log missing properties if debug is enabled
+
+       * fixed some gcc 4.1 warnings
+
 2006-06-04  Helge Hess  <helge.hess@opengroupware.org>
 
        * WebDAV/SoWebDAVDispatcher.m: added some basic REPORT support, allows
index 2de3dc235f620daa7433405fec9daf6a05aa640d..a69b5bf06c19a28dfa820917e505a564d13ad0a5 100644 (file)
@@ -222,7 +222,7 @@ static Class WOGenericElementClass   = Nil;
   
   children = [_element hasChildNodes]
     ? [_b buildNodes:[_element childNodes] templateBuilder:_b]
-    : nil;
+    : (NSArray *)nil;
 
   if ((count = [children count]) == 0)
     return nil;
index 958f2172f81425ae295845701e206f9f64c9145b..ee0c00f330dad8252c4b86abe45afda6d2253dea 100644 (file)
@@ -115,7 +115,7 @@ static NGLogger *debugLogger = nil;
   
   children = [_element hasChildNodes]
     ? [_b buildNodes:[_element childNodes] templateBuilder:_b]
-    : nil;
+    : (NSArray *)nil;
   
   /* build associations */
   
@@ -257,7 +257,7 @@ static NGLogger *debugLogger = nil;
   
   children = [_element hasChildNodes]
     ? [_b buildNodes:[_element childNodes] templateBuilder:_b]
-    : nil;
+    : (NSArray *)nil;
   
   if (compName == nil)
     compName = [_element tagName];
index e3490e57ca3d336ac6e2479794221c6c4df1fbd6..140683c72925dd01f65095f02dd85f997d59d87c 100644 (file)
@@ -772,7 +772,7 @@ static WOAssociation *yesAssoc = nil;
   
   children = [_tag hasChildNodes]
     ? [_b buildNodes:[_tag childNodes] templateBuilder:_b]
-    : nil;
+    : (NSArray *)nil;
   
   return [self wrapElements:children inElementOfClass:_class];
 }
index 65ce298d0f348c6fe7ebf128765882e529dc7c2c..2c7d7416a29302ebedbabb202c6bbc6037f17c76 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=234
+SUBMINOR_VERSION:=235
 
 # v4.5.234 requires libDOM          v4.5.21
 # v4.5.214 requires libNGExtensions v4.5.179
index 718e51cfbf74f5c2868627dab8cdfc7f1e1820b7..c050fc0fc89fac729bad8ddb5e331f1449c61e77 100644 (file)
@@ -372,7 +372,7 @@ static NGLogger *perfLogger        = nil;
 #endif
     
   value = [_sn isTerminating]
-    ? (id)@"nil"
+    ? (NSString *)@"nil"
     : [_sn sessionID];
     
   cookie = [WOCookie cookieWithName:[app name]
index b7a1ad23342415225ac3aaa1c73b9843ce6d86f5..f73c0e1e7b0aee82c38f8e98143ed240809bb34e 100644 (file)
@@ -29,6 +29,7 @@
 #include <NGObjWeb/WOResponse.h>
 #include <NGObjWeb/WORequest.h>
 #include <NGObjWeb/WOElement.h>
+#include <NGObjWeb/WEClientCapabilities.h>
 #include <SaxObjC/XMLNamespaces.h>
 #include <NGExtensions/NSString+Ext.h>
 #include "common.h"
@@ -573,6 +574,15 @@ static BOOL         formatOutput = NO;
   
   r = [_ctx response];
   isBrief = [[[_ctx request] headerForKey:@"brief"] hasPrefix:@"t"] ? YES : NO;
+
+  /* 
+     Hack for Cadaver which shows errors when requested properties are missing.
+     TODO: Might not apply to all properties, find out the minimum Cadaver set.
+  */
+  if (!isBrief) {
+    isBrief = [[[[_ctx request] clientCapabilities] userAgentType]
+                      isEqualToString:@"Cadaver"];
+  }
   
   if (debugOn) {
     [self debugWithFormat:@"    render entry: 0x%08X<%@>%s%s",
@@ -679,8 +689,9 @@ static BOOL         formatOutput = NO;
     value = [key isEqualToString:@"{DAV:}href"]
       ? href
       : [entry valueForKey:okey];
-
-    if (![value isNotNull]) {
+    
+    /* always render resourcetype, otherwise Cadaver is confused */
+    if (![value isNotNull] && ![key isEqualToString:@"{DAV:}resourcetype"]) {
       if (missingProps == nil)
        missingProps = [[NSMutableArray alloc] initWithCapacity:8];
       [missingProps addObject:key];
@@ -701,6 +712,11 @@ static BOOL         formatOutput = NO;
     /* close previous propstat and open a new one */
     [r appendContentString:@"</D:prop></D:propstat>"];
     if (formatOutput) [r appendContentCharacter:'\n'];
+
+    if (debugOn) {
+      [self debugWithFormat:@"      missing: %@",
+             [missingProps componentsJoinedByString:@","]];
+    }
     
     [r appendContentString:@"<D:propstat>"];
     [r appendContentString:
diff --git a/sope-appserver/NGObjWeb/doc/WOCopyValue.3 b/sope-appserver/NGObjWeb/doc/WOCopyValue.3
new file mode 100644 (file)
index 0000000..f5c82f5
--- /dev/null
@@ -0,0 +1,38 @@
+.TH WOCopyValue 3 "June 2006" "SOPE" "SOPE Dynamic Element Reference"
+.\" DO NOT EDIT: this file got autogenerated using woapi2man from:
+.\"   ../DynamicElements/WOCopyValue.api
+.\" 
+.\" Copyright (C) 2006 SKYRIX Software AG. All rights reserved.
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2006 SKYRIX Software AG. All rights reserved.
+.\"
+.\" Check the COPYING file for further information.
+.\"
+.\" Created with the help of:
+.\"   http://www.schweikhardt.net/man_page_howto.html
+.\"
+
+.SH NAME
+WOCopyValue
+
+.SH SYNOPSIS
+.B WOCopyValue
+{ copyValues;  finishValues;  resetValues; }
+
+.SH BINDINGS
+.IP copyValues
+.IP finishValues
+.IP resetValues
+The value of 'resetValues' will be evaluated in a boolean context.
+
+.SH BUGS
+SOPE related bugs are collected in the OpenGroupware.org Bugzilla:
+  http://bugzilla.opengroupware.org/
+
+.SH AUTHOR
+The SOPE community <developer at opengroupware.org>.
+
+.SH SEE ALSO
+.BR sope-ngobjweb-defaults
+
diff --git a/sope-appserver/NGObjWeb/doc/WOSetHeader.3 b/sope-appserver/NGObjWeb/doc/WOSetHeader.3
new file mode 100644 (file)
index 0000000..f66f18d
--- /dev/null
@@ -0,0 +1,39 @@
+.TH WOSetHeader 3 "June 2006" "SOPE" "SOPE Dynamic Element Reference"
+.\" DO NOT EDIT: this file got autogenerated using woapi2man from:
+.\"   ../DynamicElements/WOSetHeader.api
+.\" 
+.\" Copyright (C) 2006 SKYRIX Software AG. All rights reserved.
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2006 SKYRIX Software AG. All rights reserved.
+.\"
+.\" Check the COPYING file for further information.
+.\"
+.\" Created with the help of:
+.\"   http://www.schweikhardt.net/man_page_howto.html
+.\"
+
+.SH NAME
+WOSetHeader
+
+.SH SYNOPSIS
+.B WOSetHeader
+{ header;  value;  addToExisting;  object; }
+
+.SH BINDINGS
+.IP header
+.IP value
+.IP addToExisting
+The value of 'addToExisting' will be evaluated in a boolean context.
+.IP object
+
+.SH BUGS
+SOPE related bugs are collected in the OpenGroupware.org Bugzilla:
+  http://bugzilla.opengroupware.org/
+
+.SH AUTHOR
+The SOPE community <developer at opengroupware.org>.
+
+.SH SEE ALSO
+.BR sope-ngobjweb-defaults
+