]> err.no Git - sope/commitdiff
improved query string handling
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Mon, 18 Jul 2005 15:27:20 +0000 (15:27 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Mon, 18 Jul 2005 15:27:20 +0000 (15:27 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@912 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-appserver/NGObjWeb/ChangeLog
sope-appserver/NGObjWeb/DynamicElements/WOFileUpload.m
sope-appserver/NGObjWeb/DynamicElements/_WOComplexHyperlink.m
sope-appserver/NGObjWeb/SoObjects/SoLookupAssociation.h
sope-appserver/NGObjWeb/Version
sope-appserver/NGObjWeb/WOElement.m
sope-mime/NGImap4/TODO

index 6317cc2fd79050f6022c2a81992f333ac95401a0..fbe97e3c60263b95c0ee7bbcb757e146016b987a 100644 (file)
@@ -1,3 +1,14 @@
+2005-07-18  Helge Hess  <helge.hess@opengroupware.org>
+
+       * v4.5.173
+       
+       * DynamicElements/WOFileUpload.m: improved debug logging
+       
+       * DynamicElements/_WOComplexHyperlink.m: minor code cleanups
+       
+       * WOElement.m: improved handling of query parameters (now handles
+         arrays of form values)
+
 2005-07-13  Helge Hess  <helge.hess@opengroupware.org>
 
        * WebDAV/SoObject+SoDAV.m: changed not to return an etag per default
index 693eaf5df1d2b038841f2dde6b5a8e24f2733b32..9e763c9d35b3d62cb4985e3838af736a2ba190ce 100644 (file)
@@ -85,28 +85,31 @@ static NGMimeType *multipartFormData = nil;
   
   if ([self->disabled boolValueInComponent:[_ctx component]])
     return;
-
+  
   currentId = OWFormElementName(self, _ctx);
-
+  
   if ((formValue = [_rq formValueForKey:currentId]) == nil)
     return;
 
   contentType = [[_rq httpRequest] contentType];
       
   if (![contentType hasSameType:multipartFormData]) {
-    NSLog(@"WARNING: tried to apply file-upload value of %@ from "
-         @"a non multipart-form request (value=%@) !",
-         [_ctx elementID], formValue);
+    [self warnWithFormat:
+           @"Tried to apply file-upload value of eid=%@ from "
+           @"a non multipart-form request (value=%@).",
+           [_ctx elementID], formValue];
     return;
   }
   
 #if 0
   NSLog(@"%@: value=%@ ..", [self elementID], formValue);
 #endif
-
+  
   if ([self->data isValueSettable])
     [self->data setValue:formValue inComponent:[_ctx component]];
-
+  
+  /* the remainder is for locating the file path */
+  
   if (![self->filePath isValueSettable])
     return;
   
@@ -139,7 +142,7 @@ static NGMimeType *multipartFormData = nil;
        [[DispClass alloc] initWithString:[disposition stringValue]];
       disposition = [disposition autorelease];
     }
-              
+    
     formName = [(NGMimeContentDispositionHeaderField *)disposition name];
       
     if ([formName isEqualToString:currentId]) {
index 61c4ce765a7fc4742455ca7edc3d8075e6bf1842..e9cd262e3c2fd4cf2a7a820415c75f5f808318da 100644 (file)
@@ -157,16 +157,16 @@ static Class NSURLClass = Nil;
 - (void)takeValuesFromRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   /* links can take form values !!!! (for query-parameters) */
   
-  if (self->queryParameters) {
+  if (self->queryParameters != nil) {
     /* apply values to ?style parameters */
     WOComponent  *sComponent = [_ctx component];
     NSEnumerator *keys;
     NSString     *key;
-
+    
     keys = [self->queryParameters keyEnumerator];
-    while ((key = [keys nextObject])) {
+    while ((key = [keys nextObject]) != nil) {
       id assoc, value;
-
+      
       assoc = [self->queryParameters objectForKey:key];
       
       if ([assoc isValueSettable]) {
index 5baa44d01342242d758be313ddcfa748f9c4b05a..1a6a842bfca54529e5213d9709bd905e45869b5c 100644 (file)
@@ -26,7 +26,7 @@
 
 /*
   SoLookupAssociation
-
+  
   This association is experimental, behaviour isn't fixed yet.
   TODO: this should probably traverse relative to the clientObject, not to
         the component?!
index 812ccc057735f616c60536dc13167807ba413742..cc693a19d479a40a698d01687dfae814a9958073 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=172
+SUBMINOR_VERSION:=173
 
 # v4.5.122 requires libNGExtensions v4.5.153
 # v4.5.91  requires libNGExtensions v4.5.134
index 04dd92c8ba46e461b2de51fa99a47d0f42fe165f..2461122de9d8a073df17e989eb090181047fb45e 100644 (file)
@@ -150,9 +150,7 @@ static id numStrings[100];
                      NSStringFromClass([self class]), self];
 }
 
-@end /* WOElement */
-
-@implementation WOElement(QueryString)
+/* QueryString */
 
 - (NSString *)queryStringForQueryDictionary:(NSDictionary *)_queryDict
   andQueryParameters:(NSDictionary *)_paras
@@ -174,11 +172,11 @@ static id numStrings[100];
   
   isFirst = YES;
   paraKeys = [_paras allKeys];
-
+  
   /* ?style parameters */
   
   keys = [_paras keyEnumerator];
-  while ((key = [keys nextObject])) {
+  while ((key = [keys nextObject]) != nil) {
     value = [[_paras objectForKey:key] stringValueInComponent:sComponent];
     value = value ? [value stringByEscapingURL] : @"";
     key   = key   ? [key   stringByEscapingURL] : @"";
@@ -192,15 +190,40 @@ static id numStrings[100];
   }
   
   keys = [_queryDict keyEnumerator];
-  while ((key = [keys nextObject])) {
-    if(![paraKeys containsObject:key]) {
-      value = [[_queryDict objectForKey:key] stringValue];
+  while ((key = [keys nextObject]) != nil) {
+    if([paraKeys containsObject:key])
+      /* overridden by a query parameter (?abc=abc) */
+      continue;
+    
+    value = [_queryDict objectForKey:key];
+    if ([value isKindOfClass:[NSArray class]]) {
+      /* if we bind the queryDictionary to request.formValues */
+      NSArray  *values;
+      unsigned i, count;
+
+      values = (NSArray *)value;
+      for (i = 0, count = [values count]; i < count; i++) {
+       value = [values objectAtIndex:i];
+        value = [value stringValue];
+        value = value ? [value stringByEscapingURL] : @"";
+        key   = key   ? [key   stringByEscapingURL] : @"";
+        
+        if (isFirst) isFirst = NO;
+        else [str appendString:@"&"];
+       
+        [str appendString:key];
+        [str appendString:@"="];
+        [str appendString:value];
+      }
+    }
+    else {
+      value = [value stringValue];
       value = value ? [value stringByEscapingURL] : @"";
       key   = key   ? [key   stringByEscapingURL] : @"";
       
       if (isFirst) isFirst = NO;
       else [str appendString:@"&"];
-      
+        
       [str appendString:key];
       [str appendString:@"="];
       [str appendString:value];
@@ -210,7 +233,7 @@ static id numStrings[100];
   return [str length] > 0 ? str : nil;
 }
 
-@end /* WOElement(QueryString) */
+@end /* WOElement */
 
 NGObjWeb_DECLARE id OWGetProperty(NSDictionary *_set, NSString *_name) {
   register id propValue;
index 4888f6b36a6a7748187463a9dc4114dba1a55c5a..f3cfe9079dc18935a3bdcff4b1ad351971677a0e 100644 (file)
@@ -1,4 +1,6 @@
-# $Id$
+# TODO for NGImap4
+
+TODO: update todo file! ;-)
 
 - OGo bug #660