]>
src.bluestatic.org Git - bugdar.git/blob - search.php
2 /*=====================================================================*\
3 || ################################################################### ||
4 || # BugStrike [#]version[#]
5 || # --------------------------------------------------------------- # ||
6 || # Copyright ©2002-[#]year[#] by Iris Studios, Inc. All Rights Reserved. # ||
7 || # This file may not be reproduced in any way without permission. # ||
8 || # --------------------------------------------------------------- # ||
9 || # User License Agreement at http://www.iris-studios.com/license/ # ||
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' , (( MODE
== 1 ) ? 1 : 0 ));
29 define ( 'MODE_ALL' , (( MODE
== 2 ) ? 1 : 0 ));
30 define ( 'MODE_RAW' , (( 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\t MATCH
( bug
. summary
) AGAINST ( ' $temp' $bool_flag ) \n\t\t\t\t OR 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- >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- > 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- >num_rows( $search );
210 echo 'no results found';
214 while ( $bug = $db- >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'] = " & amp
; hilight
= $hilight" ;
222 eval ( ' $bugs .= "' . $template- > fetch ( 'trackerhome_bits' ) . '";' );
225 eval ( ' $template- >flush("' . $template- > 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] .= "' . $template- > 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] .= "' . $template- > 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] .= "' . $template- > 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] .= "' . $template- > 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] .= "' . $template- > fetch ( 'selectoption' ) . '";' );
278 eval ( ' $template- >flush("' . $template- > fetch ( 'search' ) . '");' );
281 /*=====================================================================*\
282 || ###################################################################
285 || ###################################################################
286 \*=====================================================================*/