]>
src.bluestatic.org Git - bugdar.git/blob - search.php
2 /*=====================================================================*\
3 || ###################################################################
4 || # Bugdar [#]version[#]
5 || # Copyright 2002-[#]year[#] Blue Static
7 || # This program is free software; you can redistribute it and/or modify
8 || # it under the terms of the GNU General Public License as published by
9 || # the Free Software Foundation; version [#]gpl[#] of the License.
11 || # This program is distributed in the hope that it will be useful, but
12 || # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 || # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 || # You should have received a copy of the GNU General Public License along
17 || # with this program; if not, write to the Free Software Foundation, Inc.,
18 || # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 || ###################################################################
20 \*=====================================================================*/
22 $fetchtemplates = array (
33 define ( 'SVN' , ' $Id $' );
35 $focus [' search
'] = ' focus
';
37 require_once(' ./ global . php
');
38 require_once(' ./ includes
/ functions_product
. php
');
39 require_once(' ./ includes
/ class_sort
. php
');
40 require_once(' ./ includes
/ api_bug
. php
');
41 require_once(' ./ includes
/ class_api_error
. php
');
43 APIError(array( $message , ' error
'));
45 if (!can_perform(' cansearch
'))
47 $message- >error_permission();
50 define(' MODE_ANY
', ( $bugsys- >in[' mode
'] == 1));
51 define(' MODE_ALL
', ( $bugsys- >in[' mode
'] == 2));
52 define(' MODE_RAW
', ( $bugsys- >in[' mode
'] == 3));
54 $var = $db- >query_first("SHOW VARIABLES LIKE ' ft_min_word_len
'");
55 define(' SEARCH_WORD_MIN
', $var [' Value
']);
57 $db- >query("DELETE FROM " . TABLE_PREFIX . "search WHERE userid = 0 AND dateline < " . (TIMENOW - 3600));
59 $show [' search
'] = true;
61 // ###################################################################
63 if (empty( $_REQUEST [' do ']))
65 $_REQUEST [' do '] = ' search
';
68 // ###################################################################
70 if ( $_REQUEST [' do '] == ' process
')
72 // -------------------------------------------------------------------
74 if ( $bugsys- >in[' summary
'])
76 $keywords = preg_split(' #\s+#', $bugsys->in['summary']);
78 // TODO - need to have some str to bool conversions
80 foreach ( $keywords AS $word )
82 if ( strlen ( $word ) < SEARCH_WORD_MIN
)
89 $querybuild [ 'text' ] .= " + $word" ;
93 $querybuild ['text'] .= " $word" ;
96 if (! preg_match ( '#-(.+?)#' , trim ( $word )))
102 $hilight = preg_replace('#[^0-9a-zA-Z_ ]#', '', $hilight );
103 $hilight = trim( $hilight );
104 $hilight = preg_replace('#\s#', '+', $hilight );
106 $temp = trim( $querybuild ['text']);
108 if (MODE_ALL OR MODE_RAW)
110 $bool_flag = ' IN BOOLEAN MODE';
113 $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) ";
116 // -------------------------------------------------------------------
118 if ( $bugsys- >in['reporter'])
120 // force email or name?? make a distinction?
121 // more elegant way to do this? probably
122 $user = $db- >query_first(" SELECT
* FROM
" . TABLE_PREFIX . " user WHERE email LIKE
'%" . str_replace(' %
', ' \%
', $bugsys- >input_escape(' reporter
')) . "' OR displayname LIKE
'%" . str_replace(' %
', ' \%
', $bugsys- >input_escape(' reporter
')) . "%' ");
125 $querybuild ['reporter'] = " AND bug
. userid
= $user [ userid
] OR comment
. userid
= $user [ userid
] ";
129 // -------------------------------------------------------------------
130 // product/component/version stuff
131 if (is_array( $bugsys- >in['product']))
133 foreach ( $bugsys- >in['product'] AS $prod )
135 $product = explode(',', $prod );
136 $product = $bugsys- >clean( $product , TYPE_UINT);
137 $products [] = $product [0];
138 $components [] = $product [1];
139 $versions [] = $product [2];
141 $querybuild ['pcv'] = " AND bug
. product
IN ( " . implode(',', $products ) . " ) AND bug
. component
IN ( " . implode(',', $components ) . " ) AND bug
. version
IN ( " . implode(',', $versions ) . " ) ";
144 // -------------------------------------------------------------------
145 // severity, priority, status, resolution, assignedto
148 if ( $bugsys- >in['severity'])
150 $bugsys- >input_clean('severity', TYPE_UINT);
151 $querybuild ['severity'] = " AND bug
. severity
IN ( " . implode(',', $bugsys- >in['severity']) . " ) ";
155 if ( $bugsys- >in['priority'])
157 $bugsys- >input_clean('priority', TYPE_UINT);
158 $querybuild ['priority'] = " AND bug
. priority
IN ( " . implode(',', $bugsys- >in['priority']) . " ) ";
162 if ( $bugsys- >in['status'])
164 $bugsys- >input_clean('status', TYPE_UINT);
165 $querybuild ['status'] = " AND bug
. status
IN ( " . implode(',', $bugsys- >in['status']) . " ) ";
169 if ( $bugsys- >in['resolution'])
171 $bugsys- >input_clean('resolution', TYPE_UINT);
172 $querybuild ['resolution'] = " AND bug
. resolution
IN ( " . implode(',', $bugsys- >in['resolution']) . " ) ";
176 if ( $bugsys- >in['assignedto'])
178 $bugsys- >input_clean('assignedto', TYPE_UINT);
179 $querybuild ['assignedto'] = " AND bug
. assignedto
IN ( " . implode(',', $bugsys- >in['assignedto']) . " ) ";
182 // -------------------------------------------------------------------
184 if ( $bugsys- >in['date'])
186 // now - (seconds/day * number of days)
187 $dateline = time() - ( $bugsys- >input_clean('date', TYPE_INT) * 3600);
188 $querybuild ['date'] = " AND bug
. dateline
>= $dateline" ;
191 // -------------------------------------------------------------------
193 $bugsys- > input_clean ( 'favorite' , TYPE_INT
);
194 if ( $bugsys- > in
[ 'favorite' ] != 0 AND $bugsys- > userinfo
[ 'userid' ])
196 $favorites = $db- > query ( "SELECT * FROM " . TABLE_PREFIX
. "favorite WHERE userid = " . $bugsys- > userinfo
[ 'userid' ]);
197 while ( $favorite = $db- > fetch_array ( $favorites ))
199 $ids [] = $favorite [ 'bugid' ];
201 $querybuild [ 'favorites' ] = "AND bug.bugid " . ( $bugsys- > in
[ 'favorite' ] > 0 ? "IN" : "NOT IN" ) . " (" . implode ( ', ' , $ids ) . ")" ;
204 // -------------------------------------------------------------------
206 $sortby = array ( 'bugid' , 'severity' , 'priority' , 'status' , 'resolution' , 'dateline' );
207 $orderby = array ( 'ASC' , 'DESC' );
208 $bugsys- > in
[ 'orderby' ] = strtoupper ( $bugsys- > in
[ 'orderby' ]);
209 if ( in_array ( $bugsys- > in
[ 'sortby' ], $sortby ) AND in_array ( $bugsys- > in
[ 'orderby' ], $orderby ))
211 $sortclause = "ORDER BY " . $bugsys- > in
[ 'sortby' ] . ' ' . $bugsys- > in
[ 'orderby' ];
213 else if ( $bugsys- > in
[ 'sortby' ] == 'relevance' )
222 // -------------------------------------------------------------------
224 $fields_fetch = $bugsys- > db
-> query ( "
226 FROM " . TABLE_PREFIX
. "bugfield AS bugfield
227 LEFT JOIN " . TABLE_PREFIX
. "bugfieldpermission AS permission
228 ON (bugfield.fieldid = permission.fieldid)
229 WHERE permission.mask <> 0
230 AND permission.usergroupid = {$bugsys->userinfo['usergroupid']}
231 AND bugfield.cansearch = 1"
233 while ( $field = $bugsys- > db
-> fetch_array ( $fields_fetch ))
235 if (! empty ( $bugsys- > in
[ "custom $field [fieldid]" ]) OR ( $field [ 'type' ] == 'select_single' AND isset ( $bugsys- > in
[ "custom $field [fieldid]" ])))
237 if ( $field [ 'type' ] == 'input_checkbox' AND $bugsys- > input_clean ( "custom $field [fieldid]" , TYPE_INT
) != 0 )
239 $querybuild [] = "AND bug.custom $field [fieldid] = " . ( $bugsys- > in
[ "custom $field [fieldid]" ] > 0 ? 1 : 0 );
241 else if ( $field [ 'type' ] == 'input_text' )
243 $querybuild [] = "AND bug.custom $field [fieldid] LIKE '%" . $bugsys- > in
[ "custom $field [fieldid]" ] . "%'" ;
245 else if ( $field [ 'type' ] == 'select_single' AND $bugsys- > in
[ "custom $field [fieldid]" ] != - 1 )
247 $temp = unserialize ( $field [ 'selects' ]);
248 $querybuild [] = "AND bug.custom $field [fieldid] = '" . trim ( $temp [ intval ( $bugsys- > in
[ "custom $field [fieldid]" ]) ]) . "'" ;
253 // -------------------------------------------------------------------
254 // have to search something
255 if ( sizeof ( $querybuild ) < 1 )
257 $message- > error ( sprintf ( _ ( 'You have to enter some criteria to search for. Note that words less than %1 $d characters are ignored by the search engine (and some other very common words, too).' ), SEARCH_WORD_MIN
));
260 // -------------------------------------------------------------------
263 SELECT bug.*, comment.commentid
264 FROM " . TABLE_PREFIX
. "bug AS bug
265 LEFT JOIN " . TABLE_PREFIX
. "comment AS comment
266 ON (bug.bugid = comment.bugid)
268 AND bug.product IN (#<'ONBITS:VIEW'>#)
269 AND (!bug.hidden OR (bug.hidden AND bug.product IN (#<'ONBITS:HIDDEN'>#))" . ( can_perform ( 'canviewownhidden' ) ? " OR (bug.hidden AND bug.userid = " . $bugsys- > userinfo
[ 'userid' ] . " AND bug.product IN (#<'ONBITS:OWNHIDDEN'>#))" : "" ) . ")
270 " . implode ( " \n\t\t " , $querybuild ) . "
274 $runquery = str_replace(array(" #<'ONBITS:VIEW'>#", "#<'ONBITS:HIDDEN'>#", "#<'ONBITS:OWNHIDDEN'>#"), array(fetch_on_bits('canviewbugs'), fetch_on_bits('canviewhidden'), fetch_on_bits('canviewonhidden')), $query);
276 $search = $db- > query ( $runquery );
278 $numrows = $db- > num_rows ( $search );
282 $message- > error ( _ ( 'No search results were returned that matched your criteria.' ));
285 while ( $result = $db- > fetch_array ( $search ))
287 $ids [] = $result [ 'bugid' ];
288 $results [] = $result ;
291 if ( $bugsys- > userinfo
[ 'userid' ])
293 $db- > query ( "DELETE FROM " . TABLE_PREFIX
. "search WHERE userid = " . $bugsys- > userinfo
[ 'userid' ] . " AND name IS NULL" );
297 INSERT INTO " . TABLE_PREFIX
. "search
298 (userid, dateline, query, ids, orderby, hilight, resultcount)
300 (" . $bugsys- > userinfo
[ 'userid' ] . ",
301 " . TIMENOW
. ", '" . $bugsys- > escape ( $query ) . "',
302 '" . implode ( ',' , $ids ) . "', '" . $bugsys- > escape ( $sortclause ) . "',
303 '" . $bugsys- > escape ( $hilight ) . "',
304 " . sizeof ( $results ) . "
308 $searchid = $db- > insert_id ();
311 $search = array ( 'ids' => implode ( ',' , $ids ), 'orderby' => $sortclause );
313 $_POST [ 'do' ] = 'results' ;
316 // ###################################################################
318 if ( $_REQUEST [ 'do' ] == 'search' )
320 if ( $bugsys- > in
[ 'searchid' ] AND ! $bugsys- > in
[ 'new' ])
322 if ( $cachedsearch = $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE searchid = " . $bugsys- > input_clean ( 'searchid' , TYPE_UINT
) . " AND userid = " . $bugsys- > userinfo
[ 'userid' ]))
324 $_POST [ 'do' ] = 'results' ;
325 $searchid = $cachedsearch [ 'searchid' ];
332 else if ( $bugsys- > userinfo
[ 'userid' ] AND ! $bugsys- > in
[ 'new' ])
334 if ( $cachedsearch = $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE name IS NULL AND userid = " . $bugsys- > userinfo
[ 'userid' ]))
336 $_POST [ 'do' ] = 'results' ;
337 $searchid = $cachedsearch [ 'searchid' ];
351 if (! is_array ( $bugsys- > datastore
[ 'product' ]))
353 $message- > error ( _ ( 'No products are setup, therefore there can be no bugs and thus search cannot function.' ));
356 if (! is_array ( $bugsys- > datastore
[ 'version' ]))
358 $message- > error ( _ ( 'No versions have been added underneath your product(s), there can be no bugs and thus search cannot function.' ));
361 $productSelect = ConstructProductSelect ();
363 // -------------------------------------------------------------------
365 $fields = construct_custom_fields ( null , true , false , true );
367 foreach ( $fields AS $field )
371 $customfields [ 'left' ] .= $field ;
375 $customfields [ 'right' ] .= $field ;
380 // -------------------------------------------------------------------
382 $select [ 'severity' ] = construct_datastore_select ( 'severity' , 'severity' , 'severityid' );
383 $select [ 'priority' ] = construct_datastore_select ( 'priority' , 'priority' , 'priorityid' );
384 $select [ 'status' ] = construct_datastore_select ( 'status' , 'status' , 'statusid' );
385 $select [ 'resolution' ] = construct_datastore_select ( 'resolution' , 'resolution' , 'resolutionid' );
388 if ( $bugsys- > userinfo
[ 'userid' ])
390 $searchesFetch = $db- > query ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE name IS NOT NULL AND userid = " . $bugsys- > userinfo
[ 'userid' ]);
391 while ( $search = $db- > fetch_array ( $searchesFetch ))
393 $value = $search [ 'searchid' ];
394 $label = $search [ 'name' ];
395 eval ( ' $searches .= "' . $template- > fetch ( 'selectoption' ) . '";' );
400 foreach ( $bugsys- > datastore
[ 'assignto' ] AS $dev )
402 $value = $dev [ 'userid' ];
403 $label = construct_user_display ( $dev , false );
404 eval ( ' $select [dev] .= "' . $template- > fetch ( 'selectoption' ) . '";' );
407 eval ( ' $template- >flush("' . $template- > fetch ( 'search' ) . '");' );
411 // ###################################################################
413 if ( $_REQUEST [ 'do' ] == 'update' )
415 $search = $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE searchid = " . $bugsys- > input_clean ( 'searchid' , TYPE_UINT
) . " AND userid = " . $bugsys- > userinfo
[ 'userid' ]);
418 $message- > error_permission ();
421 $productSelect = ConstructProductSelect ();
423 $show [ 'update' ] = true ;
425 // -------------------------------------------------------------------
427 $fields = construct_custom_fields ( null , true , false , true );
429 foreach ( $fields AS $field )
433 $customfields [ 'left' ] .= $field ;
437 $customfields [ 'right' ] .= $field ;
442 // -------------------------------------------------------------------
444 $select [ 'severity' ] = construct_datastore_select ( 'severity' , 'severity' , 'severityid' , 0 , 0 );
445 $select [ 'priority' ] = construct_datastore_select ( 'priority' , 'priority' , 'priorityid' , 0 , 0 );
446 $select [ 'status' ] = construct_datastore_select ( 'status' , 'status' , 'statusid' , 0 , 0 );
447 $select [ 'resolution' ] = construct_datastore_select ( 'resolution' , 'resolution' , 'resolutionid' , 0 , 0 );
453 eval ( ' $select [dev] .= "' . $template- > fetch ( 'selectoption' ) . '";' );
455 foreach ( $bugsys- > datastore
[ 'assignto' ] AS $dev )
457 $value = $dev [ 'userid' ];
458 $label = construct_user_display ( $dev , false );
459 eval ( ' $select [dev] .= "' . $template- > fetch ( 'selectoption' ) . '";' );
462 eval ( ' $template- >flush("' . $template- > fetch ( 'search_update' ) . '");' );
465 // ###################################################################
467 if ( $_POST [ 'do' ] == 'doupdate' )
469 $search = $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE searchid = " . $bugsys- > input_clean ( 'searchid' , TYPE_UINT
) . " AND userid = " . $bugsys- > userinfo
[ 'userid' ]);
472 $message- > error_permission ();
475 // find all the bugs that we can edit
477 SELECT * FROM " . TABLE_PREFIX
. "bug
478 WHERE bugid IN ( $search [ids])
479 AND product IN (" . fetch_on_bits ( 'canviewbugs' ) . ")
482 product IN (" . fetch_on_bits ( 'caneditother' ) . ")
484 (userid = " . $bugsys- > userinfo
[ 'userid' ] . " AND product IN (" . fetch_on_bits ( 'caneditown' ) . "))
487 while ( $bug = $db- > fetch_array ( $bugs ))
489 if (!(( can_perform ( 'caneditown' , $bug [ 'product' ]) AND $bugsys- > userinfo
[ 'userid' ] == $bug [ 'userid' ]) OR ( can_perform ( 'caneditother' , $bug [ 'product' ]) AND $bugsys- > userinfo
[ 'userid' ] != $bug [ 'userid' ])) AND ! can_perform ( 'canpostcomments' , $bug [ 'product' ]))
494 $api = new BugApi ( $bugsys );
495 $log = new Logging ();
496 $log- > set_bugid ( $bug [ 'bugid' ]);
497 $log- > add_data ( true , $bug , $log- > getCommonFields ());
499 if ( $bugsys- > in
[ 'status' ] AND can_perform ( 'canchangestatus' , $bug [ 'product' ]))
501 $api- > set ( 'status' , $bugsys- > in
[ 'status' ]);
503 if ( $bugsys- > in
[ 'priority' ] AND can_perform ( 'canchangestatus' , $bug [ 'product' ]))
505 $api- > set ( 'priority' , $bugsys- > in
[ 'priority' ]);
507 if ( $bugsys- > in
[ 'severity' ])
509 $api- > set ( 'severity' , $bugsys- > in
[ 'severity' ]);
511 if ( $bugsys- > in
[ 'resolution' ] AND can_perform ( 'canchangestatus' , $bug [ 'product' ]))
513 $api- > set ( 'resolution' , $bugsys- > in
[ 'resolution' ]);
515 if ( $bugsys- > in
[ 'assignedto' ] AND can_perform ( 'canassign' , $bug [ 'product' ]))
517 $api- > set ( 'severity' , $bugsys- > in
[ 'severity' ]);
519 if ( $bugsys- > in
[ 'product' ])
521 $product = explode ( ',' , $bugsys- > in
[ 'product' ]);
522 $api- > set ( 'product' , $product [ 0 ]);
523 $api- > set ( 'component' , $product [ 1 ]);
524 $api- > set ( 'version' , $product [ 2 ]);
527 $log- > add_data ( false , $api- > values
, $log- > getCommonFields ());
529 process_custom_fields ( $api , $message );
532 $log- > update_history ();
535 $message- > redirect ( _ ( 'The specified bugs have been updated and you will now return to your search results.' ), 'search.php?do=results&searchid=' . $bugsys- > in
[ 'searchid' ]);
538 // ###################################################################
540 if ( $_REQUEST [ 'do' ] == 'export' )
542 if (! $bugsys- > in
[ 'searchid' ] AND $bugsys- > userinfo
[ 'userid' ])
544 $search = $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE name IS NULL AND userid = " . $bugsys- > userinfo
[ 'userid' ]);
546 else if ( $bugsys- > in
[ 'searchid' ])
548 $search = $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE searchid = " . $bugsys- > input_clean ( 'searchid' , TYPE_UINT
) . " AND userid = " . $bugsys- > userinfo
[ 'userid' ]);
552 $message- > error ( _ ( 'The search results are trying to export are invalid. Please start over <a href="search.php?new=1">here</a> and try again.' ));
557 $message- > error ( _ ( 'Your search has expired because it is older than one hour. Please start over <a href="search.php?new=1">here</a>.' ));
560 $bugs = $db- > query ( "SELECT * FROM " . TABLE_PREFIX
. "bug WHERE bugid IN ( $search [ids]) $search [orderby]" );
562 $xml = '<?xml version="1.0" encoding="' . $language [ 'charset' ] . '"?>
564 <bugdarExport user="' . $bugsys- > unsanitize ( construct_user_display ( $bugsys- > userinfo
, false )) . '" date="' . $datef- > format ( 'r' , TIMENOW
) . '" searchid="' . $search [ 'searchid' ] . '">' ;
566 while ( $bug = $db- > fetch_array ( $bugs ))
570 ProcessBugDataForDisplay (& $bug );
572 $xml .= " \n\t\t <id>" . $bug [ 'bugid' ] . "</id>" ;
573 $xml .= " \n\t\t <dateReported>" . $datef- > format ( 'r' , $bug [ 'dateline' ]) . "</dateReported>" ;
576 $xml .= " \n\t\t <reporter>" . construct_user_display ( $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "user WHERE userid = $bug [userid]" ), false ) . "</reporter>" ;
578 $xml .= " \n\t\t <summary>" . $bug [ 'summary' ] . "</summary>" ;
579 $xml .= " \n\t\t <product>" . $bug [ 'product' ] . "</product>" ;
580 if ( $bug [ 'component' ])
582 $xml .= " \n\t\t <component>" . $bug [ 'component' ] . "</component>" ;
584 $xml .= " \n\t\t <version>" . $bug [ 'version' ] . "</version>" ;
585 $xml .= " \n\t\t <status>" . $bug [ 'status' ] . "</status>" ;
586 if ( $bug [ 'assignedto' ])
588 $xml .= " \n\t\t <assignedTo>" . construct_user_display ( $bugsys- > datastore
[ 'assignto' ][ " $bug [assignedto]" ], false ) . "</assignedTo>" ;
590 $xml .= " \n\t\t <resolution>" . $bug [ 'resolution' ] . "</resolution>" ;
591 $xml .= " \n\t\t <severity>" . $bug [ 'severity' ] . "</severity>" ;
592 $xml .= " \n\t\t <priority>" . $bug [ 'priority' ] . "</priority>" ;
594 $xml .= " \n\t </bug>" ;
597 $xml .= " \n </bugdarExport>" ;
599 $funct- > download_file ( $xml , _ ( 'bugdar-search-' . $search [ 'searchid' ] . '.xml' ), true );
602 // ###################################################################
604 if ( $_POST [ 'do' ] == 'dosave' )
606 $search = $db- > query_first ( "SELECT * FROM " . TABLE_PREFIX
. "search WHERE searchid = " . $bugsys- > input_clean ( 'searchid' , TYPE_UINT
) . " AND userid = " . $bugsys- > userinfo
[ 'userid' ]);
609 $message- > add_error ( _ ( 'The search does not exist.' ));
613 $message- > add_error ( sprintf ( _ ( 'This search has already been named "%1 $s" .' ), $search [ 'name' ]));
615 if ( empty ( $bugsys- > in
[ 'name' ]))
617 $message- > add_error ( _ ( 'The name cannot be empty.' ));
620 if (! $message- > items
)
622 $db- > query ( "UPDATE " . TABLE_PREFIX
. "search SET name = '" . $bugsys- > input_escape ( 'name' ) . "' WHERE searchid = " . $bugsys- > in
[ 'searchid' ]);
623 $message- > redirect ( _ ( 'Your search has been saved.' ), 'search.php?searchid=' . $search [ 'searchid' ]);
627 $message- > error_list_process ();
628 $_REQUEST [ 'do' ] = 'save' ;
629 $show [ 'errors' ] = true ;
633 // ###################################################################
635 if ( $_REQUEST [ 'do' ] == 'save' )
637 if (! $bugsys- > userinfo
[ 'userid' ])
639 $message- > error_permission ();
642 eval ( ' $template- >flush("' . $template- > fetch ( 'search_save' ) . '");' );
645 // ###################################################################
647 if ( $_POST [ 'do' ] == 'results' )
649 $show [ 'cached' ] = false ;
650 if ( $searchid AND ! $justprocess )
652 $search = $cachedsearch ;
653 if ( $search [ 'dateline' ] < TIMENOW
- 900 OR $bugsys- > in
[ 'rerun' ])
655 $research = $db- > query ( str_replace ( array ( "#<'ONBITS:VIEW'>#" , "#<'ONBITS:HIDDEN'>#" , "#<'ONBITS:OWNHIDDEN'>#" ), array ( fetch_on_bits ( 'canviewbugs' ), fetch_on_bits ( 'canviewhidden' ), fetch_on_bits ( 'canviewownhidden' )), $search [ 'query' ]));
656 while ( $bug = $db- > fetch_array ( $research ))
658 $ids [] = $bug [ 'bugid' ];
661 $search [ 'ids' ] = implode ( ',' , $ids );
662 $db- > query ( "UPDATE " . TABLE_PREFIX
. "search SET ids = '" . implode ( ',' , $ids ) . "', dateline = " . TIMENOW
. ", resultcount = " . sizeof ( $results ) . " WHERE searchid = " . $search [ 'searchid' ]);
664 $show [ 'cached' ] = true ;
665 $hilight = $search [ 'hilight' ];
670 $message- > error ( _ ( 'No bugs matched your search criteria. Please <a href="search.php?new=1">try again</a> with different search requirements.' ));
673 LoadPaginationFramework ();
674 $pagination- > setTotal ( $search [ 'resultcount' ]);
675 $pagination- > splitPages ();
677 $sort = new ListSorter ( 'search' );
679 $show [ 'save' ] = ( $bugsys- > userinfo
[ 'userid' ] AND ! $search [ 'name' ]);
680 $show [ 'update' ] = can_perform ( 'caneditother' );
683 $search = $db- > query ( "SELECT * FROM " . TABLE_PREFIX
. "bug WHERE bugid IN ( $search [ids]) $search [orderby] LIMIT " . $pagination- > fetchLimit ( $pagination- > getPage () - 1 ) . ", " . $pagination- > getPerPage ());
684 while ( $bug = $db- > fetch_array ( $search ))
686 $funct- > exec_swap_bg ( $stylevar [ 'alt_color' ], '' );
687 ProcessBugDataForDisplay (& $bug , $funct- > bgcolour
);
688 $bugs .= $sort- > constructRow ( $bug , "&hilight= $hilight" );
691 $columnHeads = $sort- >constructColumnHeaders(false);
692 $show ['pagenav'] = ( $pagination- >getPageCount() > 1);
693 $pagenav = $pagination- >constructPageNav('search.php?searchid=' . $searchid );
695 eval(' $template- >flush(" ' . $template- >fetch(' search_results
') . ' ");');
698 /*=====================================================================*\
699 || ###################################################################
702 || ###################################################################
703 \*=====================================================================*/