error_permission(); } define('MODE', intval($bugsys->in['mode'])); define('MODE_ANY', ((MODE == 1) ? 1 : 0)); define('MODE_ALL', ((MODE == 2) ? 1 : 0)); define('MODE_RAW', ((MODE == 3) ? 1 : 0)); define('SEARCH_WORD_MIN', 3); // ################################################################### if (empty($_REQUEST['do'])) { $_REQUEST['do'] = 'search'; } // ################################################################### if ($_REQUEST['do'] == 'results') { // ------------------------------------------------------------------- // parse out our product/component/version $pcv = parse_pcv_select($bugsys->in['pcv_select']); // ------------------------------------------------------------------- // handle keywords if ($bugsys->in['summary']) { $keywords = preg_split('#\s+#', $bugsys->in['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 ($bugsys->in['reporter']) { // force email or name?? make a distinction? // more elegant way to do this? probably $user = $db->query_first("SELECT * FROM user WHERE email = '" . $bugsys->in['reporter'] . "' OR MATCH (displayname) AGAINST ('" . $bugsys->in['reporter'] . "')"); if ($user['userid']) { $querybuild['reporter'] = "AND bug.userid = $user[userid] OR comment.userid = $user[userid]"; } } // ------------------------------------------------------------------- // product/component/version stuff if (is_array($bugsys->in['pcv'])) { $querybuild['pcv'] = "AND bug.productid = $pcv[product] AND bug.componentid = $pcv[component] AND bug.versionid = $pcv[version]"; } // ------------------------------------------------------------------- // severity, priority, status, resolution, assignedto // severity if ($bugsys->in['severity']) { $querybuild['severity'] = "AND bug.severity = " . intval($bugsys->in['severity']); } // priority if ($bugsys->in['priority']) { $querybuild['priority'] = "AND bug.priority = " . intval($bugsys->in['priority']); } // status if ($bugsys->in['status']) { $querybuild['status'] = "AND bug.status = " . intval($bugsys->in['status']); } // resolution if ($bugsys->in['resolution']) { $querybuild['resolution'] = "AND bug.resolution = " . intval($bugsys->in['resolution']); } // assignment if ($bugsys->in['assignedto']) { $querybuild['assignedto'] = "AND bug.assignedto = " . intval($bugsys->in['assignedto']); } // ------------------------------------------------------------------- // date if ($bugsys->in['date']) { // now - (seconds/day * number of days) $dateline = time() - (intval($bugsys->in['date']) * 3600); $querybuild['date'] = "AND bug.dateline >= $dateline"; } // ------------------------------------------------------------------- // sort by $sortby = array('bugid', 'severity', 'priority', 'status', 'resolution', 'dateline'); $orderby = array('ASC', 'DESC'); $bugsys->in['orderby'] = strtoupper($bugsys->in['orderby']); if (in_array($bugsys->in['sortby'], $sortby) AND in_array($bugsys->in['orderby'], $orderby)) { $sortclause = "ORDER BY " . $bugsys->in['sortby'] . ' ' . $bugsys->in['orderby']; } else if ($bugsys->in['sortby'] == 'relevance') { $sortclause = ''; } else { $message->error('bad sort'); } // ------------------------------------------------------------------- // do the search $search = $db->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->num_rows($search); if ($numrows < 1) { $message->error('no results found'); } while ($bug = $db->fetch_array($search)) { $bug['bgcolour'] = $bugsys->datastore['status']["$bug[status]"]['color']; $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 .= "' . $template->fetch('trackerhome_bits') . '";'); } eval('$template->flush("' . $template->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] .= "' . $template->fetch('selectoption') . '";'); } $select['priority'] = $blankselect; foreach ($bugsys->datastore['priority'] AS $priority) { $value = $priority['priorityid']; $label = $priority['priority']; eval('$select[priority] .= "' . $template->fetch('selectoption') . '";'); } $select['status'] = $blankselect; foreach ($bugsys->datastore['status'] AS $status) { $value = $status['statusid']; $label = $status['status']; eval('$select[status] .= "' . $template->fetch('selectoption') . '";'); } $select['resolution'] = $blankselect; foreach ($bugsys->datastore['resolution'] AS $resolution) { $value = $resolution['resolutionid']; $label = $resolution['resolution']; eval('$select[resolution] .= "' . $template->fetch('selectoption') . '";'); } $select['dev'] = $blankselect; foreach ($bugsys->datastore['assignto'] AS $dev) { $value = $dev['userid']; $label = construct_user_display($dev, false); eval('$select[dev] .= "' . $template->fetch('selectoption') . '";'); } eval('$template->flush("' . $template->fetch('search') . '");'); } /*=====================================================================*\ || ################################################################### || # $HeadURL$ || # $Id$ || ################################################################### \*=====================================================================*/ ?>