STR, // done 'reporter' => STR, // done 'pcv_select' => STR, // done 'severity' => INT, // done 'priority' => INT, // done 'status' => INT, // done 'resolution' => INT, // done 'assignedto' => INT, // done 'date' => INT, // done 'sortby' => STR, 'orderby' => STR) ); // ------------------------------------------------------------------- // parse out our product/component/version $vars['pcv'] = parse_pcv_select($vars['pcv_select']); // ------------------------------------------------------------------- // handle keywords if ($vars['summary']) { $keywords = preg_split('#\s+#', $vars['summary']); // #*# need to have some str to bool conversions foreach ($keywords AS $word) { if (strlen($word) < SEARCH_WORD_MIN) { continue; } if (MODE_ALL) { $querybuild['text'] .= " +$word"; } else { $querybuild['text'] .= " $word"; } if (!preg_match('#-(.+?)#', trim($word))) { $hilight .= " $word"; } } $hilight = preg_replace('#[^0-9a-zA-Z_ ]#', '', $hilight); $hilight = trim($hilight); $hilight = preg_replace('#\s#', '+', $hilight); $temp = trim($querybuild['text']); if (MODE_ALL OR MODE_RAW) { $bool_flag = ' IN BOOLEAN MODE'; } $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)"; } // ------------------------------------------------------------------- // reporter if ($vars['reporter']) { // force email or name?? make a distinction? // more elegant way to do this? probably $user = $DB_sql->query_first("SELECT * FROM user WHERE email = '$vars[reporter]' OR MATCH (displayname) AGAINST ('$vars[reporter]')"); if ($user['userid']) { $querybuild['reporter'] = "AND bug.userid = $user[userid] OR comment.userid = $user[userid]"; } } // ------------------------------------------------------------------- // product/component/version stuff if (is_array($vars['pcv'])) { $querybuild['pcv'] = "AND bug.productid = {$vars['pcv']['product']} AND bug.componentid = {$vars['pcv']['component']} AND bug.versionid = {$vars['pcv']['version']}"; } // ------------------------------------------------------------------- // severity, priority, status, resolution, assignedto // severity if ($vars['severity']) { $querybuild['severity'] = "AND bug.severity = $vars[severity]"; } // priority if ($vars['priority']) { $querybuild['priority'] = "AND bug.priority = $vars[priority]"; } // status if ($vars['status']) { $querybuild['status'] = "AND bug.status = $vars[status]"; } // resolution if ($vars['resolution']) { $querybuild['resolution'] = "AND bug.resolution = $vars[resolution]"; } // assignment if ($vars['assignedto']) { $querybuild['assignedto'] = "AND bug.assignedto = $vars[assignedto]"; } // ------------------------------------------------------------------- // date if ($vars['date']) { // now - (seconds/day * number of days) $dateline = time() - ($vars['date'] * 3600); $querybuild['date'] = "AND bug.dateline >= $dateline"; } // ------------------------------------------------------------------- // sort by $sortby = array('bugid', 'severity', 'priority', 'status', 'resolution', 'dateline'); $orderby = array('ASC', 'DESC'); $vars['orderby'] = strtoupper($vars['orderby']); if (in_array($vars['sortby'], $sortby) AND in_array($vars['orderby'], $orderby)) { $sortclause = "ORDER BY $vars[sortby] $vars[orderby]"; } else if ($vars['sortby'] == 'relevance') { $sortclause = ''; } else { echo 'bad sort'; exit; } // ------------------------------------------------------------------- // do the search $search = $DB_sql->query(" SELECT bug.*, comment.commentid, user1.displayname AS firstreport, user2.displayname AS lastpost FROM " . TABLE_PREFIX . "bug AS bug LEFT JOIN " . TABLE_PREFIX . "comment AS comment ON (bug.bugid = comment.bugid) LEFT JOIN user AS user1 ON (bug.userid = user1.userid) LEFT JOIN user AS user2 ON (bug.lastpostby = user2.userid) WHERE bug.bugid <> 0 " . implode("\n\t\t\t", $querybuild) . " $sortclause" ); $numrows = $DB_sql->num_rows($search); if ($numrows < 1) { echo 'no results found'; exit; } while ($bug = $DB_sql->fetch_array($search)) { $bug['product'] = $bugsys->datastore['product']["$bug[productid]"]['title']; $bug['version'] = $bugsys->datastore['version']["$bug[versionid]"]['version']; $bug['status'] = $bugsys->datastore['status']["$bug[status]"]['status']; $bug['resolution'] = $bugsys->datastore['resolution']["$bug[resolution]"]['resolution']; $bug['lastpostinfo'] = datelike('standard', $bug['lastposttime']) . ' by ' . $bug['lastpost']; $bug['urladd'] = "&hilight=$hilight"; eval('$bugs .= "' . $tpl->fetch('trackerhome_bits') . '";'); } eval('$tpl->flush("' . $tpl->fetch('search_results') . '");'); // print_r($querybuild); } // ################################################################### if ($_REQUEST['do'] == 'search') { $pcv_select = construct_pcv_select('radio', '--'); $blankselect = ''; $select['severity'] = $blankselect; foreach ($bugsys->datastore['severity'] AS $severity) { $value = $severity['severityid']; $label = $severity['severity']; eval('$select[severity] .= "' . $tpl->fetch('selectoption') . '";'); } $select['priority'] = $blankselect; foreach ($bugsys->datastore['priority'] AS $priority) { $value = $priority['priorityid']; $label = $priority['priority']; eval('$select[priority] .= "' . $tpl->fetch('selectoption') . '";'); } $select['status'] = $blankselect; foreach ($bugsys->datastore['status'] AS $status) { $value = $status['statusid']; $label = $status['status']; eval('$select[status] .= "' . $tpl->fetch('selectoption') . '";'); } $select['resolution'] = $blankselect; foreach ($bugsys->datastore['resolution'] AS $resolution) { $value = $resolution['resolutionid']; $label = $resolution['resolution']; eval('$select[resolution] .= "' . $tpl->fetch('selectoption') . '";'); } $select['dev'] = $blankselect; foreach ($bugsys->datastore['assignto'] AS $dev) { $value = $dev['userid']; $label = construct_user_display($dev, false); eval('$select[dev] .= "' . $tpl->fetch('selectoption') . '";'); } eval('$tpl->flush("' . $tpl->fetch('search') . '");'); } /*=====================================================================*\ || ################################################################### || # $HeadURL$ || # $Id$ || ################################################################### \*=====================================================================*/ ?>