Button helpers moved to ui_input.inc, reusable button code.
[fa-stable.git] / includes / ui / ui_input.inc
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU Affero General Public License,
5         AGPL, as published by the Free Software Foundation, either version 
6         3 of the License, or (at your option) any later version.
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
10     See the License here <http://www.gnu.org/licenses/agpl-3.0.html>.
11 ***********************************************************************/
12
13 function get_post($name, $dflt='')
14 {
15         return ((!isset($_POST[$name]) || $_POST[$name] === '') ? $dflt : $_POST[$name]);
16 }
17 //
18 // Sets local POST value and adds Value to ajax posting if needed
19 //
20 /*function set_post($name, $value, $ajax_trigger=true) {
21     global $Ajax;
22
23     $_POST[$name] = $value;
24     if ($ajax_trigger) $Ajax->activate($name);
25 }
26 */
27 //------------------------------------------------------------------------------
28 //    Seek for _POST variable with $prefix.
29 //    If var is found returns variable name with prefix stripped,
30 //    and null or -1 otherwise.
31 //
32 function find_submit($prefix, $numeric=true)
33 {
34
35     foreach($_POST as $postkey=>$postval )
36     {
37                 if (strpos($postkey, $prefix) === 0)
38                 {
39                         $id = substr($postkey, strlen($prefix));
40                         return $numeric ? (int)$id : $id;
41                 }
42     }
43     return $numeric ? -1 : null;
44 }
45 //------------------------------------------------------------------------------
46 //
47 // Helper function for simple db table editor pages
48 //
49 function simple_page_mode($numeric_id = true)
50 {
51         global $Ajax, $Mode, $selected_id;
52
53         $default = $numeric_id ? -1 : '';
54         $selected_id = get_post('selected_id', $default);
55         foreach (array('ADD_ITEM', 'UPDATE_ITEM', 'RESET') as $m) {
56                 if (isset($_POST[$m])) {
57                         $Ajax->activate('_page_body');
58                         if ($m == 'RESET') 
59                                 $selected_id = $default;
60                         $Mode = $m; return;
61                 }
62         }
63         foreach (array('Edit', 'Delete') as $m) {
64                 foreach ($_POST as $p => $pvar) {
65                         if (strpos($p, $m) === 0) {
66 //                              $selected_id = strtr(substr($p, strlen($m)), array('%2E'=>'.'));
67                                 unset($_POST['_focus']); // focus on first form entry
68                                 $selected_id = quoted_printable_decode(substr($p, strlen($m)));
69                                 $Ajax->activate('_page_body');
70                                 $Mode = $m;
71                                 return;
72                         }
73                 }
74         }
75         $Mode = '';
76 }
77
78 //------------------------------------------------------------------------------
79 //
80 //      Read numeric value from user formatted input
81 //
82 function input_num($postname=null, $dflt=null)
83 {
84         if (!isset($_POST[$postname]) || $_POST[$postname] == "")
85                 return $dflt;
86
87     return user_numeric($_POST[$postname]);
88 }
89
90 //---------------------------------------------------------------------------------
91
92 function hidden($name, $value=null, $echo=true)
93 {
94         global $Ajax;
95         
96         if ($value === null) 
97                 $value = get_post($name);
98         
99         $ret = "<input type=\"hidden\" name=\"$name\" value=\"$value\">";
100         $Ajax->addUpdate($name, $name, $value);
101         if ($echo)
102                 echo $ret."\n";
103         else
104                 return $ret;
105 }
106
107 function submit($name, $value, $echo=true, $title=false, $async=false, $icon=false)
108 {
109         global $path_to_root;
110         
111         default_focus($name);
112         $submit_str = "<button class=\""
113             .($async ? 'ajaxsubmit' : 'inputsubmit')
114                 ."\" type=\"submit\""
115                 .($async === null ? (fallback_mode() ? ' aspect="fallback"' : " style='display:none;'" ): 
116                         ($async === 'process' ? 'aspect="process"' : '') )
117             ." name=\"$name\"  id=\"$name\" value=\"$value\""
118             .($title ? " title='$title'" : '')
119             ."><span>$value</span>"
120                 .($icon ? "<img src='$path_to_root/themes/".user_theme()."/images/$icon'>" : '')
121                 ."</button>\n";
122         if ($echo)
123                 echo $submit_str;
124         else
125                 return $submit_str;
126 }
127
128 function submit_center($name, $value, $echo=true, $title=false, $async=false, $icon=false)
129 {
130         echo "<center>";
131         submit($name, $value, $echo, $title, $async, $icon);
132         echo "</center>";
133 }
134
135 function submit_center_first($name, $value, $title=false, $async=false, $icon=false)
136 {
137         echo "<center>";
138         submit($name, $value, true, $title, $async, $icon);
139         echo "&nbsp;";
140 }
141
142 function submit_center_last($name, $value, $title=false, $async=false, $icon=false)
143 {
144         echo "&nbsp;";
145         submit($name, $value, true, $title, $async, $icon);
146         echo "</center>";
147 }
148
149 function submit_add_or_update($add=true, $title=false, $async=false)
150 {
151         if ($add)
152                 submit('ADD_ITEM', _("Add new"), true, $title, $async);
153         else {
154                 submit('UPDATE_ITEM', _("Update"), true, $title, $async);
155                 submit('RESET', _("Cancel"), true, $title, $async);
156         }
157 }
158
159 function submit_add_or_update_center($add=true, $title=false, $async=false)
160 {
161         echo "<center>";
162         submit_add_or_update($add, $title, $async);
163         echo "</center>";
164 }
165
166 /*
167 function submit_add_or_update_row($add=true)
168 {
169         echo "<tr><td colspan=99 align=center>";
170         submit_add_or_update($add);
171         echo "</td></tr>\n";
172 }
173 */
174 function submit_add_or_update_row($add=true, $right=true, $extra="", $title=false, $async=false)
175 {
176         echo "<tr>";
177         if ($right)
178                 echo "<td>&nbsp;</td>\n";
179         echo "<td $extra>";
180         submit_add_or_update($add, $title, $async);
181         echo "</td></tr>\n";
182 }
183
184 function submit_cells($name, $value, $extra="", $title=false, $async=false)
185 {
186         echo "<td $extra>";
187         submit($name, $value, true, $title, $async);
188         echo "</td>\n";
189 }
190
191 function submit_row($name, $value, $right=true, $extra="", $title=false, $async=false)
192 {
193         echo "<tr>";
194         if ($right)
195                 echo "<td>&nbsp;</td>\n";
196         submit_cells($name, $value, $extra, $title, $async);
197         echo "</tr>\n";
198 }
199
200 function submit_return($name, $value, $title=false, $async=false)
201 {
202         if (count($_SESSION['Context'])) {
203                 submit($name, $value, true, $title, $async);
204         }
205 }
206 //-----------------------------------------------------------------------------------
207
208 function set_icon($icon, $title=false)
209 {
210         global $path_to_root;
211         return "<img src='$path_to_root/themes/".user_theme()."/images/$icon' width='14' height='14' border='0'".($title ? " title='$title'" : "")." />\n";     
212 }
213
214 function button($name, $value, $title=false, $icon=false)
215 {
216         // php silently changes dots,spaces,'[' and characters 128-159
217         // to underscore in POST names, to maintain compatibility with register_globals
218         if (user_graphic_links() && $icon)
219         {
220                 if ($value == _("Delete")) // Helper during implementation
221                         $icon = ICON_DELETE;
222                 return "<button type='submit' class='editbutton' name='".
223                         htmlentities(strtr($name, array('.'=>'=2E',' '=>'=20','='=>'=3D','['=>'=5B'))).
224                         "' value=''" . ($title ? " title='$title'":" title='$value'")." />".set_icon($icon)."\n";
225         }
226         else
227                 return "<input type='submit' class='editbutton' name='"
228                         .htmlentities(strtr($name, array('.'=>'=2E',' '=>'=20','='=>'=3D','['=>'=5B')))
229                         ."' value='$value'"
230                         .($title ? " title='$title'":'')." />\n";
231 }
232
233 function button_cell($name, $value, $title=false, $icon=false)
234 {
235         echo "<td>";
236         echo button($name, $value, $title, $icon);
237         echo "</td>";
238 }
239
240 function delete_button_cell($name, $value, $title=false)
241 {
242         button_cell($name, $value, $title, ICON_DELETE);
243 }
244
245 function edit_button_cell($name, $value, $title=false)
246 {
247         button_cell($name, $value, $title, ICON_EDIT);
248 }
249 //-----------------------------------------------------------------------------------
250
251 function check_value($name)
252 {
253         if (!isset($_POST[$name]))
254                 return 0;
255         return 1;
256 }
257
258 function check($label, $name, $value=null, $submit_on_change=false, $title=false)
259 {
260         global $Ajax;
261
262         default_focus($name);
263         if ($label)
264                 echo $label . "  ";
265
266         if ($value === null)
267                 $value = get_post($name,0);
268
269                 echo "<input"
270                     .($value == 1 ? ' checked':'')
271                     ." type='checkbox' name='$name' value='1'"
272                     .($submit_on_change ? " onclick='JsHttpRequest.request(\"_{$name}_update\", this.form);'" : '')
273                     .($title ? " title='$title'" : '')
274                     ." >\n";
275         $Ajax->addUpdate($name, $name, $value);
276 }
277
278 function check_cells($label, $name, $value, $submit_on_change=false, $title=false)
279 {
280         if ($label != null)
281                 echo "<td>$label</td>\n";
282         echo "<td>";
283         check(null, $name, $value, $submit_on_change, $title);
284         echo "</td>";
285 }
286
287 function check_row($label, $name, $value, $submit_on_change=false, $title=false)
288 {
289         echo "<tr>";
290         check_cells($label, $name, $value, $submit_on_change, $title);
291         echo "</tr>\n";
292 }
293
294 //-----------------------------------------------------------------------------------
295
296 function labelheader_cell($label, $params="")
297 {
298         echo "<td class='tableheader' $params>$label</td>\n";
299 }
300
301 function label_cell($label, $params="", $id=null)
302 {
303     global $Ajax;
304
305         if(isset($id))
306         {
307             $params .= " id='$id'";
308             $Ajax->addUpdate($id, $id, $label);
309         }
310         echo "<td $params>$label</td>\n";
311
312         return $label;
313 }
314
315 function amount_cell($label, $bold=false, $params="", $id=null)
316 {
317         if ($bold)
318                 label_cell("<b>".price_format($label)."</b>", "nowrap align=right ".$params, $id);
319         else
320                 label_cell(price_format($label), "nowrap align=right ".$params, $id);
321 }
322
323 function percent_cell($label, $bold=false, $id=null)
324 {
325         if ($bold)
326                 label_cell("<b>".percent_format($label)."</b>", "nowrap align=right", $id);
327         else
328                 label_cell(percent_format($label), "nowrap align=right", $id);
329 }
330 // 2008-06-15. Changed
331 function qty_cell($label, $bold=false, $dec=null, $id=null)
332 {
333         if (!isset($dec))
334                 $dec = get_qty_dec();
335         if ($bold)
336                 label_cell("<b>".number_format2($label, $dec)."</b>", "nowrap align=right", $id);
337         else
338                 label_cell(number_format2($label, $dec), "nowrap align=right", $id);
339 }
340
341 function label_cells($label, $value, $params="", $params2="", $id='')
342 {
343         if ($label != null)
344                 echo "<td $params>$label</td>\n";
345         label_cell($value, $params2, $id);
346 }
347
348 function label_row($label, $value, $params="", $params2="", $leftfill=0, $id='')
349 {
350         echo "<tr>";
351         label_cells($label, $value, $params, $params2, $id);
352         if ($leftfill!=0)
353                 echo "<td colspan=$leftfill></td>";
354         echo "</tr>\n";
355 }
356
357 //-----------------------------------------------------------------------------------
358
359 function text_cells($label, $name, $value=null, $size="", $max="", $title=false, $params="", $post_label="", $disabled="")
360 {
361         global $Ajax;
362
363         default_focus($name);
364         if ($label != null)
365                 label_cell($label, $params);
366         echo "<td>";
367
368         if ($value === null)
369                 $value = get_post($name);
370         echo "<input $disabled type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"$value\""
371             .($title ? " title='$title'" : '')
372             .">";
373
374         if ($post_label != "")
375                 echo " " . $post_label;
376
377         echo "</td>\n";
378         $Ajax->addUpdate($name, $name, $value);
379 }
380
381 function text_cells_ex($label, $name, $size, $max=null, $init=null, $title=null, $params=null, $post_label=null, $submit_on_change=false)
382 {
383         global $Ajax;
384
385         default_focus($name);
386         if (!isset($_POST[$name]) || $_POST[$name] == "")
387         {
388                 if ($init)
389                         $_POST[$name] = $init;
390                 else
391                         $_POST[$name] = "";
392         }
393         if ($label != null)
394                 label_cell($label, $params);
395
396         if (!isset($max))
397                 $max = $size;
398
399         echo "<td>";
400         $class = $submit_on_change ? 'class="searchbox"' : '';
401         echo "<input $class type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"" . $_POST[$name]. "\""
402          .($title ? " title='$title'": '')." >";
403
404         if ($post_label)
405                 echo " " . $post_label;
406
407         echo "</td>\n";
408         $Ajax->addUpdate($name, $name, $_POST[$name]);
409 }
410
411 function text_row($label, $name, $value, $size, $max, $title=null, $params="", $post_label="")
412 {
413         echo "<tr>";
414
415         text_cells($label, $name, $value, $size, $max, $title, $params, $post_label);
416
417         echo "</tr>\n";
418 }
419
420 //-----------------------------------------------------------------------------------
421
422 function text_row_ex($label, $name, $size, $max=null, $title=null, $value=null, $params=null, $post_label=null)
423 {
424         echo "<tr>";
425
426         text_cells_ex($label, $name, $size, $max, $value, $title, $params, $post_label);
427
428         echo "</tr>\n";
429 }
430
431 //-----------------------------------------------------------------------------------
432
433 function date_cells($label, $name, $title = null, $init=null, $inc_days=0, 
434         $inc_months=0, $inc_years=0, $params=null, $submit_on_change=false)
435 {
436         global $use_date_picker, $path_to_root;
437         if (!isset($_POST[$name]) || $_POST[$name] == "")
438         {
439                 if (!$init)
440                 {
441                         if ($inc_years == 1001)
442                                 $_POST[$name] = null;
443                         else
444                         {
445                                 $dd = Today();
446                                 if ($inc_days != 0)
447                                         $dd = add_days($dd, $inc_days);
448                                 if ($inc_months != 0)
449                                         $dd = add_months($dd, $inc_months);
450                                 if ($inc_years != 0)
451                                         $dd = add_years($dd, $inc_years);
452                                 $_POST[$name] = $dd;
453                         }
454                 }
455                 else
456                         $_POST[$name] = $init;
457         }
458         if ($use_date_picker)
459                 $post_label = "<a tabindex='-1' href=\"javascript:date_picker(document.getElementsByName('$name')[0]);\">"
460                 . "     <img src='$path_to_root/themes/default/images/cal.gif' width='16' height='16' border='0' alt='"._('Click Here to Pick up the date')."'></a>\n";
461         else
462                 $post_label = "";
463         text_cells_ex($label, $name, 9, 12, $_POST[$name], $title, $params, $post_label, $submit_on_change);
464 }
465
466 function date_row($label, $name, $title=null, $init=null, $inc_days=0, $inc_months=0, 
467         $inc_years=0, $params=null, $submit_on_change=false)
468 {
469         echo "<tr>";
470         date_cells($label, $name, $title, $init, $inc_days, $inc_months, 
471                 $inc_years, $params, $submit_on_change);
472         echo "</tr>\n";
473 }
474
475 //-----------------------------------------------------------------------------------
476
477 function ref_cells($label, $name, $title=null, $init=null, $params=null, $submit_on_change=false)
478 {
479         text_cells_ex($label, $name, 16, 18, $init, $title, $params, null, $submit_on_change);
480 }
481
482 //-----------------------------------------------------------------------------------
483
484 function ref_row($label, $name, $title=null, $init=null, $submit_on_change=false)
485 {
486         echo "<tr>";
487         ref_cells($label, $name, $title, $init, null, $submit_on_change);
488         echo "</tr>\n";
489 }
490
491 //-----------------------------------------------------------------------------------
492
493 function percent_row($label, $name, $init=null)
494 {
495
496         if (!isset($_POST[$name]) || $_POST[$name]=="")
497         {
498                 $_POST[$name] = $init == null ? '' : $init;
499         }
500
501         small_amount_row($label, $name, $_POST[$name], null, "%", user_percent_dec());
502 }
503
504 function amount_cells_ex($label, $name, $size, $max=null, $init=null, $params=null, $post_label=null, $dec=null)
505 {
506         global $Ajax;
507
508         if (!isset($dec))
509                 $dec = user_price_dec();
510         if (!isset($_POST[$name]) || $_POST[$name] == "")
511         {
512                 if ($init !== null)
513                         $_POST[$name] = $init;
514                 else
515                         $_POST[$name] = '';
516         }
517         if ($label != null)
518                 label_cell($label, $params);
519
520         if (!isset($max))
521                 $max = $size;
522
523         if ($label != null)
524                 echo "<td>";
525         else
526                 echo "<td align='right'>";
527
528         echo "<input class='amount' type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" dec=\"$dec\" value=\"" . $_POST[$name]. "\">";
529
530         if ($post_label) {
531                 echo "<span id='_{$name}_label'> $post_label</span>";
532                 $Ajax->addUpdate($name, '_'.$name.'_label', $post_label);
533         }
534         echo "</td>\n";
535         $Ajax->addUpdate($name, $name, $_POST[$name]);
536         $Ajax->addAssign($name, $name, 'dec', $dec);
537 }
538
539
540 //-----------------------------------------------------------------------------------
541
542 function amount_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
543 {
544         amount_cells_ex($label, $name, 15, 15, $init, $params, $post_label, $dec);
545 }
546
547 function amount_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
548 {
549         echo "<tr>";
550         amount_cells($label, $name, $init, $params, $post_label, $dec);
551         echo "</tr>\n";
552 }
553
554 function small_amount_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
555 {
556         echo "<tr>";
557         small_amount_cells($label, $name, $init, $params, $post_label, $dec);
558         echo "</tr>\n";
559 }
560
561 //-----------------------------------------------------------------------------------
562
563 function qty_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
564 {
565         if (!isset($dec))
566                 $dec = user_qty_dec();
567
568         amount_cells_ex($label, $name, 15, 15, $init, $params, $post_label, $dec);
569 }
570
571 function qty_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
572 {
573         if (!isset($dec))
574                 $dec = user_qty_dec();
575
576         echo "<tr>";
577         amount_cells($label, $name, $init, $params, $post_label, $dec);
578         echo "</tr>\n";
579 }
580
581 function small_qty_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
582 {
583         if (!isset($dec))
584                 $dec = user_qty_dec();
585
586         echo "<tr>";
587         small_amount_cells($label, $name, $init, $params, $post_label, $dec);
588         echo "</tr>\n";
589 }
590
591 //-----------------------------------------------------------------------------------
592
593 function small_amount_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
594 {
595         amount_cells_ex($label, $name, 7, 12, $init, $params, $post_label, $dec);
596 }
597
598 //-----------------------------------------------------------------------------------
599
600 function small_qty_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
601 {
602         if (!isset($dec))
603                 $dec = user_qty_dec();
604         amount_cells_ex($label, $name, 7, 12, $init, $params, $post_label, $dec);
605 }
606
607 //-----------------------------------------------------------------------------------
608
609 function textarea_cells($label, $name, $value, $cols, $rows, $title = null, $params="")
610 {
611         global $Ajax;
612
613         default_focus($name);
614         if ($label != null)
615                 echo "<td $params>$label</td>\n";
616         if ($value == null)
617                 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
618         echo "<td><textarea name='$name' cols='$cols' rows='$rows'"
619         .($title ? " title='$title'" : '')
620         .">$value</textarea></td>\n";
621         $Ajax->addUpdate($name, $name, $value);
622 }
623
624 function textarea_row($label, $name, $value, $cols, $rows, $title=null, $params="")
625 {
626         echo "<tr>";
627         textarea_cells($label, $name, $value, $cols, $rows, $title, $params);
628         echo "</tr>\n";
629 }
630
631 //-----------------------------------------------------------------------------------
632 /*
633 function text_row_with_submit($label, $name, $value, $size, $max, $input_name, $input_value)
634 {
635         global $Ajax;
636
637         default_focus($name);
638         echo "<tr><td>$label</td>\n";
639         echo "<td>";
640
641         if ($value == null)
642                 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
643         echo "<input type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"$value\">   ";
644
645         submit($input_name, $input_value);
646
647         echo "</td></tr>\n";
648         $Ajax->addUpdate($name, $name, $value);
649 }
650 */
651 //-----------------------------------------------------------------------------------
652
653
654 ?>