]> err.no Git - sope/blob - sope-appserver/NGObjWeb/DynamicElements/WOInput.m
added new auth realm method
[sope] / sope-appserver / NGObjWeb / DynamicElements / WOInput.m
1 /*
2   Copyright (C) 2000-2005 SKYRIX Software AG
3
4   This file is part of SOPE.
5
6   SOPE is free software; you can redistribute it and/or modify it under
7   the terms of the GNU Lesser General Public License as published by the
8   Free Software Foundation; either version 2, or (at your option) any
9   later version.
10
11   SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12   WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14   License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with SOPE; see the file COPYING.  If not, write to the
18   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19   02111-1307, USA.
20 */
21
22 #include "WOInput.h"
23 #include "WOElement+private.h"
24 #include "decommon.h"
25
26 @implementation WOInput
27
28 static BOOL takeValueDebugOn = YES;
29
30 + (int)version {
31   return [super version] + 0 /* v2 */;
32 }
33
34 + (void)initialize {
35   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
36   
37   NSAssert2([super version] == 2,
38             @"invalid superclass (%@) version %i !",
39             NSStringFromClass([self superclass]), [super version]);
40
41   if ((takeValueDebugOn = [ud boolForKey:@"WODebugTakeValues"]))
42     NSLog(@"WOInput: WODebugTakeValues on.");
43 }
44
45 - (id)initWithName:(NSString *)_name
46   associations:(NSDictionary *)_associations
47   template:(WOElement *)_rootChild
48 {
49   self = [super initWithName:_name associations:_associations
50                 template:_rootChild];
51   if (self) {
52     self->containsForm = YES;
53     self->name     = OWGetProperty(_associations, @"name");
54     self->value    = OWGetProperty(_associations, @"value");
55     self->disabled = OWGetProperty(_associations, @"disabled");
56     
57     /* type is defined by the element itself ... */
58     [(NSMutableDictionary *)_associations removeObjectForKey:@"type"];
59     
60     if ([_associations objectForKey:@"NAME"]) {
61       NSLog(@"WARNING: found 'NAME' association in element %@, "
62             @"'name' is probably the right thing ..",
63             self);
64     }
65   }
66   return self;
67 }
68
69 - (void)dealloc {
70   [self->name     release];
71   [self->value    release];
72   [self->disabled release];
73   [super dealloc];
74 }
75
76 /* form support */
77
78 NSString *OWFormElementName(WOInput *self, WOContext *_ctx) {
79   NSString *name;
80   
81   if (self->name == nil)
82     return [_ctx elementID];
83   
84   if ((name = [self->name stringValueInComponent:[_ctx component]]) != nil)
85     return name;
86   
87   [[_ctx component]
88          logWithFormat:
89                @"WARNING: in element %@, 'name' attribute configured (%@),"
90                @"but no name assigned (using elementID as name) !",
91                self, self->name];
92   return [_ctx elementID];
93 }
94
95 /* taking form values */
96
97 - (id)parseFormValue:(id)_value inContext:(WOContext *)_ctx {
98   /* redefined in subclasses */
99   return _value;
100 }
101
102 - (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx {
103   NSString *formName;
104   id formValue = nil;
105   
106   if ([self->disabled boolValueInComponent:[_ctx component]])
107     return;
108   
109   formName = OWFormElementName(self, _ctx);
110   if ((formValue = [_req formValueForKey:formName]) == nil)
111     // TODO: is this correct?
112     return;
113   
114   if (takeValueDebugOn) {
115     [self logWithFormat:
116             @"%s(%@): form=%@ ctx=%@ value=%@ ..", __PRETTY_FUNCTION__,
117             [_ctx elementID], formName, [_ctx contextID], formValue];
118   }
119   
120   if ([self->value isValueSettable]) {
121     formValue = [self parseFormValue:formValue inContext:_ctx];
122     [self->value setStringValue:formValue inComponent:[_ctx component]];
123   }
124   else if (self->value != nil) {
125     [self logWithFormat:
126             @"%s: form value is not settable: %@", __PRETTY_FUNCTION__,
127             self->value];
128   }
129 }
130
131 /* description */
132
133 - (NSString *)associationDescription {
134   NSMutableString *str;
135   
136   str = [NSMutableString stringWithCapacity:128];
137   if (self->value)    [str appendFormat:@" value=%@",    self->value];
138   if (self->name)     [str appendFormat:@" name=%@",     self->name];
139   if (self->disabled) [str appendFormat:@" disabled=%@", self->disabled];
140   return str;
141 }
142
143 @end /* WOInput */