/[cvs]/nfo/php/libs/com.newsblob.phphtmllib/widgets/data_list/ListAction.inc
ViewVC logotype

Contents of /nfo/php/libs/com.newsblob.phphtmllib/widgets/data_list/ListAction.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Thu May 6 16:27:49 2004 UTC (20 years, 3 months ago) by jonen
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +5 -5 lines
 updated all to v2.4.1 - Apr 01, 2004

1 <?php
2 /**
3 * This file holds the ListAction object, which
4 * can be used to handle an action from a post
5 * of the checkbox data from the DefaultGUIDataList
6 *
7 * @author Walter A. Boring IV <waboring@buildabetterweb.com>
8 * @package phpHtmlLib
9 */
10
11 /**
12 * A class for showing a list of items
13 * to preform an action on
14 *
15 * @author Walter A. Boring IV <waboring@buildabetterweb.com>
16 * @package phpHtmlLib
17 */
18 class ListAction extends DataList {
19
20 /**
21 * The string that describes
22 * the action
23 * ie. 'delete'
24 */
25 var $_action_name = 'delete';
26
27
28 /**
29 * name/description of the type of
30 * data we are working on
31 * ie 'users', 'files'
32 */
33 var $_item_name = '';
34
35 /**
36 * The overall alignment
37 *
38 * DEFAULT: "center"
39 */
40 var $_align = "center";
41
42
43 /**
44 * A flag to tell us to save all
45 * vars passed
46 */
47 var $_save_all_vars = TRUE;
48
49 /**
50 * This sets the url for the
51 * cancel action to post to
52 */
53 var $_cancel_url = "index.php";
54
55
56 /**
57 * The name of the array variable
58 * that the data was posted to us
59 *
60 */
61 var $_data_post_name = "checkbox";
62
63
64 /****************************************/
65 /* The required DataList child methods */
66 /****************************************/
67
68 /**
69 * Initialize the gui layout
70 *
71 */
72 function gui_init() {
73
74 $this->set_form_render(TRUE);
75 $this->search_disable();
76
77 $this->_data_table = html_table($this->get_width(),0,0,0,
78 $this->_align);
79 $this->_data_table->set_class("datalist_border");
80
81 //add the header tr reference
82 //it will get populated later
83 $this->_header_tr = new TRtag;
84
85 //initialize the first date row
86 $this->_data_row = new TRtag;
87
88 if (!is_array($_REQUEST[$this->_data_post_name]) ||
89 $data_post_count <= 0) {
90 // The user didn't select anything to delete.
91 $err_string = "Please select at least one ". $this->_item_name. " to delete.";
92 $dialog = messagebox_ok("Error", $err_string, "index.php?tab_selected=$tab_selected&showall=$showall",
93 array(), "50%");
94 return $dialog;
95 }
96 }
97
98 function child_get_gui() {
99 $this->_build_hidden_vars();
100 $wrapper = $this->_build_delete_confirm();
101 $wrapper->add($this->_data_table);
102 return $wrapper;
103 //return container( $this->_data_table );
104 }
105
106 function child_build_column_header($name, $col, $cnt) {
107 $td = $this->build_column_header($name, $col, $cnt);
108 $this->_header_tr->add( $td );
109 }
110
111
112 function child_add_row_cell($obj, $col_name, $last_in_row_flag, $row_data) {
113 //show the normal data
114 $td = $this->wrap_column_item($obj, $col_name);
115 $this->_data_row->add( $td );
116
117 if ($last_in_row_flag) {
118 $this->_data_table->add_row( $this->_data_row );
119 $this->_data_row = new TRtag;
120 }
121 }
122
123
124 /**
125 * This builds the hidden form fields
126 * of the data that was originally sent
127 * to us
128 *
129 * @return Container
130 */
131 function _build_hidden_vars() {
132 $save_vars = array();
133 $x=0;
134 if ($_REQUEST[$this->_data_post_name]) {
135 foreach ( $_REQUEST[$this->_data_post_name] as $value ) {
136 $save_vars[$this->_data_post_name."[".$x."]"] = $value;
137 $x++;
138 }
139 $this->set_save_vars( $save_vars );
140 }
141 }
142
143
144 /**
145 * This function builds the object/text
146 * to be used for a column header. It can
147 * either be an href because its sortable,
148 * or it can just be text, because its not
149 * sortable.
150 *
151 * @param string $col_name - the column name
152 * to build from
153 * the headers.
154 * @param array $col_data - the column's data.
155 * @param int the column # we are working on.
156 * @return mixed - either an Atag object or
157 * raw text.
158 */
159 function build_column_header($col_name, $col_data, $col_num) {
160
161 $td = new TDtag(array("class"=>"datalist_col_head",
162 "width" => $col_data["size"]));
163
164 if ($this->_columns[$col_name]["sortable"]) {
165 $col_url = $this->build_column_url($col_name);
166
167 $td->set_tag_attribute("title","Sort By ".$col_name);
168
169 $td->push(html_a($col_url, $col_name,"form_link"));
170
171 if ($this->_columns[$col_name]["data_name"] == $this->orderby()) {
172
173 if ($this->reverseorder() == "false") {
174 $alt_title = "Sorted in Ascending Order";
175 $img = html_img($this->get_image_path()."/picto_down.gif",11,11,'',$alt_title);
176 $img->set_tag_attribute("style", "padding-left: 5px;margin-left:5px;vertical-align:middle;");
177 $td->push($img);
178 } else {
179 $alt_title = "Sorted in Descending Order";
180 $img = html_img($this->get_image_path()."/picto_up.gif",11,11,'',$alt_title);
181 $img->set_tag_attribute("style", "padding-left: 5px;margin-left:5px;vertical-align:middle;");
182 $td->push($img);
183 }
184 }
185
186 // we want to highlight the td on mouse over
187 $td->set_tag_attribute("onMouseOver",
188 "javascript:style.cursor='hand';this.className='datalist_col_head_hover';");
189 $td->set_tag_attribute("onMouseOut",
190 "javascript:this.className='datalist_col_head'");
191 $td->set_tag_attribute("onMouseDown",
192 "javascript:this.className='datalist_col_head_clicked'");
193
194
195 if ($this->get_form_method() == "POST") {
196 $td->set_tag_attribute("onclick", $col_url);
197 }
198 else {
199 $td->set_tag_attribute("onclick", "javascript:document.location='".$col_url."';");
200 }
201 } else {
202 $td->push($col_name);
203 $td->set_tag_attribute("style", $style."padding-left:5px;padding-right:5px;white-space:nowrap;");
204 }
205
206 return $td;
207 }
208
209 /**
210 * This function ensures that the data we place
211 * in a column is aligned according to what the
212 * user wants.
213 *
214 * @param mixed - $obj - the data for the td.
215 * @param string - $col_name - the name of the column header
216 * for this row to render.
217 * @param int - $odd_row - tells us if this cell lives in
218 * an odd # row (for alternating row colors)
219 * @param int - the column # we are working on.
220 * @return TDtag object
221 */
222 function wrap_column_item($obj, $col_name) {
223
224 //make sure its set to something.
225 if ($obj == '') {
226 $obj = "&nbsp;";
227 }
228
229 //make sure we don't put a right border on the last
230 //column we are working on.
231 //$style = "padding-left: 3px;padding-right:3px;border-top: 1px solid #dddddd;";
232
233
234 if ($this->_columns[$col_name]["data_name"] == $this->orderby()) {
235 $style = "background-color: #f4f4f4;";
236 } else {
237 $style = "background-color: #ffffff;";
238 }
239
240 $align = $this->_columns[$col_name]["align"];
241 $td = new TDtag(array("align" => $align,
242 "style" => $style,
243 "class" => "datalist_data_cell"));
244
245 if (is_object($obj) && $obj->_tag == "td") {
246 return $obj;
247 } else {
248 $td->add( $obj );
249 }
250 return $td;
251 }
252
253
254
255 /****************************************/
256 /* The Methods specific to the logic */
257 /* of handling the action. */
258 /****************************************/
259
260
261
262 /**
263 * Build any additional custom options
264 * such as checkboxes, radiobuttons
265 * for special options for the action.
266 */
267 function build_options() {
268 return NULL;
269 }
270
271
272 /**
273 * This method is used to build the portion
274 * of the DB query that limits the list of
275 * items to show based on what was submitted
276 * from the original DataList action
277 *
278 * @param string - the field
279 * @return string
280 */
281 function build_in_clause($field) {
282
283 if (!$_REQUEST[$this->_data_post_name]) {
284 return NULL;
285 } else {
286 $clause = $field." in (";
287 foreach ($_REQUEST[$this->_data_post_name] as $value ) {
288 $query .= "'".$value."',";
289 }
290
291 $query = substr($query, 0, strlen($query)-1);
292 $clause .= $query .") ";
293 return $clause;
294 }
295 }
296
297
298 /**
299 * This function builds the actual form
300 */
301 function _build_delete_confirm() {
302
303 $showall = $_REQUEST["showall"];
304 $data_post_count = count($_REQUEST[$this->_data_post_name]);
305
306 $container = container();
307
308
309
310 // handle plural case
311 if ($data_post_count > 1) $plural = "s";
312 else $plural = "";
313
314 $table = new InfoTable(ucfirst($this->_action_name) . " Confirmation", $this->get_width());
315
316 $content = html_table("100%");
317 //$content->set_default_col_attributes(array("class"=>"f10-1"));
318
319 $td = new TDTag(array("class"=>"f10-1","align"=>"center"));
320 $td->push(html_br(),
321 html_b("Are you sure you want to ".$this->_action_name." the following " . $this->_item_name . $plural . "?"),
322 html_br(),html_br());
323
324 $content->add_row($td);
325
326 // add any additional options
327 if ($options = $this->build_options()) $content->add_row($options);
328
329 // buttons
330 $buttons = new ButtonPanel(1, "center");
331 $buttons->add(form_button("yes","Yes", array("type"=>"submit","style"=>"width: 90px;")));
332
333 $cancel_url = $this->get_cancel_url();
334 $form_name = $this->get_form_name();
335 $cancel_action = "document.".$form_name.".action='".$cancel_url."'; document.".$form_name.".method='POST'; document.".$form_name.".submit();";
336
337 $buttons->add(form_button("no","No",
338 array("type"=>"button",
339 "style"=>"width: 90px;",
340 "onclick"=>$cancel_action)));
341 $content->push_row($buttons);
342
343 $td = new TDTag(array("class"=>"f10-1","align"=>"center","style"=>_CSS_BORDER_TOP));
344 $td->add(_HTML_SPACE);
345 $content->add_row($td);
346
347 $content->add_row(_HTML_SPACE);
348
349 $table->add_row($content);
350
351 $container->add( $table );
352
353 $container->add(form_hidden("confirmed", "yes"));
354
355 //do this hack to make the cancel button not bust
356 //the next page.
357 if ($_SERVER["REQUEST_METHOD"] == "POST") {
358 unset($_POST["checkbox"]);
359 } else {
360 unset($_GET["checkbox"]);
361 }
362
363 return $container;
364 }
365
366
367
368 /****************************************/
369 /* The utility/param methods */
370 /****************************************/
371
372
373
374 /**
375 * this function is used to set the overall alignment
376 * of the widget
377 *
378 * @param string - the align value
379 */
380 function set_align($align) {
381 $this->_align = $align;
382 }
383
384
385 /**
386 * Set the name of the deleted items
387 * used for display purposes only
388 */
389 function set_item_name($item) {
390 $this->_item_name = $item;
391 }
392
393 /**
394 * Set the name of the action
395 * used for display purposes only
396 */
397 function set_action_name($item) {
398 $this->_action_name = $item;
399 }
400
401 /**
402 * This method sets the flag that
403 * tells us to automatically add
404 * hidden form fields for all
405 * the GET/POST vars passed in to us.
406 *
407 */
408 function set_save_vars_Flag($flag=TRUE) {
409 $this->_save_all_vars = TRUE;
410 }
411
412 /**
413 * This sets the url to post to
414 * when a cancel/no action is clicked
415 *
416 * @param string - the url
417 */
418 function set_cancel_url( $url ) {
419 $this->_cancel_url = $url;
420 }
421
422 /**
423 * this returns the current cancel url
424 *
425 * @return string - the url
426 */
427 function get_cancel_url() {
428 return $this->_cancel_url;
429 }
430
431
432
433 }
434 ?>

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