]> err.no Git - sope/commitdiff
properly handle multivalue query parameters
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 19 Jul 2005 13:57:11 +0000 (13:57 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 19 Jul 2005 13:57:11 +0000 (13:57 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@918 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-appserver/NGObjWeb/ChangeLog
sope-appserver/NGObjWeb/Version
sope-appserver/NGObjWeb/WOContext.m

index 21edb7f4c5b1ff7351d95d964dd2fa7aa66e563f..70f970dc5a6d0d21d4252f9a2b27cd0b56ea2277 100644 (file)
@@ -1,7 +1,10 @@
 2005-07-19  Helge Hess  <helge.hess@opengroupware.org>
 
+       * WOContext.m: properly generate multivalue query parameters (value is
+         an NSArray) (v4.5.176)
+
        * NGObjWeb/WOApplication.h: added +isDirectConnectEnabled,
-         +setCGIAdaptorURL:, +cgiAdaptorURL prototypes (v4.5.174)
+         +setCGIAdaptorURL:, +cgiAdaptorURL prototypes (v4.5.175)
 
        * v4.5.174
 
index 9c4998b7b3012195f0f085ae8f1901758a9205de..a59509041adebdfcea59dbf5a3433d79a1eba456 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=175
+SUBMINOR_VERSION:=176
 
 # v4.5.122 requires libNGExtensions v4.5.153
 # v4.5.91  requires libNGExtensions v4.5.134
index cfe9045841b16d41f5e5ad66aba249bbfce765b4..6cf29a2bf7c691f8815c3942fad1bbf3caef902c 100644 (file)
@@ -732,21 +732,43 @@ void WOContext_leaveComponent(WOContext *self, WOComponent *_component) {
   
   qs   = [MutableStrClass stringWithCapacity:256];
   keys = [_queryDict keyEnumerator];
-  for (isFirst = YES; (key = [keys nextObject]); ) {
-    NSString *value;
+  for (isFirst = YES; (key = [keys nextObject]) != nil; ) {
+    id value;
     
-    if (isFirst)
-      isFirst = NO;
-    else
-      [qs appendString:self->qpJoin];
+    if (isFirst) isFirst = NO;
+    else [qs appendString:self->qpJoin];
+    
+    value = [_queryDict objectForKey:key];
+    if ([value isKindOfClass:[NSArray class]]) {
+      NSArray  *a = value;
+      unsigned i, count;
+      
+      for (i = 0, count = [a count]; i < count; i++) {
+       value = [a objectAtIndex:i];
+       
+       if (isFirst) isFirst = NO;
+       else [qs appendString:self->qpJoin];
+
+       // TODO: code duplication ...
+       value = ![value isNotNull] ? nil : [value stringValue];
+       key   = [key   stringByEscapingURL];
+       value = [value stringByEscapingURL];
     
-    value = [[_queryDict objectForKey:key] stringValue];
+       [qs appendString:key];
+       if (value != nil) {
+         [qs appendString:@"="];
+         [qs appendString:value];
+       }
+      }
+      continue;
+    }
     
+    value = ![value isNotNull] ? nil : [value stringValue];
     key   = [key   stringByEscapingURL];
     value = [value stringByEscapingURL];
     
     [qs appendString:key];
-    if (value) {
+    if (value != nil) {
       [qs appendString:@"="];
       [qs appendString:value];
     }