/*
- Copyright (C) 2000-2004 SKYRIX Software AG
+ Copyright (C) 2000-2005 SKYRIX Software AG
- This file is part of OpenGroupware.org.
+ This file is part of SOPE.
- OGo is free software; you can redistribute it and/or modify it under
+ SOPE is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
- OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+ SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with OGo; see the file COPYING. If not, write to the
+ License along with SOPE; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
-// $Id$
#include <NGObjWeb/WOElement.h>
#include "WOElement+private.h"
NSStringFromClass([self class]), self];
}
-@end /* WOElement */
-
-@implementation WOElement(QueryString)
+/* QueryString */
- (NSString *)queryStringForQueryDictionary:(NSDictionary *)_queryDict
andQueryParameters:(NSDictionary *)_paras
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] : @"";
}
keys = [_queryDict keyEnumerator];
- while ((key = [keys nextObject]) && (![paraKeys containsObject:key])) {
- value = [[_queryDict objectForKey:key] stringValue];
- value = value ? [value stringByEscapingURL] : @"";
- key = key ? [key stringByEscapingURL] : @"";
-
- if (isFirst) isFirst = NO;
- else [str appendString:@"&"];
-
- [str appendString:key];
- [str appendString:@"="];
- [str appendString:value];
+ 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];
+ }
}
return [str length] > 0 ? str : nil;
}
-@end /* WOElement(QueryString) */
+@end /* WOElement */
NGObjWeb_DECLARE id OWGetProperty(NSDictionary *_set, NSString *_name) {
- id propValue = [_set objectForKey:_name];
-
- if (propValue) {
- propValue = RETAIN(propValue);
- [(id)_set removeObjectForKey:_name];
+ register id propValue;
+
+ if ((propValue = [_set objectForKey:_name]) != nil) {
+ propValue = [propValue retain];
+ [(NSMutableDictionary *)_set removeObjectForKey:_name];
}
return propValue;
}