3 include_once($path_to_root . "/includes/banking.inc");
4 include_once($path_to_root . "/includes/reserved.inc");
5 include_once($path_to_root . "/includes/types.inc");
6 include_once($path_to_root . "/includes/current_user.inc");
8 $_search_button = "<input type='submit' class='combo_submit' style='border:0;background:url($path_to_root/themes/"
9 ."%s/images/locate.png) no-repeat;%s' name='%s' value=' ' title='"._("Set filter")."'> ";
11 $_select_button = "<input type='submit' class='combo_select' style='border:0;background:url($path_to_root/themes/"
12 ."%s/images/button_ok.png) no-repeat;%s' name='%s' value=' ' title='"._("Select")."'> ";
14 $all_items = reserved_words::get_all();
16 //----------------------------------------------------------------------------
17 // Universal combo generator
18 // $sql must return selector values and selector texts in columns 0 & 1
19 // Options are merged with defaults.
21 function combo_input($name, $selected_id, $sql, $valfield, $namefield,
26 $opts = array( // default options
27 'where'=> array(), // additional constraints
28 'order' => $namefield, // list sort order
29 // special option parameters
30 'spec_option'=>false, // option text or false
31 'spec_id' => 0, // option id
32 // submit on select parameters
33 'select_submit' => false, //submit on select: true/false
34 'async' => true, // select update via ajax (true) vs _page_body reload
35 // search box parameters
37 'search_box' => false, // name or true/false
38 'type' => 0, // type of extended selector:
39 // 0 - with (optional) visible search box, search by id
40 // 1 - with hidden search box, search by option text
41 // 2 - TODO reverse: box with hidden selector available via enter; this
42 // would be convenient for optional ad hoc adding of new item
43 'search_submit' => true, //search submit button: true/false
44 'size' => 8, // size and max of box tag
46 'cells' => false, // combo displayed as 2 <td></td> cells
47 // if _focus is not set on next field before combo_input call
48 // set this to false to avoid deadlock via onblur handler
49 'next_focus' => (!isset($_POST['_focus']) ||
50 (isset($_POST["_{$name}_button"]) && $_POST['_focus']==$name)) ? false : $_POST['_focus'],
51 'format' => null, // format functions for regular options
52 'disabled' => false, // FIX todo
53 'box_hint' => null // box/selectors hints; null = std see below
55 // ------ merge options with defaults ----------
56 $opts = array_merge($opts, $options);
57 if (!is_array($opts['where'])) $opts['where'] = array($opts['where']);
59 $search_box = $opts['search_box']===true ? '_'.$name.'_edit' : $opts['search_box'];
60 $search_submit = $opts['search_submit']===true ? '_'.$name.'_button' : $opts['search_submit'];
61 $select_submit = $opts['select_submit']===true ? '_'.$name.'_update' : $opts['select_submit'];
62 $spec_id = $opts['spec_id'];
63 $spec_option = $opts['spec_option'];
64 $by_id = ($opts['type'] == 0);
65 $class = $by_id ? 'combo':'combo2';
67 if ($opts['sel_hint'] === null)
68 $opts['sel_hint'] = $by_id || $search_box==false ?
69 '' : _('Press Space tab for search pattern entry');
71 if ($opts['box_hint'] === null)
73 $search_box ? ($by_id ? _('Enter code fragment to search or * for all')
74 : _('Enter description fragment to search or * for all')) :'';
76 if ($selected_id == null) {
77 $selected_id = get_post($name);
79 $txt = get_post($search_box);
83 if (isset($_POST[$select_submit])) {
85 $Ajax->activate('_page_body');
87 $Ajax->activate($name);
88 set_focus($opts['next_focus']);
90 if ($search_box && $opts['search_submit']) {
91 // search related sql modifications
93 $rel = "rel='$search_box'"; // set relation to list
95 // if selected from list - set focus on next field
96 if (isset($_POST[$search_submit])) {
97 $Ajax->activate($name);
99 // if ($txt == '' && get_post($name, $spec_id)!=$spec_id)
100 // $opts['where'][] = $valfield."='$name'";
103 if ($spec_option === false)
106 $opts['where'][] = $valfield . "='". get_post($name, $spec_id)."'";
110 $opts['where'][] = ($by_id ? $valfield : $namefield) . " LIKE '%{$txt}%'";
114 if (count($opts['where'])) {
115 $sql .= strpos($sql, 'WHERE')==false ? ' WHERE ':' AND ';
116 $sql .= '('. implode($opts['where'], ' AND ') . ')';
118 if ($opts['order'] != false) {
119 $sql .= ' ORDER BY '.$opts['order'];
123 // ------ make selector ----------
125 $first_id = $first_opt = '';
127 if($name=='code_id') display_error($sql);
128 if($result = db_query($sql)) {
129 while ($contact_row = db_fetch($result)) {
130 $value = $contact_row[0];
131 $descr = $opts['format']==null ? $contact_row[1] :
132 call_user_func($opts['format'], $contact_row);
134 if (isset($_POST[$search_submit])) {
135 if (($by_id ? $value : $contact_row[1]) === $txt)
136 $selected_id = $value;
138 // if no initial selection - set the first item
139 if ($selected_id === "") {
140 $selected_id = $value;
142 if ($selected_id == $value) {
145 $_POST[$name] = $selected_id;
148 // $Ajax->addUpdate($name, $search_box,$txt);
151 if ($first_opt == false) {
156 $selector .= "<option $sel value='$value'>$descr</option>\n";
158 db_free_result($result);
160 // add first option - selected also if no match for selected_id was found
161 // and no special option defined
162 $sel = $spec_option===false || $found === $first_id ? 'selected' : '';
163 $selector = "<option $sel value='$first_id'>$first_opt</option>\n"
166 // Prepend special option.
167 if ($spec_option !== false) { // if special option used - add it
168 $first_id = $spec_id;
169 $first_opt = $spec_option;
170 if (isset($_POST[$search_submit])) {
172 $selected_id = $spec_id;
174 // if ($selected_id == $spec_id) {
175 // $found = $spec_id;
177 $sel = $found===false ? 'selected' : '';
178 $selector = "<option $sel value='$spec_id'>$spec_option</option>\n"
182 if ($found === false) {
183 $_POST[$name] = $first_id;
188 $txt = $_POST[$name];
190 $Ajax->addUpdate($name, $search_box, $txt);
193 $selector = "<select name='$name' class='$class' title='"
194 . $opts['sel_hint']."' $rel>".$selector."</select>\n";
196 $Ajax->addUpdate($name, "_{$name}_sel", $selector);
198 // because of bug which M$ cannot fix since IE 5.0
199 // we must embed whole selector in span tags to enable proper ajax update
200 $selector = "<span id='_{$name}_sel'>".$selector."</span>\n";
202 if ($select_submit != false) { // if submit on change is used - add select button
203 global $_select_button;
204 // button class selects form reload/ajax selector update
205 $selector .= sprintf($_select_button, user_theme(),
206 (in_ajax() ? 'display:none;':''),
207 $select_submit)."\n";
209 // ------ make combo ----------
212 if ($search_box != false) {
213 $edit_entry = "<input type='text' name='$search_box' id='$search_box' size='".
214 $opts['size']."' maxlength='".$opts['max'].
215 "' value='$txt' class='$class' rel='$name' title='"
216 .$opts['box_hint']."'"
217 .(in_ajax() && !$by_id ? " style=display:none;":'')
219 // default_focus($search_box);
220 if ($search_submit != false) {
221 global $_search_button;
222 $edit_entry .= sprintf($_search_button, user_theme(),
223 (in_ajax() ? 'display:none;':''),
224 $search_submit)."\n";
227 default_focus($name);
229 if ($search_box && $opts['cells'])
230 echo ($edit_entry!='' ? "<td>$edit_entry</td>" : '')."<td>$selector</td>";
232 echo $edit_entry.$selector;
237 function supplier_list($name, $selected_id, $spec_option=false, $submit_on_change=false)
241 $sql = "SELECT supplier_id, supp_name, curr_code FROM ".TB_PREF."suppliers ";
243 $mode = get_company_pref('no_supplier_list');
245 return combo_input($name, $selected_id, $sql, 'supplier_id', 'supp_name',
247 'format' => '_format_add_curr',
248 'search_box' => $mode!=0,
250 'spec_option' => $spec_option === true ? _("All Suppliers") : $spec_option,
251 'spec_id' => $all_items,
252 'select_submit'=> $submit_on_change,
254 'sel_hint' => $mode ? _('Press Space tab to filter by name fragment') :
259 function _format_add_curr($row)
261 static $company_currency;
263 if ($company_currency == null)
265 $company_currency = get_company_currency();
267 return $row[1] . ($row[2] == $company_currency ?
268 '' : (" - " . $row[2]));
271 function supplier_list_cells($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
274 echo "<td>$label</td><td>\n";
275 $str = supplier_list($name, $selected_id, $all_option, $submit_on_change);
280 function supplier_list_row($label, $name, $selected_id, $all_option = false, $submit_on_change=false)
282 echo "<tr><td>$label</td><td>";
283 $str = supplier_list($name, $selected_id, $all_option, $submit_on_change );
287 //----------------------------------------------------------------------------------------------
289 function customer_list($name, $selected_id, $spec_option=false, $submit_on_change=false)
293 $sql = "SELECT debtor_no, name, curr_code FROM ".TB_PREF."debtors_master ";
295 $mode = get_company_pref('no_customer_list');
297 return combo_input($name, $selected_id, $sql, 'debtor_no', 'name',
299 // 'format' => '_format_add_curr',
300 'search_box' => $mode!=0,
303 'spec_option' => $spec_option === true ? _("All Customers") : $spec_option,
304 'spec_id' => $all_items,
305 'select_submit'=> $submit_on_change,
307 'sel_hint' => $mode ? _('Press Space tab to filter by name fragment') :
312 function customer_list_cells($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
315 echo "<td>$label</td>\n";
317 $str = customer_list($name, $selected_id, $all_option, $submit_on_change);
322 function customer_list_row($label, $name, $selected_id, $all_option = false, $submit_on_change=false)
324 echo "<tr><td>$label</td><td nowrap>";
325 $str = customer_list($name, $selected_id, $all_option, $submit_on_change);
326 echo "</td>\n</tr>\n";
330 //------------------------------------------------------------------------------------------------
332 function customer_branches_list($customer_id, $name, $selected_id,
333 $spec_option = true, $enabled=true, $submit_on_change=false)
337 $sql = "SELECT branch_code, br_name FROM ".TB_PREF."cust_branch
338 WHERE debtor_no='" . $customer_id . "' ";
340 $where = $enabled ? array("disable_trans = 0") : array();
341 return combo_input($name, $selected_id, $sql, 'branch_code', 'br_name',
344 'spec_option' => $spec_option === true ? _('All branches') : $spec_option,
345 'spec_id' => $all_items,
346 'select_submit'=> $submit_on_change,
347 'sel_hint' => _('Select customer branch')
351 //------------------------------------------------------------------------------------------------
353 function customer_branches_list_cells($label,$customer_id, $name, $selected_id, $all_option = true, $enabled=true, $submit_on_change=false)
356 echo "<td>$label</td>\n";
358 $ret = customer_branches_list($customer_id, $name, $selected_id, $all_option, $enabled, $submit_on_change);
363 function customer_branches_list_row($label,$customer_id, $name, $selected_id, $all_option = true, $enabled=true, $submit_on_change=false)
366 $ret = customer_branches_list_cells($label, $customer_id, $name, $selected_id, $all_option, $enabled, $submit_on_change);
371 //------------------------------------------------------------------------------------------------
373 function locations_list($name, $selected_id, $all_option=false, $submit_on_change=false)
377 $sql = "SELECT loc_code, location_name FROM ".TB_PREF."locations";
379 return combo_input($name, $selected_id, $sql, 'loc_code', 'location_name',
381 'spec_option' => $all_option === true ? _("All Locations") : $all_option,
382 'spec_id' => $all_items,
383 'select_submit'=> $submit_on_change,
388 function locations_list_cells($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
391 echo "<td>$label</td>\n";
393 $str = locations_list($name, $selected_id, $all_option, $submit_on_change);
398 function locations_list_row($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
401 $str = locations_list_cells($label, $name, $selected_id, $all_option, $submit_on_change);
406 //-----------------------------------------------------------------------------------------------
408 function currencies_list($name, $selected_id, $submit_on_change=false)
410 $sql = "SELECT curr_abrev, currency FROM ".TB_PREF."currencies";
412 // default to the company currency
413 if ($selected_id == "")
415 $selected_id = get_company_currency();
416 $_POST[$name] = $selected_id;
419 return combo_input($name, $selected_id, $sql, 'curr_abrev', 'currency',
421 'select_submit'=> $submit_on_change,
426 function currencies_list_cells($label, $name, $selected_id)
429 echo "<td>$label</td>\n";
431 $str = currencies_list($name, $selected_id);
436 function currencies_list_row($label, $name, $selected_id)
439 $str = currencies_list_cells($label, $name, $selected_id);
444 //---------------------------------------------------------------------------------------------------
446 function fiscalyears_list($name, $selected_id, $submit_on_change=false)
449 $sql = "SELECT * FROM ".TB_PREF."fiscal_year";
451 // default to the company current fiscal year
452 if ($selected_id == "")
454 $selected_id = get_company_pref('f_year');
455 $_POST[$name] = $selected_id;
458 return combo_input($name, $selected_id, $sql, 'id', '',
461 'format' => '_format_fiscalyears',
462 'select_submit'=> $submit_on_change,
467 function _format_fiscalyears($row)
469 return sql2date($row[1]) . " - " . sql2date($row[2])
470 . " " . ($row[3] ? _('Closed') : _('Active')) . "</option>\n";
473 function fiscalyears_list_cells($label, $name, $selected_id)
476 echo "<td>$label</td>\n";
478 $str = fiscalyears_list($name, $selected_id);
483 function fiscalyears_list_row($label, $name, $selected_id)
486 $str = fiscalyears_list_cells($label, $name, $selected_id);
490 //------------------------------------------------------------------------------------
492 function dimensions_list($name, $selected_id, $no_option=false, $showname=' ',
493 $submit_on_change=false, $showclosed=false, $showtype=1)
495 $sql = "SELECT id, CONCAT(reference,' ',name) as ref FROM ".TB_PREF."dimensions";
498 'order' => 'reference',
499 'spec_option'=>$no_option ? $showname : false,
501 'select_submit'=> $submit_on_change,
506 $options['where'][] = "closed=0";
508 $options['where'][] = "type_=$showtype";
510 return combo_input($name, $selected_id, $sql, 'id', 'ref', $options);
513 function dimensions_list_cells($label, $name, $selected_id, $no_option=false, $showname=null,
514 $showclosed=false, $showtype=0)
517 echo "<td>$label</td>\n";
519 $str = dimensions_list($name, $selected_id, $no_option, $showname, false, $showclosed, $showtype);
524 function dimensions_list_row($label, $name, $selected_id, $no_option=false, $showname=null,
525 $showclosed=false, $showtype=0)
528 $str = dimensions_list_cells($label, $name, $selected_id, $no_option, $showname,
529 $showclosed, $showtype);
534 //---------------------------------------------------------------------------------------------------
536 function stock_items_list($name, $selected_id, $all_option=false, $submit_on_change=false, $opts=array())
540 $sql = "SELECT stock_id, s.description, c.description
541 FROM ".TB_PREF."stock_master s,".TB_PREF."stock_category c WHERE s.category_id=c.category_id";
544 // (stock_id LIKE '%{$val}%' OR ".TB_PREF."stock_category.description LIKE '%{$val}%' OR "
545 // .TB_PREF."stock_master.description LIKE '%{$val}%')";
546 return combo_input($name, $selected_id, $sql, 'stock_id', 's.description',
549 'format' => '_format_stock_items',
550 'spec_option' => $all_option===true ? _("All Items") : $all_option,
551 'spec_id' => $all_items,
552 'search_box' => true,
553 'search_submit' => get_company_pref('no_item_list')!=0,
555 'select_submit'=> $submit_on_change
559 function _format_stock_items($row)
561 return (user_show_codes() ? ($row[0] . " - ") : "")
562 . $row[2] . " - " . $row[1];
565 function stock_items_list_cells($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
568 echo "<td>$label</td>\n";
569 $str = stock_items_list($name, $selected_id, $all_option, $submit_on_change,
570 array('cells'=>true));
574 function stock_items_list_row($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
577 $str = stock_items_list_cells($label, $name, $selected_id, $all_option, $submit_on_change);
582 //------------------------------------------------------------------------------------
584 function base_stock_items_list($where, $name, $selected_id,
585 $all_option=false, $submit_on_change=false)
589 $sql = "SELECT stock_id, s.description, c.description
590 FROM ".TB_PREF."stock_master s,".TB_PREF."stock_category c WHERE
591 s.category_id=c.category_id";
593 return combo_input($name, $selected_id, $sql, 'stock_id', 's.description',
595 'format' => '_format_stock_items',
596 'spec_option' => $all_option==true ? _("All Items") : $all_option,
597 'spec_id' => $all_items,
598 'select_submit'=> $submit_on_change,
602 //------------------------------------------------------------------------------------
604 function stock_bom_items_list($name, $selected_id, $all_option=false, $submit_on_change=false)
608 // $sql = "SELECT stock_id, s.description, c.description
609 // FROM ".TB_PREF."stock_master s,"
610 // .TB_PREF."stock_category c
611 // WHERE s.category_id=c.category_id
612 // AND (s.mb_flag='M' OR s.mb_flag='K')";
614 return base_stock_items_list("(s.mb_flag='M' OR s.mb_flag='K')",
615 $name, $selected_id, $all_option, $submit_on_change);
618 function stock_bom_items_list_cells($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
621 echo "<td>$label</td>\n";
623 $str = stock_bom_items_list($name, $selected_id, $all_option, $submit_on_change);
628 function stock_bom_items_list_row($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
631 $str = stock_bom_items_list_cells($label, $name, $selected_id, $all_option, $submit_on_change);
636 //------------------------------------------------------------------------------------
638 function stock_manufactured_items_list($name, $selected_id,
639 $all_option=false, $submit_on_change=false)
643 // $sql = "SELECT stock_id, s.description, c.description
644 // FROM ".TB_PREF."stock_master s,".TB_PREF."stock_category c
645 // WHERE s.category_id=c.category_id
646 // AND (s.mb_flag='M')";
648 return base_stock_items_list("s.mb_flag='M'",
649 $name, $selected_id, $all_option, $submit_on_change);
652 function stock_manufactured_items_list_cells($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
655 echo "<td>$label</td>\n";
657 $str = stock_manufactured_items_list($name, $selected_id, $all_option, $submit_on_change);
662 function stock_manufactured_items_list_row($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
665 $str = stock_manufactured_items_list_cells($label, $name, $selected_id, $all_option, $submit_on_change);
669 //------------------------------------------------------------------------------------
671 function stock_component_items_list($name, $parent_stock_id, $selected_id,
672 $all_option=false, $submit_on_change=false)
674 return base_stock_items_list("stock_id != '$parent_stock_id'", $name, $selected_id,
675 $all_option, $submit_on_change);
677 //------------------------------------------------------------------------------------
679 function stock_costable_items_list($name, $selected_id,
680 $all_option=false, $submit_on_change=false)
682 return base_stock_items_list("mb_flag!='D'", $name, $selected_id,
683 $all_option, $submit_on_change);
686 //------------------------------------------------------------------------------------
688 function stock_purchasable_items_list($name, $selected_id, $all_option=false, $submit_on_change=false, $opts=array())
691 $sql = "SELECT stock_id, s.description, c.description
692 FROM ".TB_PREF."stock_master s,".TB_PREF."stock_category c
693 WHERE s.category_id=c.category_id
696 // (stock_id LIKE '%{$val}%' OR ".TB_PREF."stock_category.description LIKE '%{$val}%' OR "
697 // .TB_PREF."stock_master.description LIKE '%{$val}%')";
699 return combo_input($name, $selected_id, $sql, 'stock_id', 's.description',
701 'format' => '_format_stock_items',
702 'spec_option' => $all_option===true ? _("All Items") : $all_option,
703 'spec_id' => $all_items,
704 'search_box' => true,
705 'search_submit' => get_company_pref('no_item_list')!=0,
707 'select_submit'=> $submit_on_change
712 function stock_purchasable_items_list_cells($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
715 echo "<td>$label</td>\n";
716 $ret = stock_purchasable_items_list($name, $selected_id, $all_option, $submit_on_change,
717 array('cells'=>true) );
721 function stock_purchasable_items_list_row($label, $name, $selected_id, $all_option=false, $submit_on_change=false)
724 $ret = stock_purchasable_items_list_cells($label, $name, $selected_id, $all_option, $submit_on_change);
729 //------------------------------------------------------------------------------------
731 function stock_item_types_list_row($label, $name, $selected_id, $enabled=true)
733 default_focus($name);
736 echo "<td>$label</td>\n";
739 $sel = "<select name='$name' onchange='this.form.submit();'>\n";
741 $sel = "<select disabled name='$name'>\n";
742 if ($selected_id == null)
743 $selected_id = (!isset($_POST[$name]) ? "" : $_POST[$name]);
744 if ($selected_id == "")
745 $_POST[$name] = $selected_id = "B";
746 $sel .= "<option " . ($selected_id == 'M'?" selected ":"") . " value='M'>" . _("Manufactured"). "</option>\n";
747 $sel .= "<option " . ($selected_id == 'B'?" selected ":"") . " value='B'>" . _("Purchased"). "</option>\n";
748 $sel .= "<option " . ($selected_id == 'D'?" selected ":"") . " value='D'>" . _("Service"). "</option>\n";
755 function stock_units_list_row($label, $name, $value, $enabled=true)
759 default_focus($name);
760 $result = get_all_item_units();
761 echo "<tr><td>$label</td>\n";
763 echo "<td><select name='$name'>";
765 echo "<td><select disabled name='$name'>";
768 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
770 while($unit = db_fetch($result))
774 $_POST[$name] = $unit['abbr'];
776 $descr = $unit['name'];
777 if ($value==$unit['abbr'])
779 echo "<option selected value='".$unit['abbr']."'>$descr</option>\n";
783 echo "<option value='".$unit['abbr']."'>$descr</option>\n";
786 echo "</select></td></tr>\n";
789 //------------------------------------------------------------------------------------
791 function tax_types_list($name, $selected_id, $none_option=false, $submit_on_change=false)
795 $sql = "SELECT id, CONCAT(name, ' (',rate,'%)') as name FROM ".TB_PREF."tax_types";
797 return combo_input($name, $selected_id, $sql, 'id', 'name',
799 'spec_option' => $none_option,
800 'spec_id' => $all_items,
801 'select_submit'=> $submit_on_change,
806 function tax_types_list_cells($label, $name, $selected_id, $none_option=false,
807 $submit_on_change=false)
810 echo "<td>$label</td>\n";
812 $str = tax_types_list($name, $selected_id, $none_option, $submit_on_change);
817 function tax_types_list_row($label, $name, $selected_id, $none_option=false,
818 $submit_on_change=false)
821 $str = tax_types_list_cells($label, $name, $selected_id, $none_option, $submit_on_change);
826 //------------------------------------------------------------------------------------
828 function tax_groups_list($name, $selected_id,
829 $none_option=false, $submit_on_change=false)
833 $sql = "SELECT id, name FROM ".TB_PREF."tax_groups";
835 return combo_input($name, $selected_id, $sql, 'id', 'name',
838 'spec_option' => $none_option,
839 'spec_id' => $all_items,
840 'select_submit'=> $submit_on_change,
845 function tax_groups_list_cells($label, $name, $selected_id, $submit_on_change=false)
848 echo "<td>$label</td>\n";
850 $str = tax_groups_list($name, $selected_id, false, $submit_on_change);
855 function tax_groups_list_row($label, $name, $selected_id, $submit_on_change=false)
858 $str = tax_groups_list_cells($label, $name, $selected_id, false, $submit_on_change);
863 //------------------------------------------------------------------------------------
865 function item_tax_types_list($name, $selected_id)
867 $sql ="SELECT id, name FROM ".TB_PREF."item_tax_types";
868 combo_input($name, $selected_id, $sql, 'id', 'name', array('order' => 'id') );
871 function item_tax_types_list_cells($label, $name, $selected_id)
874 echo "<td>$label</td>\n";
876 item_tax_types_list($name, $selected_id);
880 function item_tax_types_list_row($label, $name, $selected_id)
883 item_tax_types_list_cells($label, $name, $selected_id);
887 //------------------------------------------------------------------------------------
889 function shippers_list($name, $selected_id)
891 $sql = "SELECT shipper_id, shipper_name FROM ".TB_PREF."shippers";
892 combo_input($name, $selected_id, $sql, 'shipper_id', 'shipper_name', array());
895 function shippers_list_cells($label, $name, $selected_id)
898 echo "<td>$label</td>\n";
900 shippers_list($name, $selected_id);
904 function shippers_list_row($label, $name, $selected_id)
907 shippers_list_cells($label, $name, $selected_id);
911 //-------------------------------------------------------------------------------------
913 function sales_persons_list($name, $selected_id)
915 $sql = "SELECT salesman_code, salesman_name FROM ".TB_PREF."salesman";
916 combo_input($name, $selected_id, $sql, 'salesman_code', 'salesman_name', array());
919 function sales_persons_list_cells($label, $name, $selected_id)
922 echo "<td>$label</td>\n";
924 sales_persons_list($name, $selected_id);
928 function sales_persons_list_row($label, $name, $selected_id, $submit_on_change=false)
931 sales_persons_list_cells($label, $name, $selected_id, $submit_on_change=false);
935 //------------------------------------------------------------------------------------
937 function sales_areas_list($name, $selected_id)
939 $sql = "SELECT area_code, description FROM ".TB_PREF."areas";
940 combo_input($name, $selected_id, $sql, 'area_code', 'description', array());
943 function sales_areas_list_cells($label, $name, $selected_id)
946 echo "<td>$label</td>\n";
948 sales_areas_list($name, $selected_id);
952 function sales_areas_list_row($label, $name, $selected_id)
955 sales_areas_list_cells($label, $name, $selected_id);
959 //------------------------------------------------------------------------------------
961 function workorders_list($name, $selected_id)
963 $sql = "SELECT id, wo_ref FROM ".TB_PREF."workorders WHERE closed=0";
964 combo_input($name, $selected_id, $sql, 'id', 'wo_ref', array());
967 function workorders_list_cells($label, $name, $selected_id)
970 echo "<td>$label</td>\n";
972 workorders_list($name, $selected_id);
976 function workorders_list_row($label, $name, $selected_id)
979 workorders_list_cells($label, $name, $selected_id);
983 //------------------------------------------------------------------------------------
985 function payment_terms_list($name, $selected_id)
987 $sql = "SELECT terms_indicator, terms FROM ".TB_PREF."payment_terms";
988 combo_input($name, $selected_id, $sql, 'terms_indicator', 'terms', array());
991 function payment_terms_list_cells($label, $name, $selected_id)
994 echo "<td>$label</td>\n";
996 payment_terms_list($name, $selected_id);
1000 function payment_terms_list_row($label, $name, $selected_id)
1003 payment_terms_list_cells($label, $name, $selected_id);
1007 //------------------------------------------------------------------------------------
1009 function credit_status_list($name, $selected_id)
1011 $sql ="SELECT id, reason_description FROM ".TB_PREF."credit_status";
1012 combo_input($name, $selected_id, $sql, 'id', 'reason_description', array());
1015 function credit_status_list_cells($label, $name, $selected_id)
1018 echo "<td>$label</td>\n";
1020 credit_status_list($name, $selected_id);
1024 function credit_status_list_row($label, $name, $selected_id)
1027 credit_status_list_cells($label, $name, $selected_id);
1031 //-----------------------------------------------------------------------------------------------
1033 function sales_types_list($name, $selected_id, $submit_on_change=false, $special_option=false)
1037 $sql = "SELECT id, sales_type FROM ".TB_PREF."sales_types";
1039 return combo_input($name, $selected_id, $sql, 'id', 'sales_type',
1041 'spec_option' => $special_option===true ? _("All Sales Types") : $special_option,
1043 'select_submit'=> $submit_on_change,
1044 // 'async' => false,
1048 function sales_types_list_cells($label, $name, $selected_id, $submit_on_change=false, $special_option=false)
1051 echo "<td>$label</td>\n";
1053 $str = sales_types_list($name, $selected_id, $submit_on_change, $special_option);
1058 function sales_types_list_row($label, $name, $selected_id, $submit_on_change=false, $special_option=false)
1061 $str = sales_types_list_cells($label, $name, $selected_id, $submit_on_change, $special_option);
1066 //-----------------------------------------------------------------------------------------------
1068 function movement_types_list($name, $selected_id)
1070 $sql = "SELECT id, name FROM ".TB_PREF."movement_types";
1071 combo_input($name, $selected_id, $sql, 'id', 'name', array());
1074 function movement_types_list_cells($label, $name, $selected_id)
1077 echo "<td>$label</td>\n";
1079 movement_types_list($name, $selected_id);
1083 function movement_types_list_row($label, $name, $selected_id)
1086 movement_types_list_cells($label, $name, $selected_id);
1090 //-----------------------------------------------------------------------------------------------
1092 function bank_trans_types_list($name, $selected_id)
1094 $sql = "SELECT id, name FROM ".TB_PREF."bank_trans_types";
1095 combo_input($name, $selected_id, $sql, 'id', 'name', array());
1098 function bank_trans_types_list_cells($label, $name, $selected_id)
1101 echo "<td>$label</td>\n";
1103 bank_trans_types_list($name, $selected_id);
1107 function bank_trans_types_list_row($label, $name, $selected_id)
1110 bank_trans_types_list_cells($label, $name, $selected_id);
1114 //-----------------------------------------------------------------------------------------------
1116 function workcenter_list($name, $selected_id, $all_option=false)
1120 $sql = "SELECT id, name FROM ".TB_PREF."workcentres";
1122 return combo_input($name, $selected_id, $sql, 'id', 'name',
1124 'spec_option' =>$all_option===true ? _("All Suppliers") : $all_option,
1125 'spec_id' => $all_items,
1129 function workcenter_list_cells($label, $name, $selected_id, $all_option=false)
1131 default_focus($name);
1133 echo "<td>$label</td>\n";
1135 workcenter_list($name, $selected_id, $all_option);
1139 function workcenter_list_row($label, $name, $selected_id, $all_option=false)
1142 workcenter_list_cells($label, $name, $selected_id, $all_option);
1146 //-----------------------------------------------------------------------------------------------
1148 function bank_accounts_list($name, $selected_id, $submit_on_change=false)
1150 $sql = "SELECT ".TB_PREF."bank_accounts.account_code, bank_account_name, bank_curr_code
1151 FROM ".TB_PREF."bank_accounts, ".TB_PREF."chart_master
1152 WHERE ".TB_PREF."bank_accounts.account_code=".TB_PREF."chart_master.account_code";
1154 return combo_input($name, $selected_id, $sql, 'account_code', 'bank_account_name',
1156 'format' => '_format_add_curr',
1157 'select_submit'=> $submit_on_change,
1162 function bank_accounts_list_cells($label, $name, $selected_id, $submit_on_change=false)
1165 echo "<td>$label</td>\n";
1167 $str = bank_accounts_list($name, $selected_id, $submit_on_change);
1172 function bank_accounts_list_row($label, $name, $selected_id, $submit_on_change=false)
1175 $str = bank_accounts_list_cells($label, $name, $selected_id, $submit_on_change);
1180 //-----------------------------------------------------------------------------------------------
1182 function class_list($name, $selected_id, $submit_on_change=false)
1184 $sql = "SELECT cid, class_name FROM ".TB_PREF."chart_class";
1186 return combo_input($name, $selected_id, $sql, 'cid', 'class_name',
1188 'select_submit'=> $submit_on_change,
1194 function class_list_cells($label, $name, $selected_id, $submit_on_change=false)
1197 echo "<td>$label</td>\n";
1199 $str = class_list($name, $selected_id, $submit_on_change);
1204 function class_list_row($label, $name, $selected_id, $submit_on_change=false)
1207 $str = class_list_cells($label, $name, $selected_id, $submit_on_change);
1212 //-----------------------------------------------------------------------------------------------
1214 function stock_categories_list($name, $selected_id)
1216 $sql = "SELECT category_id, description FROM ".TB_PREF."stock_category";
1217 combo_input($name, $selected_id, $sql, 'category_id', 'description',
1218 array('order'=>'category_id'));
1221 function stock_categories_list_cells($label, $name, $selected_id)
1224 echo "<td>$label</td>\n";
1226 stock_categories_list($name, $selected_id);
1230 function stock_categories_list_row($label, $name, $selected_id)
1233 stock_categories_list_cells($label, $name, $selected_id);
1237 //-----------------------------------------------------------------------------------------------
1239 function gl_account_types_list($name, $selected_id, $all_option, $all_option_numeric)
1243 $sql = "SELECT id, name FROM ".TB_PREF."chart_types";
1245 combo_input($name, $selected_id, $sql, 'id', 'name',
1248 'spec_option' =>$all_option,
1249 'spec_id' => $all_option_numeric ? 0 : $all_items
1253 function gl_account_types_list_cells($label, $name, $selected_id, $all_option=false,
1254 $all_option_numeric=false)
1257 echo "<td>$label</td>\n";
1259 gl_account_types_list($name, $selected_id, $all_option, $all_option_numeric);
1263 function gl_account_types_list_row($label, $name, $selected_id, $all_option=false,
1264 $all_option_numeric=false)
1267 gl_account_types_list_cells($label, $name, $selected_id, $all_option,
1268 $all_option_numeric);
1272 //-----------------------------------------------------------------------------------------------
1273 function gl_all_accounts_list($name, $selected_id, $skip_bank_accounts=false,
1274 $show_group=false, $cells=false)
1276 if ($skip_bank_accounts)
1277 $sql = "SELECT chart.account_code, chart.account_name, type.name
1278 FROM (".TB_PREF."chart_master chart,".TB_PREF."chart_types type) "
1279 ."LEFT JOIN ".TB_PREF."bank_accounts acc "
1280 ."ON chart.account_code=acc.account_code
1281 WHERE acc.account_code IS NULL
1282 AND chart.account_type=type.id";
1284 $sql = "SELECT chart.account_code, chart.account_name, type.name
1285 FROM ".TB_PREF."chart_master chart,".TB_PREF."chart_types type
1286 WHERE chart.account_type=type.id";
1288 combo_input($name, $selected_id, $sql, 'chart.account_code', 'chart.account_name',
1290 'format' => '_format_account' . ($show_group ? '2' : ''),
1291 'order' => 'account_code',
1292 'search_box' => $cells,
1293 'search_submit' => true,
1301 function _format_account($row)
1303 return $row[0] . " " . $row[1];
1306 function _format_account2($row)
1308 return $row[0] . " " . $row[2] . " " . $row[1];
1311 function gl_all_accounts_list_cells($label, $name, $selected_id, $skip_bank_accounts=false,
1312 $show_group=false, $cells=false)
1315 echo "<td>$label</td>\n";
1317 gl_all_accounts_list($name, $selected_id, $skip_bank_accounts, $show_group, $cells);
1321 function gl_all_accounts_list_row($label, $name, $selected_id, $skip_bank_accounts=false,
1322 $show_group=false, $cells=false)
1325 gl_all_accounts_list_cells($label, $name, $selected_id, $skip_bank_accounts,
1326 $show_group, $cells);
1330 function yesno_list($name, $selected_id, $name_yes="", $name_no="", $submit_on_change=false)
1332 default_focus($name);
1333 if ($submit_on_change == true)
1334 echo "<select name='$name' onchange='this.form.submit();'>"; // FIX ajax
1336 echo "<select name='$name'>";
1338 if (strlen($name_yes) == 0)
1342 if (strlen($name_no) == 0)
1347 if ($selected_id == null)
1348 $selected_id = (!isset($_POST[$name]) ? 0 : $_POST[$name]);
1349 if ($selected_id == 0)
1350 echo "<option value=1>";
1352 echo "<option selected value=1>";
1353 if (!isset($name_yes))
1354 echo _("Yes") . "</option>\n";
1356 echo $name_yes . "</option>\n";
1357 if ($selected_id == 0)
1358 echo "<option selected value=0>";
1360 echo "<option value=0>";
1361 if (!isset($name_no))
1362 echo _("No") . "</option>\n";
1364 echo $name_no . "</option>\n";
1368 function yesno_list_cells($label, $name, $selected_id, $name_yes="", $name_no="", $submit_on_change=false)
1371 echo "<td>$label</td>\n";
1373 $str = yesno_list($name, $selected_id, $name_yes, $name_no, $submit_on_change);
1378 function yesno_list_row($label, $name, $selected_id, $name_yes="", $name_no="", $submit_on_change=false)
1381 $str = yesno_list_cells($label, $name, $selected_id, $name_yes, $name_no, $submit_on_change);
1386 //------------------------------------------------------------------------------------------------
1388 function languages_list($name, $selected_id)
1390 global $installed_languages;
1392 default_focus($name);
1393 echo "<select name='$name'>";
1395 if ($selected_id == null)
1396 $selected_id = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1397 foreach ($installed_languages as $lang)
1400 if ($selected_id == $lang['code'])
1402 echo "value='" . $lang['code'] . "'>" . $lang['name'] . "</option>\n";
1406 function languages_list_cells($label, $name, $selected_id)
1409 echo "<td>$label</td>\n";
1411 languages_list($name, $selected_id);
1415 function languages_list_row($label, $name, $selected_id)
1418 languages_list_cells($label, $name, $selected_id);
1422 //------------------------------------------------------------------------------------------------
1424 function bank_account_types_list($name, $selected_id)
1426 $bank_account_types = bank_account_types::get_all();
1428 default_focus($name);
1429 echo "<select name='$name'>";
1431 if ($selected_id == null)
1432 $selected_id = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1433 foreach ($bank_account_types as $type)
1436 if ($selected_id == "" || $selected_id == $type['id'])
1438 echo "value='" . $type['id'] . "'>" . $type['name'] . "</option>\n";
1442 function bank_account_types_list_cells($label, $name, $selected_id)
1445 echo "<td>$label</td>\n";
1447 bank_account_types_list($name, $selected_id);
1451 function bank_account_types_list_row($label, $name, $selected_id)
1454 bank_account_types_list_cells($label, $name, $selected_id);
1458 //------------------------------------------------------------------------------------------------
1460 function payment_person_types_list($name, $selected_id, $related=null)
1462 $types = payment_person_types::get_all();
1464 default_focus($name);
1465 echo "<select name='$name'";
1466 if ($related) // FIX ajax
1467 echo " onchange='this.form.$related.value=\"\"; this.form.submit();' ";
1470 if ($selected_id == null)
1471 $selected_id = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1472 foreach ($types as $type)
1474 if (payment_person_types::has_items($type['id']))
1476 if ($selected_id == "")
1477 $_POST[$name] = $selected_id = $type['id'];
1479 if ($selected_id == $type['id'])
1481 echo "value='" . $type['id'] . "'>" . $type['name'] . "</option>\n";
1486 function payment_person_types_list_cells($label, $name, $selected_id, $related=null)
1489 echo "<td>$label</td>\n";
1491 $str = payment_person_types_list($name, $selected_id, $related);
1496 function payment_person_types_list_row($label, $name, $selected_id, $related=null)
1499 $str = payment_person_types_list_cells($label, $name, $selected_id, $related);
1504 //------------------------------------------------------------------------------------------------
1506 function wo_types_list($name, $selected_id)
1508 $types = wo_types::get_all();
1510 default_focus($name); // FIX ajax
1511 echo "<select name='$name' onchange='this.form.submit();'>";
1513 if ($selected_id == null)
1514 $selected_id = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1515 foreach ($types as $type)
1518 if ($selected_id == $type['id'])
1520 echo "value='" . $type['id'] . "'>" . $type['name'] . "</option>\n";
1525 function wo_types_list_row($label, $name, $selected_id)
1527 echo "<tr><td>$label</td><td>\n";
1528 $str = wo_types_list($name, $selected_id);
1529 echo "</td></tr>\n";
1533 //------------------------------------------------------------------------------------------------
1535 function dateformats_list_row($label, $name, $value)
1537 global $dateformats;
1539 default_focus($name);
1540 echo "<tr><td>$label</td>\n";
1541 echo "<td><select name='$name'>";
1544 $value = (!isset($_POST[$name]) ? 0 : $_POST[$name]);
1546 foreach ($dateformats as $df)
1549 if ($value==$counter)
1551 echo "<option selected value='$counter'>$df</option>\n";
1555 echo "<option value='$counter'>$df</option>\n";
1559 echo "</select></td></tr>\n";
1562 function dateseps_list_row($label, $name, $value)
1566 default_focus($name);
1567 echo "<tr><td>$label</td>\n";
1568 echo "<td><select name='$name'>";
1571 $value = (!isset($_POST[$name]) ? 0 : $_POST[$name]);
1573 foreach ($dateseps as $ds)
1576 if ($value==$counter)
1578 echo "<option selected value='$counter'>$ds</option>\n";
1582 echo "<option value='$counter'>$ds</option>\n";
1586 echo "</select></td></tr>\n";
1589 function thoseps_list_row($label, $name, $value)
1593 default_focus($name);
1594 echo "<tr><td>$label</td>\n";
1595 echo "<td><select name='$name'>";
1598 $value = (!isset($_POST[$name]) ? 0 : $_POST[$name]);
1600 foreach ($thoseps as $ts)
1603 if ($value==$counter)
1605 echo "<option selected value='$counter'>$ts</option>\n";
1609 echo "<option value='$counter'>$ts</option>\n";
1613 echo "</select></td></tr>\n";
1616 function decseps_list_row($label, $name, $value)
1620 default_focus($name);
1621 echo "<tr><td>$label</td>\n";
1622 echo "<td><select name='$name'>";
1625 $value = (!isset($_POST[$name]) ? 0 : $_POST[$name]);
1627 foreach ($decseps as $ds)
1630 if ($value==$counter)
1632 echo "<option selected value='$counter'>$ds</option>\n";
1636 echo "<option value='$counter'>$ds</option>\n";
1640 echo "</select></td></tr>\n";
1643 function themes_list_row($label, $name, $value)
1645 global $path_to_root;
1647 default_focus($name);
1648 $path = $path_to_root.'/themes/';
1650 $themedir = opendir($path);
1651 while(false !== ($fname = readdir($themedir)))
1653 if($fname!='.' && $fname!='..' && $fname!='CVS' && is_dir($path.$fname))
1659 echo "<tr><td>$label</td>\n";
1660 echo "<td><select name='$name'>";
1663 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1664 foreach ($themes as $th)
1669 echo "<option selected value='$th'>$th</option>\n";
1673 echo "<option value='$th'>$th</option>\n";
1676 echo "</select></td></tr>\n";
1679 function pagesizes_list_row($label, $name, $value)
1683 default_focus($name);
1684 echo "<tr><td>$label</td>\n";
1685 echo "<td><select name='$name'>";
1688 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1689 foreach ($pagesizes as $pz)
1694 echo "<option selected value='$pz'>$pz</option>\n";
1698 echo "<option value='$pz'>$pz</option>\n";
1701 echo "</select></td></tr>\n";
1704 function security_headings_list_row($label, $name, $value)
1706 global $security_headings;
1708 default_focus($name);
1709 echo "<tr><td>$label</td>\n";
1710 echo "<td><select name='$name'>";
1713 $value = (!isset($_POST[$name]) ? 0 : (int)$_POST[$name]);
1715 foreach ($security_headings as $sh)
1718 if ($value==$counter)
1720 echo "<option selected value='$counter'>$sh</option>\n";
1724 echo "<option value='$counter'>$sh</option>\n";
1728 echo "</select></td></tr>\n";
1731 function systypes_list_cells($label, $name, $value, $submit_on_change=false)
1733 global $systypes_array;
1735 default_focus($name);
1737 echo "<td>$label</td>\n";
1738 echo "<td><select name='$name'";
1739 if ($submit_on_change)
1740 echo " onchange='this.form.submit();'>"; // FIX ajax
1744 $value = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1745 foreach ($systypes_array as $key=>$type)
1750 echo "<option selected value='$key'>".$type['name']."</option>\n";
1754 echo "<option value='$key'>".$type['name']."</option>\n";
1757 echo "</select></td>\n";
1760 function systypes_list_row($label, $name, $value, $submit_on_change=false)
1763 $str = systypes_list_cells($label, $name, $value, $submit_on_change);
1768 function cust_allocations_list_cells($label, $name, $selected)
1771 default_focus($name);
1774 if ($selected == null)
1775 $selected = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1776 echo "<td><select name='$name'>";
1777 echo "<option " . ($selected == $all_items ? " selected " : "") . " value='$all_items'>" . _("All Types"). "</option>\n";
1778 echo "<option " . ($selected == '1'?" selected ":"") . " value='1'>" . _("Sales Invoices"). "</option>\n";
1779 echo "<option " . ($selected == '2'?" selected ":"") . " value='2'>" . _("Overdue Invoices"). "</option>\n";
1780 echo "<option " . ($selected == '3'?" selected ":"") . " value='3'>" . _("Payments"). "</option>\n";
1781 echo "<option " . ($selected == '4'?" selected ":"") . " value='4'>" . _("Credit Notes"). "</option>\n";
1782 echo "<option " . ($selected == '5'?" selected ":"") . " value='5'>" . _("Delivery Notes"). "</option>\n";
1783 echo "</select></td>\n";
1786 function supp_allocations_list_cells($name, $selected)
1790 default_focus($name);
1791 if ($selected == null)
1792 $selected = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1793 echo "<td><select name='$name'>";
1794 echo "<option " . ($selected == $all_items ? " selected " : "") . " value='$all_items'>" . _("All Types"). "</option>\n";
1795 echo "<option " . ($selected == '1'?" selected ":"") . " value='1'>" . _("Invoices"). "</option>\n";
1796 echo "<option " . ($selected == '2'?" selected ":"") . " value='2'>" . _("Overdue Invoices"). "</option>\n";
1797 echo "<option " . ($selected == '3'?" selected ":"") . " value='3'>" . _("Payments"). "</option>\n";
1798 echo "<option " . ($selected == '4'?" selected ":"") . " value='4'>" . _("Credit Notes"). "</option>\n";
1799 echo "<option " . ($selected == '5'?" selected ":"") . " value='5'>" . _("Overdue Credit Notes"). "</option>\n";
1800 echo "</select></td>\n";
1803 function policy_list_cells($label, $name, $selected)
1805 default_focus($name);
1806 if ($selected == null)
1808 $selected = (!isset($_POST[$name]) ? "" : $_POST[$name]);
1809 if ($selected == "")
1810 $_POST[$name] = $selected;
1814 echo "<td><select name='$name'>";
1815 echo "<option " . ($selected == ''?" selected ":"") . " value=''>" . _("Automatically put balance on back order"). "</option>\n";
1816 echo "<option " . ($selected == 'CAN'?" selected ":"") . " value='CAN'>" . _("Cancel any quantites not delivered"). "</option>\n";
1817 echo "</select></td>\n";
1820 function policy_list_row($label, $name, $selected)
1823 policy_list_cells($label, $name, $selected);
1827 function credit_type_list_cells($label, $name, $selected, $submit_on_change=false)
1829 default_focus($name);
1830 if ($selected == null)
1832 $selected = (!isset($_POST[$name]) ? "Return" : $_POST[$name]);
1833 if ($selected == "Return")
1834 $_POST[$name] = $selected;
1838 echo "<td><select name='$name'";
1839 if ($submit_on_change)
1840 echo " onchange='this.form.submit();'>"; // FIX ajax
1843 echo "<option " . ($selected == 'Return'?" selected ":"") . " value='Return'>" . _("Items Returned to Inventory Location"). "</option>\n";
1844 echo "<option " . ($selected == 'WriteOff'?" selected ":"") . " value='WriteOff'>" . _("Items Written Off"). "</option>\n";
1845 echo "</select></td>\n";
1848 function credit_type_list_row($label, $name, $selected, $submit_on_change=false)
1851 $str = credit_type_list_cells($label, $name, $selected, $submit_on_change);
1856 function number_list($name, $selected, $from, $to, $firstlabel="")
1858 default_focus($name);
1859 if ($selected == null)
1861 $selected = (!isset($_POST[$name]) ? $from : $_POST[$name]);
1862 if ($selected == $from)
1863 $_POST[$name] = $selected;
1865 echo "<select name='$name'>";
1866 for ($i = $from; $i <= $to; $i++)
1868 if ($i == 0 && $firstlabel != "")
1869 $label = $firstlabel;
1872 if ($selected == $i)
1874 echo "<option selected value='$i'>$label</option>\n";
1878 echo "<option value='$i'>$label</option>\n";
1884 function number_list_cells($label, $name, $selected, $from, $to)
1889 number_list($name, $selected, $from, $to);
1893 function number_list_row($label, $name, $selected, $from, $to)
1896 number_list_cells($label, $name, $selected, $from, $to);