2 Copyright (C) 2000-2006 SKYRIX Software AG
3 Copyright (C) 2006 Helge Hess
5 This file is part of SOPE.
7 SOPE is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
12 SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with SOPE; see the file COPYING. If not, write to the
19 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
24 #include "WOElement+private.h"
27 @implementation WOInput
29 static BOOL takeValueDebugOn = YES;
32 return [super version] + 0 /* v2 */;
36 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
38 NSAssert2([super version] == 2,
39 @"invalid superclass (%@) version %i !",
40 NSStringFromClass([self superclass]), [super version]);
42 if ((takeValueDebugOn = [ud boolForKey:@"WODebugTakeValues"]))
43 NSLog(@"WOInput: WODebugTakeValues on.");
46 - (id)initWithName:(NSString *)_name
47 associations:(NSDictionary *)_associations
48 template:(WOElement *)_rootChild
50 self = [super initWithName:_name associations:_associations
53 self->containsForm = YES;
54 self->name = OWGetProperty(_associations, @"name");
55 self->value = OWGetProperty(_associations, @"value");
56 self->disabled = OWGetProperty(_associations, @"disabled");
58 /* type is defined by the element itself ... */
59 [(NSMutableDictionary *)_associations removeObjectForKey:@"type"];
61 if ([_associations objectForKey:@"NAME"]) {
62 [self warnWithFormat:@"found 'NAME' association in element %@, "
63 @"'name' is probably the right thing.", _name];
71 [self->value release];
72 [self->disabled release];
78 NSString *OWFormElementName(WOInput *self, WOContext *_ctx) {
81 if (self->name == nil)
82 return [_ctx elementID];
84 if ((name = [self->name stringValueInComponent:[_ctx component]]) != nil)
89 @"in element %@, 'name' attribute configured (%@),"
90 @"but no name assigned (using elementID as name) !",
92 return [_ctx elementID];
95 /* taking form values */
97 - (id)parseFormValue:(id)_value inContext:(WOContext *)_ctx {
98 /* redefined in subclasses */
102 - (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx {
106 if ([self->disabled boolValueInComponent:[_ctx component]])
109 formName = OWFormElementName(self, _ctx);
110 if ((formValue = [_req formValueForKey:formName]) == nil)
111 // TODO: is this correct?
114 if (takeValueDebugOn) {
116 @"%s(%@): form=%@ ctx=%@ value=%@ ..", __PRETTY_FUNCTION__,
117 [_ctx elementID], formName, [_ctx contextID], formValue];
120 if ([self->value isValueSettable]) {
121 formValue = [self parseFormValue:formValue inContext:_ctx];
122 [self->value setStringValue:formValue inComponent:[_ctx component]];
124 else if (self->value != nil) {
126 @"%s: form value is not settable: %@", __PRETTY_FUNCTION__,
133 - (NSString *)associationDescription {
134 NSMutableString *str;
136 str = [NSMutableString stringWithCapacity:128];
137 if (self->value != nil) [str appendFormat:@" value=%@", self->value];
138 if (self->name != nil) [str appendFormat:@" name=%@", self->name];
140 if (self->disabled) [str appendFormat:@" disabled=%@", self->disabled];