コード例 #1
0
ファイル: Record.php プロジェクト: mbassan/backstage2
 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;
     }
 }
コード例 #2
0
ファイル: Form.php プロジェクト: mbassan/backstage2
    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;
        }
    }
コード例 #3
0
<?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 . "||";
        }
    }
}