Example #1
0
    public function show_filters($filters_set = array(), $f_id='') {
        $this->init();
        if ($this->get_access('browse')===false) {
            return;
        }
        $access = $this->get_access('view');
        $filters_all = array();
        foreach ($this->table_rows as $k => $v) {
            if (isset($access[$v['id']]) && $access[$v['id']]) {
                if ((!isset($filters_set[$v['id']]) && $v['filter']) || (isset($filters_set[$v['id']]) && $filters_set[$v['id']])) {
                    $filters_all[] = $k;
                    if (isset($filters_set[$v['id']])) {
                        unset($filters_set[$v['id']]);
                    }
                }
            }
        }
        if (!$this->data_gb) $this->data_gb = $this->init_module('Utils/GenericBrowser', null, $this->tab);
        if (empty($filters_all)) {
            $this->crits = array();
            return '';
        } // TODO: move it
        $form = $this->init_module('Libs/QuickForm', null, $this->tab.'filters');

//        $form_sub = $form->get_submit_form_js_by_name(array($form->get_name(), $this->data_gb->form_s->get_name()),true,null)."return false;";
//        $this->data_gb->form_s->updateAttributes(array('onsubmit'=>$form_sub));
//	      $form->updateAttributes(array('onsubmit'=>$form_sub));

		$empty_defaults = array();
        $filters = array();
        $text_filters = array();
        foreach ($filters_all as $filter) {
            $filter_id = preg_replace('/[^a-z0-9]/','_',strtolower($filter));
            $field_id = 'filter__'.$filter_id;
            if (isset($this->custom_filters[$filter_id])) {
                $f = $this->custom_filters[$filter_id];
				if ($this->data_gb->show_all()) {
					if (isset($f['trans'])) {
						foreach ($f['trans'] as $k=>$v)
							if (empty($v)) $empty_defaults[$field_id] = $k;
					}
				}
                if (!isset($f['label'])) $f['label'] = $filter;
                if (!isset($f['args'])) $f['args'] = null;
                if (!isset($f['args_2'])) $f['args_2'] = null;
                if (!isset($f['args_3'])) $f['args_3'] = null;
                $form->addElement($f['type'], $field_id, $f['label'], $f['args'], $f['args_2'], $f['args_3']);
                $filters[] = $filter_id;
                continue;
            }
            $arr = array();
            $autoselect = false;
            if ($this->table_rows[$filter]['type']=='timestamp' || $this->table_rows[$filter]['type']=='date') {
				$form->addElement('datepicker', $field_id.'__from', _V($filter).' ('.__('From').')', array('label'=>false)); // TRSL
				$form->addElement('datepicker', $field_id.'__to', _V($filter).' ('.__('To').')', array('label'=>false)); // TRSL
				$filters[] = $filter_id.'__from';
				$filters[] = $filter_id.'__to';
				continue;
            } elseif ($this->table_rows[$filter]['type']=='checkbox') {
                $arr = array(''=>__('No'), 1=>__('Yes'));
            } elseif (in_array($this->table_rows[$filter]['type'], array('currency','float','integer','autonumber')) || ($this->table_rows[$filter]['type'] == 'calculated' && $this->table_rows[$filter]['param'] != '' && in_array($this->table_rows[$filter]['style'], array('currency','float','integer','autonumber')))) {
		    $form->addElement('text', $field_id.'__from', _V($filter).' ('.__('From').')', array('label'=>false)); // TRSL
		    $form->addElement('text', $field_id.'__to', _V($filter).' ('.__('To').')', array('label'=>false)); // TRSL
		    $form->addRule($field_id.'__from',__('Only numbers are allowed.'),'numeric');
		    $form->addRule($field_id.'__to',__('Only numbers are allowed.'),'numeric');
		    $filters[] = $filter_id.'__from';
		    $filters[] = $filter_id.'__to';
		    if ($this->table_rows[$filter]['type'] == 'currency' || ($this->table_rows[$filter]['type'] == 'calculated' && $this->table_rows[$filter]['param'] != '' && $this->table_rows[$filter]['style'] == 'currency')) {
                        $arr = Utils_CurrencyFieldCommon::get_currencies();
                        if (count($arr) > 1) {
                            $arr = array('__NULL__'=>'---')+$arr;
                            $form->addElement('select', $field_id.'__currency', _V($filter).' ('.__('Currency').')', $arr); // TRSL
                            $filters[] = $filter_id.'__currency';
                        }
                    }
                    continue;
            } else if ($this->table_rows[$filter]['type'] == 'commondata') {
					$parts = explode('::', $this->table_rows[$filter]['param']['array_id']);
					$array_id = array_shift($parts);
					$arr = Utils_CommonDataCommon::get_translated_array($array_id, $this->table_rows[$filter]['param']['order_by_key']);
					while (!empty($parts)) {
						array_shift($parts);
						$next_arr = array();
						foreach ($arr as $k=>$v) {
							$next = Utils_CommonDataCommon::get_translated_array($array_id.'/'.$k, $this->table_rows[$filter]['param']['order_by_key']);
							foreach ($next as $k2=>$v2)
								$next_arr[$k.'/'.$k2] = $v.' / '.$v2;
						}
						$arr = $next_arr;
					}
                    natcasesort($arr);
            } else {
                    $param = explode(';',$this->table_rows[$filter]['param']);
                    $x = explode('::',$param[0]);
                    if (!isset($x[1])) continue;
                    list($tab, $col) = $x;
                    if ($tab=='__COMMON__') {
                        $arr = Utils_CommonDataCommon::get_translated_tree($col);
                    } else {
                        $col = explode('|',$col);
                        Utils_RecordBrowserCommon::check_table_name($tab);
                        foreach ($col as $k=>$v)
                            $col[$k] = preg_replace('/[^a-z0-9]/','_',strtolower($v));
                        $crits = array();
                        if (isset($this->filter_crits[$this->table_rows[$filter]['id']])) {
                            $crits = $this->filter_crits[$this->table_rows[$filter]['id']];
                        } else {
                            if (isset($param[1])) {
                                $callback = explode('::',$param[1]);
                                if (is_callable($callback))
                                    $crits = call_user_func($callback, true);
                            }
                            if (!is_array($crits)) {
                                $crits = array();
                                if (isset($param[2])) {
                                    $callback = explode('::',$param[2]);
                                    if (is_callable($callback))
                                        $crits = call_user_func($callback, true);
                                }
                                if (!is_array($crits)) $crits = array();
                            }
                        }
                        if($tab!='__RECORDSETS__' && !preg_match('/,/',$tab)) {
                            $qty = Utils_RecordBrowserCommon::get_records_count($tab,$crits);
                            if($qty <= Utils_RecordBrowserCommon::$options_limit) {
                                $ret2 = Utils_RecordBrowserCommon::get_records($tab,$crits,$col);
                                if (count($col)!=1) {
                                    foreach ($ret2 as $k=>$v) {
                                        $txt = array();
                                        foreach ($col as $kk=>$vv)
                                            $txt[] = $v[$vv];
                                        $arr[$k] = implode(' ',$txt);
                                    }
                                } else {
                                    foreach ($ret2 as $k=>$v) {
                                        $arr[$k] = $v[$col[0]];
                                    }
                                }
                                natcasesort($arr);
                            } else {
                                $arr = array();
                                $autoselect = true;
                                $param = array($tab,$crits);
                            }
                        } else {
                            $arr = array();
                            $autoselect = true;
                            $param = array($tab,$crits);
                        }
                        if ($tab=='contact') $arr = array($this->crm_perspective_default()=>'['.__('Perspective').']')+$arr;
                    } 
            }
            
            
            if($autoselect) {
                $f_callback = array('Utils_RecordBrowserCommon', 'autoselect_label');
                $arr = array('__NULL__'=>'---')+$arr;
                $form->addElement('autoselect', $field_id, _V($filter), $arr, array(array('Utils_RecordBrowserCommon', 'automulti_suggestbox'), array_merge($param,array($f_callback, $this->table_rows[$filter]['param']))), $f_callback);
                $form->setDefaults(array($field_id=>'__NULL__'));
            } else {
                $arr = array('__NULL__'=>'---')+$arr;
                $form->addElement('select', $field_id, _V($filter), $arr); // TRSL
            }

            $filters[] = $filter_id;
        }
        $form->addElement('submit', 'submit', __('Show'));

        $use_saving_filters = Base_User_SettingsCommon::get($this->get_type(), 'save_filters');
		if ($this->data_gb->show_all()) {
			$this->set_module_variable('def_filter', $empty_defaults);
            if ($use_saving_filters) {
                Base_User_SettingsCommon::save($this->get_type(), $this->tab . '_filters', $empty_defaults);
            }
			print('<span style="display:none;">'.microtime(true).'</span>');
		}
        $def_filt = $this->get_module_variable('def_filter', array());
        if ($use_saving_filters) {
            $saved_filters = Base_User_SettingsCommon::get($this->get_type(), $this->tab . '_filters');
            if ($saved_filters) {
                $def_filt = $saved_filters;
            }
        }

        $this->crits = array();

        $form->setDefaults($def_filt);

        $external_filters = array();

        $dont_hide = Base_User_SettingsCommon::get('Utils/RecordBrowser',$this->tab.'_show_filters');

        $vals = $form->exportValues();

        $ret = DB::Execute('SELECT * FROM recordbrowser_browse_mode_definitions WHERE tab=%s', array($this->tab));
        while ($row = $ret->FetchRow()) {
            $m = $this->init_module($row['module']);
            $next_dont_hide = false; // FIXME deprecated, to be removed
            $this->display_module($m, array(& $form, & $external_filters, & $vals, & $this->crits, & $next_dont_hide, $this), $row['func']);
        }

        foreach ($filters_all as $filter) {
            if (in_array(strtolower($filter), $external_filters)) continue;
            $filter_id = preg_replace('/[^a-z0-9]/','_',strtolower($filter));
            $field_id = 'filter__'.$filter_id;
            if (isset($this->custom_filters[$filter_id])) {
                if (!isset($vals['filter__'.$filter_id])) {
					if ($this->custom_filters[$filter_id]['type']!='autoselect')
						$vals['filter__'.$filter_id]='__NULL__';
					else
						$vals['filter__'.$filter_id]='';
				}
                if (isset($this->custom_filters[$filter_id]['trans'][$vals['filter__'.$filter_id]])) {
                    foreach($this->custom_filters[$filter_id]['trans'][$vals['filter__'.$filter_id]] as $k=>$v)
                        $this->crits[$k] = $v;
                } elseif (isset($this->custom_filters[$filter_id]['trans_callback'])) {
                    $new_crits = call_user_func($this->custom_filters[$filter_id]['trans_callback'], $vals['filter__'.$filter_id], $filter_id);
                    $this->crits = Utils_RecordBrowserCommon::merge_crits($this->crits, $new_crits);
                }
            } else {
                if (in_array($this->table_rows[$filter]['type'], array('currency','float','integer','autonumber')) || ($this->table_rows[$filter]['type'] == 'calculated' && $this->table_rows[$filter]['param'] != '' && in_array($this->table_rows[$filter]['style'], array('currency','float','integer','autonumber')))) {
                    if (isset($vals[$field_id.'__currency']) && $vals[$field_id.'__currency'] != "__NULL__")
                        $this->crits["~$filter"] = "%__" . $vals[$field_id.'__currency'];
                    if (isset($vals[$field_id.'__from']) && $vals[$field_id.'__from'] !== "")
                        $this->crits[">=\"$filter"] = floatval($vals[$field_id.'__from']);
                    if (isset($vals[$field_id.'__to']) && $vals[$field_id.'__to'] !== "")
                        $this->crits["<=\"$filter"] = floatval($vals[$field_id.'__to']);
                    continue;
                }
				if ($this->table_rows[$filter]['type']=='timestamp' || $this->table_rows[$filter]['type']=='date') {
					if (isset($vals[$field_id.'__from']) && $vals[$field_id.'__from'])
						$this->crits['>='.$filter_id] = $vals[$field_id.'__from'].' 00:00:00';
					if (isset($vals[$field_id.'__to']) && $vals[$field_id.'__to'])
						$this->crits['<='.$filter_id] = $vals[$field_id.'__to'].' 23:59:59';
					continue;
				}
                if (!isset($text_filters[$filter_id])) {
                    if (!isset($vals['filter__'.$filter_id]) || ($this->table_rows[$filter]['type']=='select' && $vals['filter__'.$filter_id]==='')) $vals['filter__'.$filter_id]='__NULL__';
					if ($vals['filter__'.$filter_id]==='__NULL__') continue;
					if ($this->table_rows[$filter]['type']=='commondata') {
						$vals2 = explode('/',$vals['filter__'.$filter_id]);
						$param = explode('::',$this->table_rows[$filter]['param']['array_id']);
						array_shift($param);
						$param[] = $filter_id;
						foreach ($vals2 as $v)
							$this->crits[preg_replace('/[^a-z0-9]/','_',strtolower(array_shift($param)))] = $v;
					} else {
						$this->crits[$filter_id] = $vals['filter__'.$filter_id];
                        if ($this->table_rows[$filter]['type']=='checkbox' && $this->crits[$filter_id]=='') $this->crits[$filter_id] = array(null,0);
					}
                } else {
                    if (!isset($vals['filter__'.$filter_id])) $vals['filter__'.$filter_id]='';
                    if ($vals['filter__'.$filter_id]!=='') {
                        $args = $this->table_rows[$filter];
                        $str = explode(';', $args['param']);
                        $ref = explode('::', $str[0]);
                        if ($ref[0]!='' && isset($ref[1])) $this->crits['_"'.$args['id'].'['.$args['ref_field'].']'] = DB::Concat(DB::qstr($vals['filter__'.$filter_id]),DB::qstr('%'));;
                        if ($args['type']=='commondata' || $ref[0]=='__COMMON__') {
							$val = array_pop(explode('/',$vals['filter__'.$filter_id]));
                            if (!isset($ref[1]) || $ref[0]=='__COMMON__') $this->crits['_"'.$args['id'].'['.$args['ref_field'].']'] = DB::Concat(DB::qstr($val),DB::qstr('%'));;
                        }
                    }
                }
            }
        }
		foreach ($this->crits as $k=>$c) if ($c===$this->crm_perspective_default()) {
			$this->crits[$k] = explode(',',trim(CRM_FiltersCommon::get(),'()'));
			if (isset($this->crits[$k][0]) && $this->crits[$k][0]=='') unset($this->crits[$k]);
		}

        $this->set_module_variable('crits', $this->crits);

        $filters = array_merge($filters, $external_filters);

        foreach ($filters as $k=>$v)
            $filters[$k] = 'filter__'.$v;

        foreach ($vals as $k=>$v) {
            $c = str_replace('filter__','',$k);
            if (isset($this->custom_filters[$c]) && $this->custom_filters[$c]['type']=='checkbox' && $v==='__NULL__') unset($vals[$k]);
        }
        if ($use_saving_filters && isset($vals['submited']) && $vals['submited']) {
            unset($vals['submited']);
            unset($vals['submit']);
            Base_User_SettingsCommon::save($this->get_type(), $this->tab . '_filters', $vals);
        }
        $this->set_module_variable('def_filter', $vals);
        $theme = $this->init_module('Base/Theme');
        $form->assign_theme('form',$theme);
        $theme->assign('filters', $filters);
		load_js('modules/Utils/RecordBrowser/filters.js');
        $theme->assign('show_filters', array('attrs'=>'onclick="rb_show_filters(\''.$this->tab.'\',\''.$f_id.'\');" id="show_filter_b_'.$f_id.'"','label'=>__('Show filters')));
        $theme->assign('hide_filters', array('attrs'=>'onclick="rb_hide_filters(\''.$this->tab.'\',\''.$f_id.'\');" id="hide_filter_b_'.$f_id.'"','label'=>__('Hide filters')));
        $theme->assign('id', $f_id);
        if (!$this->isset_module_variable('filters_defaults'))
            $this->set_module_variable('filters_defaults', $this->crits);
        elseif ($this->crits!==$this->get_module_variable('filters_defaults')) $theme->assign('dont_hide', true);
        if ($dont_hide) $theme->assign('dont_hide', true);
        return $this->get_html_of_module($theme, 'Filter', 'display');
    }
Example #2
0
 public static function mobile_rb_edit($tab, $id)
 {
     if ($id === false) {
         $rec = array();
     } else {
         $rec = self::get_record($tab, $id);
     }
     $cols = Utils_RecordBrowserCommon::init($tab);
     $defaults = array();
     if ($id === false) {
         $mode = 'add';
         $access = array();
         $defaults = self::record_processing($tab, $defaults, 'adding');
     } else {
         $mode = 'edit';
         $access = Utils_RecordBrowserCommon::get_access($tab, 'view', $rec);
         if (is_array($access)) {
             foreach ($access as $k => $v) {
                 if (!$v) {
                     unset($rec[$k]);
                 }
             }
         }
         $defaults = $rec = self::record_processing($tab, $rec, 'editing');
     }
     $QFfield_callback_table = array();
     $ret = DB::Execute('SELECT * FROM ' . $tab . '_callback WHERE freezed=0');
     while ($row = $ret->FetchRow()) {
         $QFfield_callback_table[$row['field']] = $row['callback'];
     }
     $defaults = array_merge($defaults, $_SESSION['rb_' . $tab . '_defaults']);
     $qf = new HTML_QuickForm('rb_edit', 'post', 'mobile.php?' . http_build_query($_GET));
     foreach ($cols as $field => $args) {
         if (isset($access[$args['id']]) && !$access[$args['id']]) {
             continue;
         }
         if (isset($rec[$args['id']])) {
             $val = $rec[$args['id']];
         } elseif (isset($defaults[$args['id']])) {
             $val = $defaults[$args['id']];
         } else {
             $val = null;
         }
         $label = _V($args['name']);
         // TRSL
         if (isset($QFfield_callback_table[$field])) {
             $mobile_rb = new Utils_RecordBrowserMobile($tab, $rec);
             self::call_QFfield_callback($QFfield_callback_table[$field], $qf, $args['id'], $label, $mode, $val, $args, $mobile_rb, null);
             if ($mode == 'edit') {
                 unset($defaults[$args['id']]);
             }
             continue;
         }
         switch ($args['type']) {
             case 'calculated':
                 $qf->addElement('static', $args['id'], $label);
                 if (!is_array($rec)) {
                     $values = $defaults;
                 } else {
                     $values = $rec;
                     if (is_array($defaults)) {
                         $values = $values + $defaults;
                     }
                 }
                 if (!isset($values[$args['id']])) {
                     $values[$args['id']] = '';
                 }
                 $val = Utils_RecordBrowserCommon::get_val($tab, $field, $values, true, $args);
                 if ($val !== null) {
                     $qf->setDefaults(array($args['id'] => $val));
                 }
                 break;
             case 'integer':
             case 'float':
                 $qf->addElement('text', $args['id'], $label);
                 if ($args['type'] == 'integer') {
                     $qf->addRule($args['id'], __('Only integer numbers are allowed.'), 'regex', '/^[0-9]*$/');
                 } else {
                     $qf->addRule($args['id'], __('Only numbers are allowed.'), 'numeric');
                 }
                 if ($val !== null) {
                     $qf->setDefaults(array($args['id'] => $val));
                 }
                 break;
             case 'checkbox':
                 $qf->addElement('checkbox', $args['id'], $label, '');
                 if ($val !== null) {
                     $qf->setDefaults(array($args['id'] => $val));
                 }
                 break;
             case 'currency':
                 $qf->addElement('currency', $args['id'], $label);
                 if ($val !== null) {
                     $qf->setDefaults(array($args['id'] => $val));
                 }
                 break;
             case 'text':
                 $qf->addElement('text', $args['id'], $label, array('maxlength' => $args['param']));
                 $qf->addRule($args['id'], __('Maximum length for this field is %s characters.', array($args['param'])), 'maxlength', $args['param']);
                 if ($val !== null) {
                     $qf->setDefaults(array($args['id'] => $val));
                 }
                 break;
             case 'long text':
                 $qf->addElement('textarea', $args['id'], $label, array('maxlength' => 200));
                 $qf->addRule($args['id'], __('Maximum length for this field in mobile edition is 200 chars.'), 'maxlengt', 200);
                 if ($val !== null) {
                     $qf->setDefaults(array($args['id'] => $val));
                 }
                 break;
             case 'commondata':
                 $param = explode('::', $args['param']['array_id']);
                 foreach ($param as $k => $v) {
                     if ($k != 0) {
                         $param[$k] = self::get_field_id($v);
                     }
                 }
                 if (count($param) == 1) {
                     $qf->addElement($args['type'], $args['id'], $label, $param, array('empty_option' => true, 'id' => $args['id'], 'order_by_key' => $args['param']['order_by_key']));
                     if ($val !== null) {
                         $qf->setDefaults(array($args['id'] => $val));
                     }
                 }
                 break;
             case 'select':
                 $comp = array();
                 $ref = explode(';', $args['param']);
                 if (isset($ref[1])) {
                     $crits_callback = $ref[1];
                 } else {
                     $crits_callback = null;
                 }
                 if (isset($ref[2])) {
                     $multi_adv_params = call_user_func(explode('::', $ref[2]));
                 } else {
                     $multi_adv_params = null;
                 }
                 if (!isset($multi_adv_params) || !is_array($multi_adv_params)) {
                     $multi_adv_params = array();
                 }
                 if (!isset($multi_adv_params['order'])) {
                     $multi_adv_params['order'] = array();
                 }
                 if (!isset($multi_adv_params['cols'])) {
                     $multi_adv_params['cols'] = array();
                 }
                 if (!isset($multi_adv_params['format_callback'])) {
                     $multi_adv_params['format_callback'] = array();
                 }
                 $ref = $ref[0];
                 @(list($tab2, $col) = explode('::', $ref));
                 if (!isset($col)) {
                     trigger_error($field);
                 }
                 if ($tab2 == '__RECORDSETS__') {
                     continue;
                 }
                 //skip multi recordsets chained selector
                 if ($tab2 == '__COMMON__') {
                     $data = Utils_CommonDataCommon::get_translated_tree($col);
                     if (!is_array($data)) {
                         $data = array();
                     }
                     $comp = $comp + $data;
                 } else {
                     if (isset($crits_callback)) {
                         $crit_callback = explode('::', $crits_callback);
                         if (is_callable($crit_callback)) {
                             $crits = call_user_func($crit_callback, false, $rec);
                             $adv_crits = call_user_func($crit_callback, true, $rec);
                         } else {
                             $crits = $adv_crits = array();
                         }
                         if ($adv_crits === $crits) {
                             $adv_crits = null;
                         }
                         if ($adv_crits !== null) {
                             continue;
                             //skip record picker
                         }
                     } else {
                         $crits = array();
                     }
                     $col = explode('|', $col);
                     $col_id = array();
                     foreach ($col as $c) {
                         $col_id[] = self::get_field_id($c);
                     }
                     $records = Utils_RecordBrowserCommon::get_records($tab2, $crits, empty($multi_adv_params['format_callback']) ? $col_id : array(), !empty($multi_adv_params['order']) ? $multi_adv_params['order'] : array());
                     $ext_rec = array();
                     if (isset($rec[$args['id']])) {
                         if (!is_array($rec[$args['id']])) {
                             if ($rec[$args['id']] != '') {
                                 $rec[$args['id']] = array($rec[$args['id']] => $rec[$args['id']]);
                             } else {
                                 $rec[$args['id']] = array();
                             }
                         }
                     }
                     if (isset($defaults[$args['id']])) {
                         if (!is_array($defaults[$args['id']])) {
                             $rec[$args['id']][$defaults[$args['id']]] = $defaults[$args['id']];
                         } else {
                             foreach ($defaults[$args['id']] as $v) {
                                 $rec[$args['id']][$v] = $v;
                             }
                         }
                     }
                     $single_column = count($col_id) == 1;
                     if (isset($rec[$args['id']])) {
                         $ext_rec = array_flip($rec[$args['id']]);
                         foreach ($ext_rec as $k => $v) {
                             $c = Utils_RecordBrowserCommon::get_record($tab2, $k);
                             if (!empty($multi_adv_params['format_callback'])) {
                                 $n = call_user_func($multi_adv_params['format_callback'], $c);
                             } else {
                                 if ($single_column) {
                                     $n = $c[$col_id[0]];
                                 } else {
                                     $n = array();
                                     foreach ($col_id as $cid) {
                                         $n[] = $c[$cid];
                                     }
                                     $n = implode(' ', $n);
                                 }
                             }
                             $comp[$k] = $n;
                         }
                     }
                     if (!empty($multi_adv_params['order'])) {
                         natcasesort($comp);
                     }
                     foreach ($records as $k => $v) {
                         if (!empty($multi_adv_params['format_callback'])) {
                             $n = call_user_func($multi_adv_params['format_callback'], $v);
                         } else {
                             //                                      $n = $v[$col_id];
                             if ($single_column) {
                                 $n = $v[$col_id[0]];
                             } else {
                                 $n = array();
                                 foreach ($col_id as $cid) {
                                     $n[] = $v[$cid];
                                 }
                                 $n = implode(' ', $n);
                             }
                         }
                         $comp[$k] = $n;
                         unset($ext_rec[$v['id']]);
                     }
                     if (empty($multi_adv_params['order'])) {
                         natcasesort($comp);
                     }
                 }
                 if ($args['type'] === 'select') {
                     $comp = array('' => '---') + $comp;
                 }
                 $qf->addElement($args['type'], $args['id'], $label, $comp, array('id' => $args['id']));
                 if ($id !== false) {
                     $qf->setDefaults(array($args['id'] => $rec[$args['id']]));
                 }
                 break;
             case 'date':
                 $qf->addElement('date', $args['id'], $label, array('format' => 'd M Y', 'minYear' => date('Y') - 95, 'maxYear' => date('Y') + 5, 'addEmptyOption' => true, 'emptyOptionText' => '--'));
                 if ($val) {
                     $qf->setDefaults(array($args['id'] => $val));
                 }
                 break;
             case 'timestamp':
                 $qf->addElement('date', $args['id'], $label, array('format' => 'd M Y H:i', 'minYear' => date('Y') - 95, 'maxYear' => date('Y') + 5, 'addEmptyOption' => true, 'emptyOptionText' => '--'));
                 if ($val) {
                     $default = Base_RegionalSettingsCommon::time2reg($val, true, true, true, false);
                     $qf->setDefaults(array($args['id'] => $default));
                 }
                 break;
             case 'time':
                 $qf->addElement('date', $args['id'], $label, array('format' => 'H:i', 'addEmptyOption' => true, 'emptyOptionText' => '--'));
                 if ($val) {
                     $default = Base_RegionalSettingsCommon::time2reg($val, true, true, true, false);
                     $qf->setDefaults(array($args['id'] => $default));
                 }
                 break;
             case 'multiselect':
                 //ignore
                 if ($id === false) {
                     continue;
                 }
                 $val = Utils_RecordBrowserCommon::get_val($tab, $field, $rec, true, $args);
                 if ($val === '') {
                     continue;
                 }
                 $qf->addElement('static', $args['id'], $label);
                 $qf->setDefaults(array($args['id'] => $val));
                 unset($defaults[$args['id']]);
                 break;
         }
         if ($args['required']) {
             $qf->addRule($args['id'], __('Field required'), 'required');
         }
     }
     $qf->addElement('submit', 'submit_button', __('Save'), IPHONE ? 'class="button white"' : '');
     if ($qf->validate()) {
         $values = $qf->exportValues();
         foreach ($cols as $v) {
             if ($v['type'] == 'checkbox' && !isset($values[$v['id']])) {
                 $values[$v['id']] = 0;
             } elseif ($v['type'] == 'date') {
                 if (is_array($values[$v['id']]) && $values[$v['id']]['Y'] !== '' && $values[$v['id']]['M'] !== '' && $values[$v['id']]['d'] !== '') {
                     $values[$v['id']] = sprintf("%d-%02d-%02d", $values[$v['id']]['Y'], $values[$v['id']]['M'], $values[$v['id']]['d']);
                 } else {
                     $values[$v['id']] = '';
                 }
             } elseif ($v['type'] == 'timestamp') {
                 if ($values[$v['id']]['Y'] !== '' && $values[$v['id']]['M'] !== '' && $values[$v['id']]['d'] !== '' && $values[$v['id']]['H'] !== '' && $values[$v['id']]['i'] !== '') {
                     $timestamp = $values[$v['id']]['Y'] . '-' . $values[$v['id']]['M'] . '-' . $values[$v['id']]['d'] . ' ' . $values[$v['id']]['H'] . ':' . $values[$v['id']]['i'];
                     $values[$v['id']] = Base_RegionalSettingsCommon::reg2time($timestamp, true);
                 } else {
                     $values[$v['id']] = '';
                 }
             } elseif ($v['type'] == 'time') {
                 if ($values[$v['id']]['H'] !== '' && $values[$v['id']]['i'] !== '') {
                     $time = recalculate_time(date('Y-m-d'), $values[$v['id']]);
                     $timestamp = Base_RegionalSettingsCommon::reg2time(date('1970-01-01 H:i:s', $time), true);
                     $values[$v['id']] = date('1970-01-01 H:i:s', $timestamp);
                 } else {
                     $values[$v['id']] = '';
                 }
             }
         }
         foreach ($defaults as $k => $v) {
             if (!isset($values[$k])) {
                 $values[$k] = $v;
             }
         }
         if ($id !== false) {
             $values['id'] = $id;
             Utils_RecordBrowserCommon::update_record($tab, $id, $values);
         } else {
             $id = Utils_RecordBrowserCommon::new_record($tab, $values);
         }
         return false;
     }
     $renderer =& $qf->defaultRenderer();
     $qf->accept($renderer);
     print $renderer->toHtml();
 }
Example #3
0
 public static function QFfield_access(&$form, $field, $label, $mode, $default, $desc, $rb = null)
 {
     if (!Base_AclCommon::i_am_admin()) {
         return;
     }
     if ($mode == 'view' && !Utils_RecordBrowser::$last_record['login']) {
         return;
     }
     $data = Utils_CommonDataCommon::get_translated_tree('Contacts/Access');
     if (!is_array($data)) {
         $data = array();
     }
     $form->addElement('multiselect', $field, $label, $data, array('id' => $field));
     $form->setDefaults(array($field => $default));
 }