2 Copyright (C) 2000-2005 SKYRIX Software AG
4 This file is part of SOPE.
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
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.
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
23 #include <NGObjWeb/WOApplication.h>
26 @interface WOSubmitButton : WOInput
32 WOAssociation *action;
33 WOAssociation *pageName;
36 WOAssociation *queryDictionary;
37 NSDictionary *queryParameters; // associations beginning with ?
38 WOAssociation *actionClass;
39 WOAssociation *directActionName;
43 @end /* WOSubmitButton */
45 @implementation WOSubmitButton
47 static BOOL WOSubmitButtonEnableValueSync = NO;
53 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
55 WOSubmitButtonEnableValueSync =
56 [ud boolForKey:@"WOSubmitButtonEnableValueSync"];
59 - (id)initWithName:(NSString *)_name
60 associations:(NSDictionary *)_config
61 template:(WOElement *)_t
63 if ((self = [super initWithName:_name associations:_config template:_t])) {
64 WOAssociation *sidInUrlAssoc;
66 sidInUrlAssoc = OWGetProperty(_config, @"?wosid");
67 self->action = OWGetProperty(_config, @"action");
68 self->pageName = OWGetProperty(_config, @"pageName");
70 self->queryDictionary = OWGetProperty(_config, @"queryDictionary");
71 self->queryParameters = OWExtractQueryParameters(_config);
72 self->actionClass = OWGetProperty(_config, @"actionClass");
73 self->directActionName = OWGetProperty(_config, @"directActionName");
75 self->sidInUrl = (sidInUrlAssoc)
76 ? [sidInUrlAssoc boolValueInComponent:nil]
83 [self->actionClass release];
84 [self->directActionName release];
85 [self->queryDictionary release];
86 [self->queryParameters release];
87 [self->action release];
88 [self->pageName release];
94 - (void)takeValuesFromRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
97 if (self->disabled != nil) {
98 if ([self->disabled boolValueInComponent:[_ctx component]])
102 if ((formValue = [_rq formValueForKey:OWFormElementName(self, _ctx)])!=nil) {
103 // [self debugWithFormat:@"%@: value=%@ ..", [self elementID], formValue];
105 if (WOSubmitButtonEnableValueSync) {
107 We need this because some associations (eg
108 WOKeyPathAssociationSystemKVC) report "isValueSettable" as YES,
109 but raise an exception afterwards.
111 This section is disabled per default since its usually not required.
113 See OGo bug #1568 for details.
115 if ([self->value isValueSettable])
116 [self->value setStringValue:formValue inComponent:[_ctx component]];
119 if ((self->action != nil) || (self->pageName != nil))
120 [_ctx addActiveFormElement:self];
124 - (id)invokeActionForRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
125 if (self->disabled != nil) {
126 if ([self->disabled boolValueInComponent:[_ctx component]])
131 check whether this is the active form element (determined in take-values)
133 if (![[_ctx elementID] isEqualToString:[_ctx senderID]]) {
134 NSLog(@"SUBMITBUTTON is not active (%@ vs %@) !",
135 [_ctx elementID], [_ctx senderID]);
139 if (self->action != nil)
140 return [self executeAction:self->action inContext:_ctx];
142 if (self->pageName) {
143 NSString *pname = nil;
144 WOComponent *page = nil;
146 pname = [self->pageName stringValueInComponent:[_ctx component]];
147 page = [[_ctx application] pageWithName:pname inContext:_ctx];
150 [[_ctx session] logWithFormat:
151 @"%@[0x%08X]: did not find page with name %@ !",
152 NSStringFromClass([self class]), self, pname];
154 [self logWithFormat:@"showing page %@", page];
161 /* generate response */
163 - (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
166 v = [self->value stringValueInComponent:[_ctx component]];
167 WOResponse_AddCString(_response, "<input type=\"submit\" name=\"");
168 [_response appendContentHTMLAttributeValue:OWFormElementName(self, _ctx)];
169 WOResponse_AddCString(_response, "\" value=\"");
170 [_response appendContentHTMLAttributeValue:v];
171 WOResponse_AddChar(_response, '"');
173 if ([self->disabled boolValueInComponent:[_ctx component]])
174 WOResponse_AddCString(_response, " disabled=\"disabled\"");
176 [self appendExtraAttributesToResponse:_response inContext:_ctx];
177 if (self->otherTagString != nil) {
178 v = [self->otherTagString stringValueInComponent:[_ctx component]];
179 WOResponse_AddChar(_response, ' ');
180 WOResponse_AddString(_response, v);
182 WOResponse_AddEmptyCloseParens(_response, _ctx);
187 - (NSString *)associationDescription {
188 NSMutableString *str;
190 str = [NSMutableString stringWithCapacity:128];
191 [str appendString:[super associationDescription]];
193 if (self->action) [str appendFormat:@" action=%@", self->action];
194 if (self->pageName) [str appendFormat:@" page=%@", self->pageName];
196 if (self->actionClass)
197 [str appendFormat:@" actionClass=%@", self->actionClass];
198 if (self->directActionName)
199 [str appendFormat:@" directAction=%@", self->directActionName];
203 @end /* WOSubmitButton */