1 |
ravilov |
1.1 |
<?php |
2 |
|
|
$basic_logic = "OR"; |
3 |
|
|
function myCmp($a, $b) { |
4 |
|
|
if ($a["caption"] == $b["caption"]) return 0; |
5 |
|
|
return ($a["caption"] < $b["caption"]) ? -1 : 1; |
6 |
|
|
} |
7 |
|
|
function Search($fields, $q1_fields, $q2_fields) { |
8 |
|
|
$tp = new Smarty(); |
9 |
|
|
$qry_1 = ""; |
10 |
|
|
$qry_2 = ""; |
11 |
|
|
$form = ""; |
12 |
|
|
global $stype; |
13 |
|
|
if ($stype) { |
14 |
|
|
$search = array(); |
15 |
|
|
$i = 1; |
16 |
|
|
while (true) { |
17 |
|
|
global ${"search_".$i}; |
18 |
|
|
if (!${"search_".$i}) break; |
19 |
|
|
global ${"delete_".$i}, ${"and_".$i}, ${"or_".$i}, |
20 |
|
|
${"field_".$i}, ${"not_".$i}, |
21 |
|
|
${"query_".$i}, ${"logic_".$i}, |
22 |
|
|
${"concat_".$i}, ${"case_".$i}; |
23 |
|
|
if (${"delete_".$i}) { $i++; continue; } |
24 |
|
|
if (${"and_".$i}) ${"logic_".$i} = "AND"; |
25 |
|
|
if (${"or_".$i}) ${"logic_".$i} = "OR"; |
26 |
|
|
array_push($search, array( |
27 |
|
|
"field" => ${"field_".$i}, |
28 |
|
|
"not" => ${"not_".$i}, |
29 |
|
|
"query" => MyEscape(${"query_".$i}), |
30 |
|
|
"logic" => ${"logic_".$i}, |
31 |
|
|
"concat" => ${"concat_".$i}, |
32 |
|
|
"case" => ${"case_".$i} |
33 |
|
|
)); |
34 |
|
|
$i++; |
35 |
|
|
} |
36 |
|
|
global ${"and_".($i - 1)}, ${"or_".($i - 1)}; |
37 |
|
|
if (count($search) == 0 || ${"and_".($i - 1)} || ${"or_".($i - 1)}) { |
38 |
|
|
$log = ""; |
39 |
|
|
if (${"and_".($i - 1)}) $log = "AND"; |
40 |
|
|
if (${"or_".($i - 1)}) $log = "OR"; |
41 |
|
|
if (count($search) > 0) $search[count($search) - 1]["logic"] = $log; |
42 |
|
|
array_push($search, array( |
43 |
|
|
"field" => "", |
44 |
|
|
"not" => "", |
45 |
|
|
"query" => "", |
46 |
|
|
"logic" => "", |
47 |
|
|
"concat" => "OR", |
48 |
|
|
"case" => "" |
49 |
|
|
)); |
50 |
|
|
} |
51 |
|
|
$search[count($search) - 1]["logic"] = ""; |
52 |
|
|
$tp->assign("search", $search); |
53 |
|
|
} else { |
54 |
|
|
global $field, $query; |
55 |
|
|
$tp->assign("field", $field); |
56 |
|
|
$tp->assign("query", MyEscape($query)); |
57 |
|
|
} |
58 |
|
|
if (!$stype) $stype = 0; |
59 |
|
|
$tp->assign("stype", $stype); |
60 |
|
|
global $go; |
61 |
|
|
if ($go) { |
62 |
|
|
if ($stype) { |
63 |
|
|
$qry = ""; |
64 |
|
|
$logic = ""; |
65 |
|
|
$i = 1; |
66 |
|
|
while (${"search_".$i}) { |
67 |
|
|
$field = ${"field_".$i}; |
68 |
|
|
$not = ${"not_".$i} ? "NOT" : ""; |
69 |
|
|
$qry1 = preg_split('/\s+/', ${"query_".$i}); |
70 |
|
|
$qry2 = array(); |
71 |
|
|
$qry3 = array(); |
72 |
|
|
while (list($k, $v) = each($qry1)) { |
73 |
|
|
if (!$qry1[$k]) continue; |
74 |
|
|
if (${"case_".$i}) |
75 |
|
|
$qq = "(".$fields[$field]["dbname"]." $not LIKE '%".$qry1[$k]."%')"; |
76 |
|
|
else |
77 |
|
|
$qq = "(UPPER(".$fields[$field]["dbname"].") $not LIKE UPPER('%".$qry1[$k]."%'))"; |
78 |
|
|
$is_q1 = false; |
79 |
|
|
for ($i = 0; $i < count($q1_fields); $i++) |
80 |
|
|
if ($q1_fields[$i] == $field) $is_q1 = true; |
81 |
|
|
$is_q2 = false; |
82 |
|
|
for ($i = 0; $i < count($q2_fields); $i++) |
83 |
|
|
if ($q2_fields[$i] == $field) $is_q2 = true; |
84 |
|
|
if ($is_q1) $qry2[$k] = $qq; |
85 |
|
|
if ($is_q2) $qry3[$k] = $qq; |
86 |
|
|
} |
87 |
|
|
$qry1 = implode(" ".${"concat_".$i}." ", $qry2); |
88 |
|
|
if ($qry1) { |
89 |
|
|
if ($logic) $qry .= " $logic "; |
90 |
|
|
$qry_1 .= "($qry1)"; |
91 |
|
|
$logic = ${"logic_".$i}; |
92 |
|
|
} |
93 |
|
|
$qry1 = implode(" ".${"concat_".$i}." ", $qry3); |
94 |
|
|
if ($qry1) { |
95 |
|
|
if ($logic) $qry_2 .= " $logic "; |
96 |
|
|
$qry_2 .= "($qry1)"; |
97 |
|
|
$logic = ${"logic_".$i}; |
98 |
|
|
} |
99 |
|
|
$i++; |
100 |
|
|
} |
101 |
|
|
} else { |
102 |
|
|
$q = preg_split('/\s+/', $query); |
103 |
|
|
$q2 = array(); |
104 |
|
|
$q3 = array(); |
105 |
|
|
while (list($k, $v) = each($q)) { |
106 |
|
|
if (!$q[$k]) continue; |
107 |
|
|
$qq = "(UPPER(".$fields[$field]["dbname"].") LIKE UPPER('%".$q[$k]."%'))"; |
108 |
|
|
$is_q1 = false; |
109 |
|
|
for ($i = 0; $i < count($q1_fields); $i++) |
110 |
|
|
if ($q1_fields[$i] == $field) $is_q1 = true; |
111 |
|
|
$is_q2 = false; |
112 |
|
|
for ($i = 0; $i < count($q2_fields); $i++) |
113 |
|
|
if ($q2_fields[$i] == $field) $is_q2 = true; |
114 |
|
|
if ($is_q1) $q2[$k] = $qq; |
115 |
|
|
if ($is_q2) $q3[$k] = $qq; |
116 |
|
|
} |
117 |
|
|
$qry_1 = implode(" ".$basic_logic." ", $q2); |
118 |
|
|
$qry_2 = implode(" ".$basic_logic." ", $q3); |
119 |
|
|
} |
120 |
|
|
} |
121 |
|
|
uasort($fields, "myCmp"); |
122 |
|
|
$flds = array(); |
123 |
|
|
while (list($k, $v) = each($fields)) { |
124 |
|
|
array_push($flds, array( |
125 |
|
|
"name" => MyEscape($k), |
126 |
|
|
"caption" => MyEscape($v["caption"]) |
127 |
|
|
)); |
128 |
|
|
} |
129 |
|
|
$tp->assign("fields", $flds); |
130 |
ravilov |
1.2 |
global $PHP_SELF, $section, $section_menu; |
131 |
ravilov |
1.1 |
$tp->assign("section", $section); |
132 |
ravilov |
1.2 |
$tp->assign("section_menu", $section_menu); |
133 |
ravilov |
1.1 |
$tp->assign("FORM_ACTION", $PHP_SELF.HTMLSpecialChars("?section=$section&stype=$stype")); |
134 |
|
|
$form = $tp->fetch("search.tpl"); |
135 |
|
|
return array($form, $qry_1, $qry_2); |
136 |
|
|
} |
137 |
|
|
?> |