function indicator($name, $formula, $caption = false, $subtable = false, $subtable_fields = false, $concat_char = false, $f_id_field = false, $formula_f_id_field = false, $link_url = false, $link_is_tab = false, $run_in_sql = false, $in_form = false) { global $CFG; if (!$CFG->pm_editor) { if (!$run_in_sql) { $formula = String::doFormulaReplacements($formula, $this->row, 1); } else { if ($this->record_id > 0) { $formula = String::replaceConditionals($formula, $this->row, $formula_f_id_field); } } $result = @eval("{$formula}"); //echo $formula.' | '.$result .' ||| '; if ($subtable && $this->record_id > 0) { $f_id_field = $f_id_field ? $f_id_field : 'id'; $db_output = DB::getSubTable($subtable, $subtable_fields, $result, $concat_char, $f_id_field); $key = key($db_output); $text = $db_output[$key]; } else { $text = Grid::detectData($name, $result, $this->db_fields); if ($link_url) { $text = Link::url($link_url, $text, "{$name}={$id}&is_tab={$link_is_tab}&action=record"); } } } if ($CFG->pm_editor && !$this->in_grid) { $method_name = Form::peLabel($CFG->method_id, 'indicator'); } $HTML = "<div class=\"label_extend\"></div><div class=\"indicator\"><b class=\"record_label\">{$caption}</b><span class=\"record_item\">{$method_name} {$text}</span></div>"; if (!$in_form) { $this->HTML[] = $HTML; } else { return $HTML; } }
function autoComplete($name, $caption = false, $required = false, $value = false, $multiple = false, $options_array = false, $subtable = false, $subtable_fields = false, $subtable_f_id = false, $id = false, $class = false, $jscript = false, $style = false, $depends_on = false, $depend_url = false, $f_id_field = false, $list_field_values = false, $default_text = false, $delete_whitespace = false, $static = false, $j = false, $grid_input = false, $is_tokenizer = false, $get_table_fields = false, $first_is_default = false) { global $CFG; $style = $style ? 'style="' . $style . '"' : false; $id = $id ? $id : $name; $id = str_replace('.', '_', $id); if (strstr($id, ',')) { $id_parts = explode(',', $id); $id = $id_parts[0]; } $depends_on = str_replace('.', '_', $depends_on); $caption = $caption ? $caption : $name; $value = !empty($this->info[$name]) && !$static ? $this->info[$name] : $value; $onclick = $default_text ? "onclick=\"defaultText(this,'{$default_text}')\"" : ''; $onblur = $default_text ? "onblur=\"defaultText(this,'{$default_text}')\"" : ''; $jscript = self::parseJscript($jscript, $id, $j, $grid_input); $outside_jscript = strstr($jscript, 'outside|') ? '<script type="text/javascript">' . str_replace('outside|', '', $jscript) . '</script>' : false; $jscript = strstr($jscript, 'outside|') ? false : $jscript; $multiple = $is_tokenizer ? 1 : $multiple; $options_array_is_subtable = DB::tableExists($options_array); $subtable = $options_array_is_subtable ? $options_array : $subtable; if ($delete_whitespace) { $this->delete_whitespace[] = $name; } if (!$static) { if ($required) { $this->required[$name] = $required; $req_img = $CFG->req_img; } if ($this->table) { if (!$multiple || $list_field_values) { $this->db_fields[$name] = !$subtable || $list_field_values ? 'vchar' : 'int'; } elseif ($multiple) { $this->db_fields[$name] = 'autocomplete-multi'; } elseif ($options_array_is_subtable) { $this->db_fields[$name] = 'vchar'; } else { $this->db_fields[$name] = 'text'; } } } if ($subtable || $options_array_is_subtable || $list_field_values) { if (!$list_field_values) { $db_output = DB::getSubTable($subtable, $subtable_fields, $subtable_f_id, $f_id_field); if ($options_array_is_subtable) { $db_output = array_combine($db_output, $db_output); } } else { $table1 = $subtable ? $subtable : $this->table; $fields1 = $subtable ? $subtable_fields : $name; $db_output = DB::getUniqueValues($table1, $fields1); } if ($db_output) { if ($options_array && !$options_array_is_subtable) { $options_array = array_merge($db_output, $options_array); } else { $options_array = $db_output; } } } if (!$multiple) { $selected_index = strlen($value) != 0 ? $options_array[$value] : false; $selected_index = !is_numeric($value) && empty($selected_index) ? $value : $selected_index; $selected_index = $options_array_is_subtable ? $value : $selected_index; } else { if (!$is_tokenizer || strstr($value, 'array:')) { if (strstr($value, 'array:')) { $value1 = is_array(@unserialize($value)) ? @unserialize($value) : $value; if (is_array($value1)) { $selected_index = implode(', ', $value1); $tokenizer_values = $value1; unset($value); $value2 = array(); foreach ($value1 as $k => $v) { $value2[] = $k . '|' . $v; } $value = 'array:' . implode('|||', $value2); } elseif (strlen($value1) > 0) { $tokenizer_values = String::unFaux($value1); } } else { $values = json_decode(urldecode($value), true); $selected_index = implode(', ', $values); $tokenizer_values = $values; } } else { if ($this->table && $this->record_id) { if (!$value) { $values = DB::getTableValues($this->table . '_' . $name . '_relations', $this->record_id); $values_arr = array(); if ($values) { foreach ($values as $val) { $values_arr[$val['value']] = $val['label']; } $selected_index = implode(', ', $values_arr); $value = rawurlencode(json_encode($values_arr)); $tokenizer_values = $values_arr; } } else { $values = json_decode(urldecode($value), true); $selected_index = implode(', ', $values); $tokenizer_values = $values; } } } } $selected_index = empty($selected_index) ? $default_text : $selected_index; $selected_index = $multiple && !empty($selected_index) ? $selected_index . ',' : $selected_index; if ($CFG->pm_editor) { $method_name = self::peLabel($CFG->method_id, 'autoComplete'); $jscript = false; $outside_jscript = false; } if (!$list_field_values) { $mult = $static ? '[' . $j . ']' . ($grid_input ? '[' . $grid_input . ']' : '') : ''; if ($is_tokenizer) { $HTML = $req_img . "\n\t\t\t\t<div class=\"label_extend\"></div>\n\t\t\t\t<label for=\"{$this->name}_{$id}{$j}_dummy\">{$caption} {$method_name}</label>\n\t\t\t\t<div class=\"tokenizer\" id=\"tokenizer\">"; if ($tokenizer_values) { foreach ($tokenizer_values as $t_key => $t_value) { if ($t_key) { $HTML .= '<div class="token"><span>' . $t_value . '</span><input type="hidden" id="d0" value="' . $t_key . '"/><div class="x" onclick="removeThis(this)">x</div></div>'; } } } $HTML .= "\n\t\t\t\t\t<input type=\"text\" name=\"{$name}\" id=\"{$this->name}_{$id}{$j}_dummy\" {$class} " . $jscript . " onkeypress=\"detectBackspace(event,this)\" {$onclick} {$onblur} {$style}/>\n\t\t\t\t</div>{$outside_jscript}"; } else { $depend = $depends_on ? 'depends_on_' . $depends_on : ''; $first = $first_is_default ? 'first_is_default' : ''; $HTML = $req_img . "<div class=\"label_extend\"></div><label for=\"{$this->name}_{$id}{$j}_dummy\">{$caption} {$method_name}</label><input type=\"text\" name=\"{$name}\" value=\"{$selected_index}\" class=\"{$class} {$depend} {$first}\" id=\"{$this->name}_{$id}{$j}_dummy\" {$class} " . $jscript . " {$onclick} {$onblur} {$style} onchange=\"checkEmpty(this,'{$multiple}')\" />{$outside_jscript}"; } $HTML .= "<input class=\"autocomplete_hidden\" type=\"hidden\" name=\"{$this->name}[{$name}]{$mult}\" value=\"{$value}\" id=\"{$this->name}_{$id}{$j}\" {$jscript} />"; if ($is_tokenizer) { $HTML .= '<input type="hidden" name="tokenizers[]" value="' . $name . '" />'; } } else { $HTML = $req_img . "<label for=\"{$this->name}_{$id}\">{$caption} {$method_name}</label><input type=\"text\" name=\"{$this->name}[{$name}]\" value=\"{$value}\" id=\"{$this->name}_{$id}\" {$class} {$jscript} {$style} />"; } if ($depends_on) { $HTML .= '<span style="display:none;" class="auto_search_params">' . $get_table_fields . '|' . $subtable . '|' . urlencode(serialize($subtable_fields)) . '|' . $f_id_field . '|' . $options_array_is_subtable . '</span>'; } if (!$CFG->pm_editor) { $a_field = !$list_field_values ? '#' . $this->name . '_' . $id . $j . '_dummy' : '#' . $this->name . '_' . $id; $HTML .= ' <script type="text/javascript">'; if (!$depends_on) { $HTML .= ' var ' . $id . '_data = ['; if (is_array($options_array)) { foreach ($options_array as $option => $option_name) { $HTML .= '{value:"' . $option . '",label:"' . str_replace('"', '\\"', str_replace(array("\r", "\n"), ' ', strip_tags($option_name))) . '"},'; } } $HTML = substr($HTML, 0, -1); $HTML .= '];'; } $HTML .= ' $(document).ready(function() { $("' . $a_field . '").autocomplete({ minChars: 1, autoFocus: true, search:function (event,ui) { //console.log(this); }, '; if (!$depends_on && !$multiple) { $HTML .= ' source:' . $id . '_data, '; } else { if ($depends_on) { $HTML .= ' source: function(term,response) { $.get("ajax.get_fields.php", {f_value: $("#' . $this->name . '_' . $depends_on . '").attr("value"),get_table_fields:"' . $get_table_fields . '",subtable:"' . $subtable . '",subtable_fields:"' . urlencode(serialize($subtable_fields)) . '",f_id_field:"' . $f_id_field . '",options_array_is_subtable:"' . $options_array_is_subtable . '",term: term },function(data){ var values = autoCompleteData(data); response(values); }); }, '; } else { $HTML .= ' source: function(term,response) { response($.ui.autocomplete.filter(' . $id . '_data,extractLast(term.term))); }, '; } } $HTML .= ' select: function(event, ui) {'; if (!$multiple) { $HTML .= ' $("#' . $this->name . '_' . $id . '").attr("value",ui.item.value); $("#' . $this->name . '_' . $id . '_dummy").attr("value",ui.item.label); if ($(".depends_on_' . $id . '").length > 0) { $(".depends_on_' . $id . '").each(function (i) { var elem = this; if ($(elem).hasClass("first_is_default")) { var params = $(elem).siblings(".auto_search_params").html().split("|"); $.get("ajax.get_fields.php", {f_value: $("#' . $this->name . '_' . $id . '").attr("value"),get_table_fields:params[0],subtable:params[1],subtable_fields:params[2],f_id_field:params[3],options_array_is_subtable:params[4]},function(data){ var values = autoCompleteData(data); var depend_id = $(elem).attr("id"); depend_id = depend_id.replace("_dummy",""); $("#"+depend_id).attr("value",values[0]["value"]); $("#"+depend_id+"_dummy").attr("value",values[0]["label"]); }); } }); } return false; '; } else { $HTML .= ' var value1 = $("#' . $this->name . '_' . $id . $j . '").attr("value"); if (value1.indexOf("array:") >= 0) { value1 = value1.replace("array:",""); value1 = (value1.length > 0) ? "array:" + value1 + "|||" + ui.item.value + "|" + ui.item.label : "array:" + ui.item.value + "|" + ui.item.label; var label1 = $("#' . $this->name . '_' . $id . $j . '_dummy").attr("value"); label2 = label1.split(","); label2.pop(); label1 = label2.join(","); label1 = ((label1.length > 0) ? label1 + "," : "") + ui.item.label + ","; ' . ($is_tokenizer ? ' $("' . $a_field . '").before(\'<div class="token"><span>\'+ui.item.label+\'</span><input type="hidden" id="d0" value="\'+value1+\'"/><div class="x" onclick="removeThis(this)">x</div></div>\'); $("' . $a_field . '").attr("value",""); $("#' . $this->name . '_' . $id . $j . '").attr("value",value1); ' : ' $("#' . $this->name . '_' . $id . $j . '").attr("value",value1); $("#' . $this->name . '_' . $id . $j . '_dummy").attr("value",label1); ') . ' } else { var is_json = true; try { JSON.parse(decodeURIComponent(value1)); } catch (e) { is_json = false; } var options = (is_json) ? JSON.parse(decodeURIComponent(value1)) : {}; options[ui.item.value] = ui.item.label; var values = []; for (i in options) values.push(options[i]); ' . ($is_tokenizer ? ' $("' . $a_field . '").before(\'<div class="token"><span>\'+ui.item.label+\'</span><input type="hidden" id="d0" value="\'+ui.item.value+\'"/><div class="x" onclick="removeToken(this)">x</div></div>\'); $("' . $a_field . '").val(""); $("#' . $this->name . '_' . $id . $j . '").attr("value",encodeURIComponent(JSON.stringify(options))); ' : ' $("#' . $this->name . '_' . $id . $j . '").attr("value",encodeURIComponent(JSON.stringify(options))); $("#' . $this->name . '_' . $id . $j . '_dummy").attr("value",values.join(",")); ') . ' } return false;'; } $HTML .= ' }'; if ($multiple) { $HTML .= ' ,focus: function(event,ui) { return false; } '; } $HTML .= ' }); }); </script>'; } if (!$static) { $this->HTML[] = $HTML; } else { return $HTML; } }
<?php include 'lib/common.php'; $term = is_array($_REQUEST['term']) ? $_REQUEST['term']['term'] : $_REQUEST['term']; if (strstr($term, ',')) { $term_parts = explode(',', $term); $c = count($term_parts) - 1; $term = $term_parts[$c]; } if ($_REQUEST['get_table_fields']) { $table_fields = DB::getTableFields($_REQUEST['f_value'], true, false, $term); if ($table_fields) { foreach ($table_fields as $field) { echo "{$field}|{$field}||"; } } } else { $db_output = DB::getSubTable($_REQUEST['subtable'], unserialize(urldecode($_REQUEST['subtable_fields'])), $_REQUEST['f_value'], false, $_REQUEST['f_id_field'], $term); if ($_REQUEST['options_array_is_subtable']) { $db_output = array_combine($db_output, $db_output); } if (is_array($db_output)) { foreach ($db_output as $option => $option_name) { echo $option . '|' . $option_name . "||"; } } }