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
51 - (id)initWithName:(NSString *)_name
52 associations:(NSDictionary *)_config
53 template:(WOElement *)_t
55 if ((self = [super initWithName:_name associations:_config template:_t])) {
56 WOAssociation *sidInUrlAssoc;
58 sidInUrlAssoc = OWGetProperty(_config, @"?wosid");
59 self->action = OWGetProperty(_config, @"action");
60 self->pageName = OWGetProperty(_config, @"pageName");
62 self->queryDictionary = OWGetProperty(_config, @"queryDictionary");
63 self->queryParameters = OWExtractQueryParameters(_config);
64 self->actionClass = OWGetProperty(_config, @"actionClass");
65 self->directActionName = OWGetProperty(_config, @"directActionName");
67 self->sidInUrl = (sidInUrlAssoc)
68 ? [sidInUrlAssoc boolValueInComponent:nil]
75 [self->actionClass release];
76 [self->directActionName release];
77 [self->queryDictionary release];
78 [self->queryParameters release];
79 [self->action release];
80 [self->pageName release];
86 - (void)takeValuesFromRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
89 if (self->disabled != nil) {
90 if ([self->disabled boolValueInComponent:[_ctx component]])
94 if ((formValue = [_rq formValueForKey:OWFormElementName(self, _ctx)])) {
95 //NSLog(@"%@: value=%@ ..", [self elementID], formValue);
97 if ([self->value isValueSettable]) {
98 [self->value setStringValue:formValue
99 inComponent:[_ctx component]];
101 if ((self->action != nil) || (self->pageName != nil))
102 [_ctx addActiveFormElement:self];
106 - (id)invokeActionForRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
107 if (self->disabled != nil) {
108 if ([self->disabled boolValueInComponent:[_ctx component]])
113 check whether this is the active form element (determined in take-values)
115 if (![[_ctx elementID] isEqualToString:[_ctx senderID]]) {
116 NSLog(@"SUBMITBUTTON is not active (%@ vs %@) !",
117 [_ctx elementID], [_ctx senderID]);
121 if (self->action != nil)
122 return [self executeAction:self->action inContext:_ctx];
124 if (self->pageName) {
125 NSString *pname = nil;
126 WOComponent *page = nil;
128 pname = [self->pageName stringValueInComponent:[_ctx component]];
129 page = [[_ctx application] pageWithName:pname inContext:_ctx];
132 [[_ctx session] logWithFormat:
133 @"%@[0x%08X]: did not find page with name %@ !",
134 NSStringFromClass([self class]), self, pname];
136 [self logWithFormat:@"showing page %@", page];
143 /* generate response */
145 - (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
148 v = [self->value stringValueInComponent:[_ctx component]];
149 WOResponse_AddCString(_response, "<input type=\"submit\" name=\"");
150 [_response appendContentHTMLAttributeValue:OWFormElementName(self, _ctx)];
151 WOResponse_AddCString(_response, "\" value=\"");
152 [_response appendContentHTMLAttributeValue:v];
153 WOResponse_AddChar(_response, '"');
155 if ([self->disabled boolValueInComponent:[_ctx component]])
156 WOResponse_AddCString(_response, " disabled=\"disabled\"");
158 [self appendExtraAttributesToResponse:_response inContext:_ctx];
159 if (self->otherTagString != nil) {
160 v = [self->otherTagString stringValueInComponent:[_ctx component]];
161 WOResponse_AddChar(_response, ' ');
162 WOResponse_AddString(_response, v);
164 WOResponse_AddEmptyCloseParens(_response, _ctx);
169 - (NSString *)associationDescription {
170 NSMutableString *str;
172 str = [NSMutableString stringWithCapacity:128];
173 [str appendString:[super associationDescription]];
175 if (self->action) [str appendFormat:@" action=%@", self->action];
176 if (self->pageName) [str appendFormat:@" page=%@", self->pageName];
178 if (self->actionClass)
179 [str appendFormat:@" actionClass=%@", self->actionClass];
180 if (self->directActionName)
181 [str appendFormat:@" directAction=%@", self->directActionName];
185 @end /* WOSubmitButton */