Helper for js confirm dialogs added.
[fa-stable.git] / includes / ui / ui_input.inc
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU General Public License, GPL, 
5         as published by the Free Software Foundation, either version 3 
6         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/gpl-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         Various types of submit button selected by $type:
108         null    - button visible only in fallback mode
109         false   - normal submit button
110         true    - ajax driven submit
111         'process' - ajax button with long timeout 
112 */
113 function submit($name, $value, $echo=true, $title=false, $type=false, $icon=false)
114 {
115         global $path_to_root;
116
117         default_focus($name);
118         $submit_str = "<button class=\""
119             .($type ? 'ajaxsubmit' : 'inputsubmit')
120                 ."\" type=\"submit\""
121                 .($type === null ? (fallback_mode() ? ' aspect="fallback"' : " style='display:none;'" ): 
122                         ($type === 'process' ? 'aspect="process"' : '') )
123             ." name=\"$name\"  id=\"$name\" value=\"$value\""
124             .($title ? " title='$title'" : '')
125             ."><span>$value</span>"
126                 .($icon ? "<img src='$path_to_root/themes/".user_theme()."/images/$icon'>" : '')
127                 ."</button>\n";
128         if ($echo)
129                 echo $submit_str;
130         else
131                 return $submit_str;
132 }
133
134 function submit_center($name, $value, $echo=true, $title=false, $async=false, $icon=false)
135 {
136         echo "<center>";
137         submit($name, $value, $echo, $title, $async, $icon);
138         echo "</center>";
139 }
140
141 function submit_center_first($name, $value, $title=false, $async=false, $icon=false)
142 {
143         echo "<center>";
144         submit($name, $value, true, $title, $async, $icon);
145         echo "&nbsp;";
146 }
147
148 function submit_center_last($name, $value, $title=false, $async=false, $icon=false)
149 {
150         echo "&nbsp;";
151         submit($name, $value, true, $title, $async, $icon);
152         echo "</center>";
153 }
154
155 function submit_add_or_update($add=true, $title=false, $async=false)
156 {
157         if ($add)
158                 submit('ADD_ITEM', _("Add new"), true, $title, $async);
159         else {
160                 submit('UPDATE_ITEM', _("Update"), true, $title, $async);
161                 submit('RESET', _("Cancel"), true, $title, $async);
162         }
163 }
164
165 function submit_add_or_update_center($add=true, $title=false, $async=false)
166 {
167         echo "<center>";
168         submit_add_or_update($add, $title, $async);
169         echo "</center>";
170 }
171
172 /*
173 function submit_add_or_update_row($add=true)
174 {
175         echo "<tr><td colspan=99 align=center>";
176         submit_add_or_update($add);
177         echo "</td></tr>\n";
178 }
179 */
180 function submit_add_or_update_row($add=true, $right=true, $extra="", $title=false, $async=false)
181 {
182         echo "<tr>";
183         if ($right)
184                 echo "<td>&nbsp;</td>\n";
185         echo "<td $extra>";
186         submit_add_or_update($add, $title, $async);
187         echo "</td></tr>\n";
188 }
189
190 function submit_cells($name, $value, $extra="", $title=false, $async=false)
191 {
192         echo "<td $extra>";
193         submit($name, $value, true, $title, $async);
194         echo "</td>\n";
195 }
196
197 function submit_row($name, $value, $right=true, $extra="", $title=false, $async=false)
198 {
199         echo "<tr>";
200         if ($right)
201                 echo "<td>&nbsp;</td>\n";
202         submit_cells($name, $value, $extra, $title, $async);
203         echo "</tr>\n";
204 }
205
206 function submit_return($name, $value, $title=false, $async=false)
207 {
208         if (count($_SESSION['Context'])) {
209                 submit($name, $value, true, $title, $async);
210         }
211 }
212
213 function submit_js_confirm($name, $msg) {
214         add_js_source(
215                 "_validate.$name=function(){ return confirm('$msg');};");
216 };
217 //-----------------------------------------------------------------------------------
218
219 function set_icon($icon, $title=false)
220 {
221         global $path_to_root;
222         return "<img src='$path_to_root/themes/".user_theme()."/images/$icon' width='14' height='14' border='0'".($title ? " title='$title'" : "")." />\n";     
223 }
224
225 function button($name, $value, $title=false, $icon=false)
226 {
227         // php silently changes dots,spaces,'[' and characters 128-159
228         // to underscore in POST names, to maintain compatibility with register_globals
229         if (user_graphic_links() && $icon)
230         {
231                 if ($value == _("Delete")) // Helper during implementation
232                         $icon = ICON_DELETE;
233                 return "<button type='submit' class='editbutton' name='".
234                         htmlentities(strtr($name, array('.'=>'=2E',' '=>'=20','='=>'=3D','['=>'=5B'))).
235                         "' value='1'" . ($title ? " title='$title'":" title='$value'")." />".set_icon($icon)."\n";
236         }
237         else
238                 return "<input type='submit' class='editbutton' name='"
239                         .htmlentities(strtr($name, array('.'=>'=2E',' '=>'=20','='=>'=3D','['=>'=5B')))
240                         ."' value='$value'"
241                         .($title ? " title='$title'":'')." />\n";
242 }
243
244 function button_cell($name, $value, $title=false, $icon=false)
245 {
246         echo "<td>";
247         echo button($name, $value, $title, $icon);
248         echo "</td>";
249 }
250
251 function delete_button_cell($name, $value, $title=false)
252 {
253         button_cell($name, $value, $title, ICON_DELETE);
254 }
255
256 function edit_button_cell($name, $value, $title=false)
257 {
258         button_cell($name, $value, $title, ICON_EDIT);
259 }
260 //-----------------------------------------------------------------------------------
261
262 function check_value($name)
263 {
264         if (!isset($_POST[$name]))
265                 return 0;
266         return 1;
267 }
268
269 function checkbox($label, $name, $value=null, $submit_on_change=false, $title=false)
270 {
271         global $Ajax;
272
273         $str = '';      
274         default_focus($name);
275         if ($label)
276                 $str .= $label . "  ";
277         if ($submit_on_change !== false) {
278                 if ($submit_on_change === true)
279                         $submit_on_change = 
280                                 "JsHttpRequest.request(\"_{$name}_update\", this.form);";
281         }
282         if ($value === null)
283                 $value = get_post($name,0);
284
285         $str .= "<input"
286             .($value == 1 ? ' checked':'')
287             ." type='checkbox' name='$name' value='1'"
288             .($submit_on_change ? " onclick='$submit_on_change'" : '')
289             .($title ? " title='$title'" : '')
290             ." >\n";
291
292         $Ajax->addUpdate($name, $name, $value);
293         return $str;
294 }
295
296 function check($label, $name, $value=null, $submit_on_change=false, $title=false)
297 {
298         echo checkbox($label, $name, $value, $submit_on_change, $title);
299 }
300
301 function check_cells($label, $name, $value, $submit_on_change=false, $title=false)
302 {
303         if ($label != null)
304                 echo "<td>$label</td>\n";
305         echo "<td>";
306         echo check(null, $name, $value, $submit_on_change, $title);
307         echo "</td>";
308 }
309
310 function check_row($label, $name, $value, $submit_on_change=false, $title=false)
311 {
312         echo "<tr>";
313         echo check_cells($label, $name, $value, $submit_on_change, $title);
314         echo "</tr>\n";
315 }
316
317 //-----------------------------------------------------------------------------------
318
319 function labelheader_cell($label, $params="")
320 {
321         echo "<td class='tableheader' $params>$label</td>\n";
322 }
323
324 function label_cell($label, $params="", $id=null)
325 {
326     global $Ajax;
327
328         if(isset($id))
329         {
330             $params .= " id='$id'";
331             $Ajax->addUpdate($id, $id, $label);
332         }
333         echo "<td $params>$label</td>\n";
334
335         return $label;
336 }
337
338 function email_cell($label, $params="", $id=null)
339 {
340         label_cell("<a href='mailto:$label'>$label</a>", $params, $id);
341 }
342
343 function amount_cell($label, $bold=false, $params="", $id=null)
344 {
345         if ($bold)
346                 label_cell("<b>".price_format($label)."</b>", "nowrap align=right ".$params, $id);
347         else
348                 label_cell(price_format($label), "nowrap align=right ".$params, $id);
349 }
350
351 function percent_cell($label, $bold=false, $id=null)
352 {
353         if ($bold)
354                 label_cell("<b>".percent_format($label)."</b>", "nowrap align=right", $id);
355         else
356                 label_cell(percent_format($label), "nowrap align=right", $id);
357 }
358 // 2008-06-15. Changed
359 function qty_cell($label, $bold=false, $dec=null, $id=null)
360 {
361         if (!isset($dec))
362                 $dec = get_qty_dec();
363         if ($bold)
364                 label_cell("<b>".number_format2($label, $dec)."</b>", "nowrap align=right", $id);
365         else
366                 label_cell(number_format2($label, $dec), "nowrap align=right", $id);
367 }
368
369 function label_cells($label, $value, $params="", $params2="", $id='')
370 {
371         if ($label != null)
372                 echo "<td $params>$label</td>\n";
373         label_cell($value, $params2, $id);
374 }
375
376 function label_row($label, $value, $params="", $params2="", $leftfill=0, $id='')
377 {
378         echo "<tr>";
379         label_cells($label, $value, $params, $params2, $id);
380         if ($leftfill!=0)
381                 echo "<td colspan=$leftfill></td>";
382         echo "</tr>\n";
383 }
384
385 //-----------------------------------------------------------------------------------
386
387 function text_cells($label, $name, $value=null, $size="", $max="", $title=false, $params="", $post_label="", $disabled="")
388 {
389         global $Ajax;
390
391         default_focus($name);
392         if ($label != null)
393                 label_cell($label, $params);
394         echo "<td>";
395
396         if ($value === null)
397                 $value = get_post($name);
398         echo "<input $disabled type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"$value\""
399             .($title ? " title='$title'" : '')
400             .">";
401
402         if ($post_label != "")
403                 echo " " . $post_label;
404
405         echo "</td>\n";
406         $Ajax->addUpdate($name, $name, $value);
407 }
408
409 function text_cells_ex($label, $name, $size, $max=null, $init=null, $title=null, $params=null, $post_label=null, $submit_on_change=false)
410 {
411         global $Ajax;
412
413         default_focus($name);
414         if (!isset($_POST[$name]) || $_POST[$name] == "")
415         {
416                 if ($init)
417                         $_POST[$name] = $init;
418                 else
419                         $_POST[$name] = "";
420         }
421         if ($label != null)
422                 label_cell($label, $params);
423
424         if (!isset($max))
425                 $max = $size;
426
427         echo "<td>";
428         $class = $submit_on_change ? 'class="searchbox"' : '';
429         echo "<input $class type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"" . $_POST[$name]. "\""
430          .($title ? " title='$title'": '')." >";
431
432         if ($post_label)
433                 echo " " . $post_label;
434
435         echo "</td>\n";
436         $Ajax->addUpdate($name, $name, $_POST[$name]);
437 }
438
439 function text_row($label, $name, $value, $size, $max, $title=null, $params="", $post_label="")
440 {
441         echo "<tr>";
442
443         text_cells($label, $name, $value, $size, $max, $title, $params, $post_label);
444
445         echo "</tr>\n";
446 }
447
448 //-----------------------------------------------------------------------------------
449
450 function text_row_ex($label, $name, $size, $max=null, $title=null, $value=null, $params=null, $post_label=null)
451 {
452         echo "<tr>";
453
454         text_cells_ex($label, $name, $size, $max, $value, $title, $params, $post_label);
455
456         echo "</tr>\n";
457 }
458
459 //-----------------------------------------------------------------------------------
460 function email_row($label, $name, $value, $size, $max, $title=null, $params="", $post_label="")
461 {
462         if (get_post($name)) 
463                 $label = "<a href='Mailto:".$_POST[$name]."'>$label</a>";
464         text_row($label, $name, $value, $size, $max, $title, $params, $post_label);
465 }
466
467 function email_row_ex($label, $name, $size, $max=null, $title=null, $value=null, $params=null, $post_label=null)
468 {
469         if (get_post($name)) 
470                 $label = "<a href='Mailto:".$_POST[$name]."'>$label</a>";
471         text_row_ex($label, $name, $size, $max, $title, $value, $params, $post_label);
472 }
473
474 function link_row($label, $name, $value, $size, $max, $title=null, $params="", $post_label="")
475 {
476         $val = get_post($name);
477         if ($val) {
478                 if (strpos($val,'http://')===false)
479                         $val = 'http://'.$val;
480                 $label = "<a href='$val' target='_blank'>$label</a>";
481         }
482         text_row($label, $name, $value, $size, $max, $title, $params, $post_label);
483 }
484
485 function link_row_ex($label, $name, $size, $max=null, $title=null, $value=null, $params=null, $post_label=null)
486 {
487         $val = get_post($name);
488         if ($val) {
489                 if (strpos($val,'http://')===false)
490                         $val = 'http://'.$val;
491                 $label = "<a href='$val' target='_blank'>$label</a>";
492         }
493         text_row_ex($label, $name, $size, $max, $title, $value, $params, $post_label);
494 }
495
496 //-----------------------------------------------------------------------------------
497
498 function date_cells($label, $name, $title = null, $init=null, $inc_days=0, 
499         $inc_months=0, $inc_years=0, $params=null, $submit_on_change=false)
500 {
501         global $use_date_picker, $path_to_root;
502         if (!isset($_POST[$name]) || $_POST[$name] == "")
503         {
504                 if (!$init)
505                 {
506                         if ($inc_years == 1001)
507                                 $_POST[$name] = null;
508                         else
509                         {
510                                 $dd = Today();
511                                 if ($inc_days != 0)
512                                         $dd = add_days($dd, $inc_days);
513                                 if ($inc_months != 0)
514                                         $dd = add_months($dd, $inc_months);
515                                 if ($inc_years != 0)
516                                         $dd = add_years($dd, $inc_years);
517                                 $_POST[$name] = $dd;
518                         }
519                 }
520                 else
521                         $_POST[$name] = $init;
522         }
523         if ($use_date_picker)
524                 $post_label = "<a tabindex='-1' href=\"javascript:date_picker(document.getElementsByName('$name')[0]);\">"
525                 . "     <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";
526         else
527                 $post_label = "";
528         text_cells_ex($label, $name, 9, 12, $_POST[$name], $title, $params, $post_label, $submit_on_change);
529 }
530
531 function date_row($label, $name, $title=null, $init=null, $inc_days=0, $inc_months=0, 
532         $inc_years=0, $params=null, $submit_on_change=false)
533 {
534         echo "<tr>";
535         date_cells($label, $name, $title, $init, $inc_days, $inc_months, 
536                 $inc_years, $params, $submit_on_change);
537         echo "</tr>\n";
538 }
539
540 //-----------------------------------------------------------------------------------
541
542 function ref_cells($label, $name, $title=null, $init=null, $params=null, $submit_on_change=false)
543 {
544         text_cells_ex($label, $name, 16, 18, $init, $title, $params, null, $submit_on_change);
545 }
546
547 //-----------------------------------------------------------------------------------
548
549 function ref_row($label, $name, $title=null, $init=null, $submit_on_change=false)
550 {
551         echo "<tr>";
552         ref_cells($label, $name, $title, $init, null, $submit_on_change);
553         echo "</tr>\n";
554 }
555
556 //-----------------------------------------------------------------------------------
557
558 function percent_row($label, $name, $init=null)
559 {
560
561         if (!isset($_POST[$name]) || $_POST[$name]=="")
562         {
563                 $_POST[$name] = $init == null ? '' : $init;
564         }
565
566         small_amount_row($label, $name, $_POST[$name], null, "%", user_percent_dec());
567 }
568
569 function amount_cells_ex($label, $name, $size, $max=null, $init=null, $params=null, $post_label=null, $dec=null)
570 {
571         global $Ajax;
572
573         if (!isset($dec))
574                 $dec = user_price_dec();
575         if (!isset($_POST[$name]) || $_POST[$name] == "")
576         {
577                 if ($init !== null)
578                         $_POST[$name] = $init;
579                 else
580                         $_POST[$name] = '';
581         }
582         if ($label != null)
583                 label_cell($label, $params);
584
585         if (!isset($max))
586                 $max = $size;
587
588         if ($label != null)
589                 echo "<td>";
590         else
591                 echo "<td align='right'>";
592
593         echo "<input class='amount' type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" dec=\"$dec\" value=\"" . $_POST[$name]. "\">";
594
595         if ($post_label) {
596                 echo "<span id='_{$name}_label'> $post_label</span>";
597                 $Ajax->addUpdate($name, '_'.$name.'_label', $post_label);
598         }
599         echo "</td>\n";
600         $Ajax->addUpdate($name, $name, $_POST[$name]);
601         $Ajax->addAssign($name, $name, 'dec', $dec);
602 }
603
604
605 //-----------------------------------------------------------------------------------
606
607 function amount_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
608 {
609         amount_cells_ex($label, $name, 15, 15, $init, $params, $post_label, $dec);
610 }
611
612 function amount_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
613 {
614         echo "<tr>";
615         amount_cells($label, $name, $init, $params, $post_label, $dec);
616         echo "</tr>\n";
617 }
618
619 function small_amount_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
620 {
621         echo "<tr>";
622         small_amount_cells($label, $name, $init, $params, $post_label, $dec);
623         echo "</tr>\n";
624 }
625
626 //-----------------------------------------------------------------------------------
627
628 function qty_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
629 {
630         if (!isset($dec))
631                 $dec = user_qty_dec();
632
633         amount_cells_ex($label, $name, 15, 15, $init, $params, $post_label, $dec);
634 }
635
636 function qty_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
637 {
638         if (!isset($dec))
639                 $dec = user_qty_dec();
640
641         echo "<tr>";
642         amount_cells($label, $name, $init, $params, $post_label, $dec);
643         echo "</tr>\n";
644 }
645
646 function small_qty_row($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
647 {
648         if (!isset($dec))
649                 $dec = user_qty_dec();
650
651         echo "<tr>";
652         small_amount_cells($label, $name, $init, $params, $post_label, $dec);
653         echo "</tr>\n";
654 }
655
656 //-----------------------------------------------------------------------------------
657
658 function small_amount_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
659 {
660         amount_cells_ex($label, $name, 7, 12, $init, $params, $post_label, $dec);
661 }
662
663 //-----------------------------------------------------------------------------------
664
665 function small_qty_cells($label, $name, $init=null, $params=null, $post_label=null, $dec=null)
666 {
667         if (!isset($dec))
668                 $dec = user_qty_dec();
669         amount_cells_ex($label, $name, 7, 12, $init, $params, $post_label, $dec);
670 }
671
672 //-----------------------------------------------------------------------------------
673
674 function textarea_cells($label, $name, $value, $cols, $rows, $title = null, $params="")
675 {
676         global $Ajax;
677
678         default_focus($name);
679         if ($label != null)
680                 echo "<td $params>$label</td>\n";
681         if ($value == null)
682                 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
683         echo "<td><textarea name='$name' cols='$cols' rows='$rows'"
684         .($title ? " title='$title'" : '')
685         .">$value</textarea></td>\n";
686         $Ajax->addUpdate($name, $name, $value);
687 }
688
689 function textarea_row($label, $name, $value, $cols, $rows, $title=null, $params="")
690 {
691         echo "<tr>";
692         textarea_cells($label, $name, $value, $cols, $rows, $title, $params);
693         echo "</tr>\n";
694 }
695
696 //-----------------------------------------------------------------------------------
697 /*
698 function text_row_with_submit($label, $name, $value, $size, $max, $input_name, $input_value)
699 {
700         global $Ajax;
701
702         default_focus($name);
703         echo "<tr><td>$label</td>\n";
704         echo "<td>";
705
706         if ($value == null)
707                 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
708         echo "<input type=\"text\" name=\"$name\" size=\"$size\" maxlength=\"$max\" value=\"$value\">   ";
709
710         submit($input_name, $input_value);
711
712         echo "</td></tr>\n";
713         $Ajax->addUpdate($name, $name, $value);
714 }
715 */
716 //-----------------------------------------------------------------------------------
717
718
719 ?>