/[cvs]/nfo/php/libs/org.netfrag.patches/phphtmllib/widgets/EditDataItem.php
ViewVC logotype

Contents of /nfo/php/libs/org.netfrag.patches/phphtmllib/widgets/EditDataItem.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations)
Sun Apr 6 01:41:33 2003 UTC (21 years, 5 months ago) by jonen
Branch: MAIN
Changes since 1.3: +31 -70 lines
- removed duplicated decode functions

1 <?
2 /*
3 ## -----------------------------------------------------------------------------
4 ## $Id: EditDataItem.php,v 1.3 2003/04/04 23:58:02 jonen Exp $
5 ## -----------------------------------------------------------------------------
6 ## $Log: EditDataItem.php,v $
7 ## Revision 1.3 2003/04/04 23:58:02 jonen
8 ## + saving of items sould now work with new 'GenericSource' structure
9 ##
10 ## Revision 1.2 2003/04/04 00:43:22 jonen
11 ## + complete rework
12 ##
13 ## Revision 1.1 2003/03/27 01:18:06 jonen
14 ## + inital commit (was orginal 'DataItem.php')
15 ##
16 ## Revision 1.4 2003/02/27 17:33:14 cvsmax
17 ## + enabled saving of data objects at confirm action
18 ## + fixed bug with POST/GET vars at form confirm
19 ## o ToDo: fix all bugs related to un-wanted hidden form elements
20 ## caused by mixed/duplicated POST/GET vars!
21 ##
22 ## Revision 1.3 2003/02/26 21:37:53 cvsmax
23 ## + reworked to enable linking if item value is an array or special expression
24 ##
25 ## Revision 1.2 2003/02/25 03:46:59 cvsmax
26 ## + refactored complete to work now with phphtmllib FormProcessor/Content
27 ## o ToDo: field validation seems not to work...
28 ##
29 ## Revision 1.1 2003/02/22 17:27:31 cvsmax
30 ## + renamed from DataEdit.php
31 ## + added simple support for class 'FormElementsInterface' which is an interface
32 ## to class 'FormBuilder' by binarycloud
33 ## o ToDo: refactor code to use new (added 21.02.03!) 'FormProcess' classes by phphtmllib
34 ## + class 'DataItem' now extends class 'InfoTable'
35 ##
36 ## Revision 1.1 2003/02/21 03:19:35 cvsmax
37 ## + first init
38 ##
39 ##
40 ## -----------------------------------------------------------------------------
41 */
42
43 class EditDataItem extends StandardFormContent {
44
45 /**
46 * holds reference to source object.
47 */
48 var $_datasource = NULL;
49
50 /**
51 * container for arguments needed for e.g. setting the source object.
52 */
53 var $_options = array();
54
55 var $_confirm_msg = "Die Daten wurden erfolgreich gespeichert!";
56
57 function EditDataItem($title, $options = array()) {
58 $this->_options = $options;
59 // prefetch data
60 $this->data_prefetch();
61
62 $parent = get_parent_class($this);
63 $this->$parent($title, $PHP_SELF, 600);
64 }
65
66 function set_data_source(&$source) {
67 $this->_datasource = &$source;
68 }
69
70 function get_data_source() {
71 $initial_locator = php::mkComponent( 'DataSource::Locator', array( adapter_type => 'phpHtmlLib' ) );
72 $proxy = php::mkComponent('DataSource::Generic', $initial_locator, $this->_options['data_locator_meta']);
73 $source = $proxy->get_adapter();
74 $this->set_data_source( &$source );
75 }
76
77 function _check_datasource($function_name) {
78 if ( !is_object($this->_datasource) ) {
79 user_error("DataList::".$function_name."() - DataListSource object is not set");
80 exit;
81 }
82 }
83
84 function data_prefetch() {
85 $this->get_data_source();
86 $this->_check_datasource("data_prefetch");
87
88 $this->_datasource->do_query();
89 }
90
91 /**
92 * This method gets called EVERY time the object is
93 * created. It is used to build all of the
94 * FormElement objects used in this Form.
95 *
96 */
97 function form_init_elements() {
98 //we want an confirmation page for this form.
99 $this->set_confirm();
100
101 $utils = php::mkComponent('WebExplorer::utils');
102 $hidden = $this->get_hidden_elements();
103 $options = $this->_options['decode_args'];
104
105 foreach($this->_datasource->_result as $key => $value) {
106 if($value) {
107 $validation = TRUE;
108 } else {
109 $validation = FALSE;
110 }
111 if(!$utils->decode_item_expr($value, $hidden, $options) && !$utils->decode_item_array($value, $hidden, $options)) {
112 $this->add_element( new FEText($key, $validation, "350px") );
113 }
114 }
115
116 }
117
118 /**
119 * This method is called only the first time the form
120 * page is hit. This enables u to query a DB and
121 * pre populate the FormElement objects with data.
122 *
123 */
124 function form_init_data() {
125 //Pull some valies from the DB
126 //and set the initial values of some of the
127 //form fields.
128
129 $utils = php::mkComponent('WebExplorer::utils');
130 $hidden = $this->get_hidden_elements();
131 $options = $this->_options['decode_args'];
132
133 foreach($this->_datasource->_result as $key => $value) {
134 if(!$utils->decode_item_expr($value, $hidden, $options) && !$utils->decode_item_array($value, $hidden, $options)) {
135 $this->set_element_value($key, $value);
136 }
137 }
138
139 /* OLD !!
140 $post_vars = array_join_merge($_GET, $_POST);
141 foreach ($post_vars as $var => $val) {
142 $this->set_hidden_element_value($var, $val);
143 }
144 */
145
146 }
147
148
149 function form_content() {
150 $this->add_form_block($this->_caption, $this->_dataitem() );
151 }
152
153 function &_dataitem() {
154 $table = &html_table($this->_width,0,2);
155
156 foreach($this->_datasource->_result as $key => $value) {
157 // if item is match by expression we will replace it with an link object
158 if($this->_options['decode']) {
159 $utils = php::mkComponent('WebExplorer::utils');
160 $hidden = $this->get_hidden_elements();
161 $options = $this->_options['decode_args'];
162 if($utils->decode_item_expr($value, $hidden, $options)) {
163 $table->add_row($key, $utils->decode_item_expr($value, $hidden, $options));
164 }
165 // if item is an Array we will replace it with an selection form object
166 elseif($utils->decode_item_array($value, $hidden, $options) ) {
167 $table->add_row($key, $utils->decode_item_array($value, $hidden, $options));
168 } else {
169 $table->add_row($this->element_label($key), $this->element_form($key));
170 }
171 } else {
172 $table->add_row($this->element_label($key), $this->element_form($key));
173 }
174 }
175
176 return $table;
177 }
178
179 /**
180 * This method gets called after the FormElement data has
181 * passed the validation. This enables you to validate the
182 * data against some backend mechanism, say a DB.
183 *
184 */
185 function form_backend_validation() {
186 //$this->add_error("Ass", "some bogus error happened");
187 //return FALSE;
188 //foreach($this->raw_data as $key => $value) {
189 // if($this->_elements[$key]->get_value()) {
190 // $this->add_error($key, "empty field!");
191 // return FALSE;
192 // } else {
193 // return TRUE;
194 // }
195 // }
196 $this->set_action("Confirm");
197 return TRUE;
198 }
199
200
201 /**
202 * This function is used to show an intermediary
203 * confirmation page. Use this function to
204 * show a confirmation of the data that was
205 * submitted by the user.
206 * This will get called after all of the
207 * form data was successfully validated.
208 * All of the form data will automatically
209 * be created as hidden form fields. All you
210 * have to do is show the data, and a confirm
211 * submit button.
212 *
213 * @return mixed - either raw html, or some
214 * container HTMLTag object.
215 */
216 function form_confirm( ) {
217 $title = "Form Confirmation / " . $this->_options['caption'];
218 $title .="( ".$this->_required_field_marker." ".$this->_required_field_text." )";
219 $table = new InfoTable($title, $this->_width);
220
221 $this->build_confirm_table( $table );
222
223 //now add the confirmation button
224 $td = new TDtag(array("colspan" => 2,
225 "class" => "contentnovertical",
226 "align" => "center"),
227 form_submit('ecdfe', "Confirm"),
228 _HTML_SPACE,
229 $this->add_action("Edit"));
230
231 if ($this->_cancel_action) {
232 $td->add(_HTML_SPACE, $this->add_cancel());
233 }
234
235 $table->add_row( $td );
236
237 return $table;
238 }
239
240
241
242
243 /**
244 * This method is called ONLY after ALL validation has
245 * passed. This is the method that allows you to
246 * do something with the data, say insert/update records
247 * in the DB.
248 */
249 function confirm_action() {
250
251 $utils = php::mkComponent('WebExplorer::utils');
252 $hidden = $this->get_hidden_elements();
253 $options = $this->_options['decode_args'];
254
255 foreach($this->_datasource->_result as $label => $value_old) {
256 if(!$utils->decode_item_expr($value_old, $hidden, $options) && !$utils->decode_item_array($value_old, $hidden, $options)) {
257 $value_new = $this->_elements[$label]->get_value();
258 $data[$label] = $value_new;
259 }
260 }
261 // write new data to datasource
262 $this->_options['data_locator_meta']['action'] = "write";
263 $this->_options['data_locator_meta']['data'] = $data;
264 // TODO: 'data_prefetch()' will never return ANYTHING!
265 // Implement some error-handling there or somewhere.
266 $error = $this->data_prefetch();
267
268 //$error = $this->_datasource->set($item);
269 if(!$error) {
270 // fetch fresh data
271 $this->_options['data_locator_meta']['action'] = "read";
272 // unset previous initialed 'data' var
273 $this->_options['data_locator_meta']['data'] = NULL;
274 $this->data_prefetch();
275
276 $this->set_action_message($this->_confirm_msg);
277 return TRUE;
278 } else {
279 return FALSE;
280 }
281 }
282
283 /**
284 * This function is used to build the standard
285 * buttons for a form.
286 *
287 * @return ButtonPanel
288 */
289 function form_content_buttons() {
290 $div = new DIVtag( array("style" => "background-color: #eeeeee;".
291 "padding-top:5px;padding-bottom:5px",
292 "align"=>"center", "nowrap"),
293 form_submit('ecdfe', "Save"),
294 _HTML_SPACE,
295 //$this->add_cancel()
296 form_submit('ecdfc', "Cancel")
297 );
298 return $div;
299 }
300
301
302 function get_hidden_elements() {
303 foreach($this->_hidden_elements as $label => $object) {
304 $value = $this->_hidden_elements[$label]->get_value();
305 $tmp_array[$label] = $value;
306 }
307 return $tmp_array;
308 }
309
310 }
311
312
313 ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed