r50: WHERE claus built. *BLIND COMMIT*
[bugdar.git] / search.php
1 <?php
2 /*=====================================================================*\
3 || ################################################################### ||
4 || # Renapsus [#]version[#]
5 || # --------------------------------------------------------------- # ||
6 || # All parts of this file are ©2003-[#]year[#] Iris Studios, Inc. No # ||
7 || # part of this file may be reproduced in any way: part or whole. # ||
8 || # --------------------------------------------------------------- # ||
9 || # ©2003 - [#]year[#] Iris Studios, Inc. | http://www.iris-studios.com # ||
10 || ################################################################### ||
11 \*=====================================================================*/
12
13 $fetchtemplates = array(
14 'search',
15 'search_results',
16 'search_results_bit'
17 );
18
19 require_once('./global.php');
20
21 if (!can_perform('cansearch'))
22 {
23 echo 'no permission';
24 exit;
25 }
26
27 define('MODE', intval($_POST['mode']));
28 define('MODE_ANY', iff(MODE == 1, 1, 0));
29 define('MODE_ALL', iff(MODE == 2, 1, 0));
30 define('MODE_RAW', iff(MODE == 3, 1, 0));
31
32 define('SEARCH_WORD_MIN', 3);
33
34 // ###################################################################
35
36 if (empty($_REQUEST['do']))
37 {
38 $_REQUEST['do'] = 'search';
39 }
40
41 // ###################################################################
42
43 if ($_REQUEST['do'] == 'results')
44 {
45 sanitize(array(
46 'summary' => STR, // done
47 'reporter' => STR, // done
48 'pcv_select' => STR, // done
49 'severity' => INT, // done
50 'priority' => INT, // done
51 'status' => INT, // done
52 'resolution' => INT, // done
53 'assignedto' => INT, // done
54 'date' => INT) // done
55 );
56
57 // -------------------------------------------------------------------
58 // parse out our product/component/version
59 $vars['pcv'] = parse_pcv_select($vars['pcv_select']);
60
61 // -------------------------------------------------------------------
62 // handle keywords
63 if ($vars['summary'])
64 {
65 $keywords = preg_split('#\s+#', $vars['summary']);
66
67 foreach ($keywords AS $word)
68 {
69 if (strlen($word) < SEARCH_WORD_MIN)
70 {
71 continue;
72 }
73
74 if (MODE_ALL)
75 {
76 $querybuild['where']['text'] .= " +$word";
77 }
78 else
79 {
80 $querybuild['where']['text'] .= " $word";
81 }
82 }
83
84 $temp = trim($querybuild['where']['text']);
85
86 if (MODE_ALL OR MODE_RAW)
87 {
88 // do some operations for those who use str boolean operators
89 $querybuild['where']['text'] = "AND MATCH (bug.summary, comment.comment) AGAINST ('$temp' IN BOOLEAN MODE)";
90 }
91 else
92 {
93 $querybuild['where']['text'] = "AND MATCH (bug.summary, comment.comment) AGAINST ('$temp')";
94 }
95 }
96
97 // -------------------------------------------------------------------
98 // reporter
99 if ($vars['reporter'])
100 {
101 // force email or name?? make a distinction?
102 // more elegant way to do this? probably
103 $user = $DB_sql->query_first("SELECT * FROM user WHERE email = '$vars[reporter]' OR MATCH (displayname) AGAINST ('$vars[reporter]')");
104 if ($user['userid'])
105 {
106 $querybuild['where']['reporter'] = "AND bug.userid = $user[userid] OR comment.userid = $user[userid]";
107 }
108 }
109
110 // -------------------------------------------------------------------
111 // product/component/version stuff
112 if (is_array($vars['pcv']))
113 {
114 $querybuild['where']['pcv'] = "AND bug.productid = {$vars['pcv']['product']} AND bug.componentid = {$vars['pcv']['component']} AND bug.versionid = {$vars['pcv']['version']}";
115 }
116
117 // -------------------------------------------------------------------
118 // severity, priority, status, resolution, assignedto
119
120 // severity
121 if ($vars['severity'])
122 {
123 $querybuild['where']['severity'] = "AND bug.severity = $vars[severity]";
124 }
125
126 // priority
127 if ($vars['priority'])
128 {
129 $querybuild['where']['priority'] = "AND bug.priority = $vars[priority]";
130 }
131
132 // status
133 if ($vars['status'])
134 {
135 $querybuild['where']['status'] = "AND bug.status = $vars[status]";
136 }
137
138 // resolution
139 if ($vars['resolution'])
140 {
141 $querybuild['where']['resolution'] = "AND bug.resolution = $vars[resolution]";
142 }
143
144 // assignment
145 if ($vars['assignedto'])
146 {
147 $querybuild['where']['assignedto'] = "AND bug.assignedto = $vars[assignedto]";
148 }
149
150 // -------------------------------------------------------------------
151 // date
152 if ($vars['date'])
153 {
154 // now - (seconds/day * number of days)
155 $dateline = time() - ($vars['date'] * 3600);
156 $querybuild['where']['date'] = "AND bug.dateline >= $dateline";
157 }
158
159 print_r($querybuild);
160 }
161
162 // ###################################################################
163
164 if ($_REQUEST['do'] == 'search')
165 {
166 $pcv_select = construct_pcv_select('radio', '--');
167
168 $blankselect = '<option value="0">- Choose -</option>';
169
170 $select['severity'] = $blankselect;
171 foreach ($bugsys->datastore['severity'] AS $severity)
172 {
173 $value = $severity['severityid'];
174 $label = $severity['severity'];
175 eval('$select[severity] .= "' . $tpl->fetch('selectoption') . '";');
176 }
177
178 $select['priority'] = $blankselect;
179 foreach ($bugsys->datastore['priority'] AS $priority)
180 {
181 $value = $priority['priorityid'];
182 $label = $priority['priority'];
183 eval('$select[priority] .= "' . $tpl->fetch('selectoption') . '";');
184 }
185
186 $select['status'] = $blankselect;
187 foreach ($bugsys->datastore['status'] AS $status)
188 {
189 $value = $status['statusid'];
190 $label = $status['status'];
191 eval('$select[status] .= "' . $tpl->fetch('selectoption') . '";');
192 }
193
194 $select['resolution'] = $blankselect;
195 foreach ($bugsys->datastore['resolution'] AS $resolution)
196 {
197 $value = $resolution['resolutionid'];
198 $label = $resolution['resolution'];
199 eval('$select[resolution] .= "' . $tpl->fetch('selectoption') . '";');
200 }
201
202 $select['dev'] = $blankselect;
203 foreach ($bugsys->datastore['assignto'] AS $dev)
204 {
205 $value = $dev['userid'];
206 $label = construct_user_display($dev, false);
207 eval('$select[dev] .= "' . $tpl->fetch('selectoption') . '";');
208 }
209
210 eval('$tpl->flush("' . $tpl->fetch('search') . '");');
211 }
212
213 /*=====================================================================*\
214 || ###################################################################
215 || # $HeadURL$
216 || # $Id$
217 || ###################################################################
218 \*=====================================================================*/
219 ?>