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 \*=====================================================================*/
13 $fetchtemplates = array(
19 require_once('./global.php');
21 if (!can_perform('cansearch'))
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));
32 define('SEARCH_WORD_MIN', 3);
34 // ###################################################################
36 if (empty($_REQUEST['do']))
38 $_REQUEST['do'] = 'search';
41 // ###################################################################
43 if ($_REQUEST['do'] == 'results')
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
59 // -------------------------------------------------------------------
60 // parse out our product/component/version
61 $vars['pcv'] = parse_pcv_select($vars['pcv_select']);
63 // -------------------------------------------------------------------
67 $keywords = preg_split('#\s+#', $vars['summary']);
69 // #*# need to have some str to bool conversions
71 foreach ($keywords AS $word)
73 if (strlen($word) < SEARCH_WORD_MIN
)
80 $querybuild['text'] .= " +$word";
84 $querybuild['text'] .= " $word";
87 if (!preg_match('#-(.+?)#', trim($word)))
93 $hilight = preg_replace('#[^0-9a-zA-Z_ ]#', '', $hilight);
94 $hilight = trim($hilight);
95 $hilight = preg_replace('#\s#', '+', $hilight);
97 $temp = trim($querybuild['text']);
99 if (MODE_ALL
OR MODE_RAW
)
101 $bool_flag = ' IN BOOLEAN MODE';
104 $querybuild['text'] = "AND\n\t\t\t(\n\t\t\t\tMATCH (bug.summary) AGAINST ('$temp'$bool_flag)\n\t\t\t\tOR MATCH (comment.comment) AGAINST ('$temp'$bool_flag)\n\t\t\t)";
107 // -------------------------------------------------------------------
109 if ($vars['reporter'])
111 // force email or name?? make a distinction?
112 // more elegant way to do this? probably
113 $user = $DB_sql->query_first("SELECT * FROM user WHERE email = '$vars[reporter]' OR MATCH (displayname) AGAINST ('$vars[reporter]')");
116 $querybuild['reporter'] = "AND bug.userid = $user[userid] OR comment.userid = $user[userid]";
120 // -------------------------------------------------------------------
121 // product/component/version stuff
122 if (is_array($vars['pcv']))
124 $querybuild['pcv'] = "AND bug.productid = {$vars['pcv']['product']} AND bug.componentid = {$vars['pcv']['component']} AND bug.versionid = {$vars['pcv']['version']}";
127 // -------------------------------------------------------------------
128 // severity, priority, status, resolution, assignedto
131 if ($vars['severity'])
133 $querybuild['severity'] = "AND bug.severity = $vars[severity]";
137 if ($vars['priority'])
139 $querybuild['priority'] = "AND bug.priority = $vars[priority]";
145 $querybuild['status'] = "AND bug.status = $vars[status]";
149 if ($vars['resolution'])
151 $querybuild['resolution'] = "AND bug.resolution = $vars[resolution]";
155 if ($vars['assignedto'])
157 $querybuild['assignedto'] = "AND bug.assignedto = $vars[assignedto]";
160 // -------------------------------------------------------------------
164 // now - (seconds/day * number of days)
165 $dateline = time() - ($vars['date'] * 3600);
166 $querybuild['date'] = "AND bug.dateline >= $dateline";
169 // -------------------------------------------------------------------
171 $sortby = array('bugid', 'severity', 'priority', 'status', 'resolution', 'dateline');
172 $orderby = array('ASC', 'DESC');
173 $vars['orderby'] = strtoupper($vars['orderby']);
174 if (in_array($vars['sortby'], $sortby) AND in_array($vars['orderby'], $orderby))
176 $sortclause = "ORDER BY $vars[sortby] $vars[orderby]";
178 else if ($vars['sortby'] == 'relevance')
188 // -------------------------------------------------------------------
190 $search = $DB_sql->query("
191 SELECT bug.*, comment.commentid,
192 user1.displayname AS firstreport,
193 user2.displayname AS lastpost
194 FROM " . TABLE_PREFIX
. "bug AS bug
195 LEFT JOIN " . TABLE_PREFIX
. "comment AS comment
196 ON (bug.bugid = comment.bugid)
197 LEFT JOIN user AS user1
198 ON (bug.userid = user1.userid)
199 LEFT JOIN user AS user2
200 ON (bug.lastpostby = user2.userid)
202 " . implode("\n\t\t\t", $querybuild) . "
206 $numrows = $DB_sql->num_rows($search);
210 echo 'no results found';
214 while ($bug = $DB_sql->fetch_array($search))
216 $bug['product'] = $bugsys->datastore
['product']["$bug[productid]"]['title'];
217 $bug['version'] = $bugsys->datastore
['version']["$bug[versionid]"]['version'];
218 $bug['status'] = $bugsys->datastore
['status']["$bug[status]"]['status'];
219 $bug['resolution'] = $bugsys->datastore
['resolution']["$bug[resolution]"]['resolution'];
220 $bug['lastpostinfo'] = datelike('standard', $bug['lastposttime']) . ' by ' . $bug['lastpost'];
221 $bug['urladd'] = "&hilight=$hilight";
222 eval('$bugs .= "' . $tpl->fetch('trackerhome_bits') . '";');
225 eval('$tpl->flush("' . $tpl->fetch('search_results') . '");');
227 // print_r($querybuild);
230 // ###################################################################
232 if ($_REQUEST['do'] == 'search')
234 $pcv_select = construct_pcv_select('radio', '--');
236 $blankselect = '<option value="0">- Choose -</option>';
238 $select['severity'] = $blankselect;
239 foreach ($bugsys->datastore
['severity'] AS $severity)
241 $value = $severity['severityid'];
242 $label = $severity['severity'];
243 eval('$select[severity] .= "' . $tpl->fetch('selectoption') . '";');
246 $select['priority'] = $blankselect;
247 foreach ($bugsys->datastore
['priority'] AS $priority)
249 $value = $priority['priorityid'];
250 $label = $priority['priority'];
251 eval('$select[priority] .= "' . $tpl->fetch('selectoption') . '";');
254 $select['status'] = $blankselect;
255 foreach ($bugsys->datastore
['status'] AS $status)
257 $value = $status['statusid'];
258 $label = $status['status'];
259 eval('$select[status] .= "' . $tpl->fetch('selectoption') . '";');
262 $select['resolution'] = $blankselect;
263 foreach ($bugsys->datastore
['resolution'] AS $resolution)
265 $value = $resolution['resolutionid'];
266 $label = $resolution['resolution'];
267 eval('$select[resolution] .= "' . $tpl->fetch('selectoption') . '";');
270 $select['dev'] = $blankselect;
271 foreach ($bugsys->datastore
['assignto'] AS $dev)
273 $value = $dev['userid'];
274 $label = construct_user_display($dev, false
);
275 eval('$select[dev] .= "' . $tpl->fetch('selectoption') . '";');
278 eval('$tpl->flush("' . $tpl->fetch('search') . '");');
281 /*=====================================================================*\
282 || ###################################################################
285 || ###################################################################
286 \*=====================================================================*/