<?PHP
/******************************************************
    search class

- used to search the ranks of the database for the 
  data you are requesting
******************************************************/

class search{
    
    var 
$search '';
    var 
$count 0;
    var 
$start 0;
    var 
$end 0;
    var 
$page 0;
    var 
$pageCount 0;
    var 
$resultsPerPage 50;
    var 
$day = array();
    var 
$use '';
    
    function 
search($string ''$page 1$use ''){
        if(
$page 1$page 1;
        
$this->page $page;
        
$this->use $use;
        
$this->search trim($string);
        
$this->start = (($this->page 1) * $this->resultsPerPage) + 1;
        
        
$this->regular_search($this->start 1$this->resultsPerPage);
        
        
$this->end $this->count $this->start 1;
        if(
$this->end $this->resultsPerPage$this->end $this->resultsPerPage;
        if(
$this->count == 0$this->start 0;
        if(
$this->count 0)$this->pageCount ceil($this->count $this->resultsPerPage);
    }
    
    function 
regular_search($start 0$end 50){
        
// advanced search options
        
$advsearch '';
        if(
trim($this->use) != '')
            
$advsearch .= " AND ebuild_use REGEXP '[[:<:]]".mysqlclean($this->use)."[[:>:]]'";
        
        
$regsearch "( MATCH(ebuild_description, ebuild_display, ebuild_search) AGAINST ('".mysqlclean($this->search)."') OR ebuild_search LIKE '%".mysqlclean($this->search)."%' OR ebuild_description LIKE '%".mysqlclean($this->search)."%')";

        
// run the queries
        
$sql "CREATE TEMPORARY TABLE search_result 
                SELECT ebuild_p, package_f, count(*) pkg_count, ebuild_description, MATCH(ebuild_description, ebuild_display, ebuild_search) AGAINST ('"
.mysqlclean($this->search)."') AS score
                FROM ebuild
                WHERE ebuild._removed IS NULL AND {$regsearch}
                        {$advsearch}
                GROUP BY package_f"
;
        
mysql_query($sql) or die(mysql_error());
        
        
$sql "SELECT package_title, category_title, ebuild_description, score
                FROM search_result, package, category
                WHERE  package_p = package_f AND category_p = category_f
                ORDER BY package_title = '"
.mysqlclean($this->search)."' DESC, category_title = '".mysqlclean($this->search)."', concat(category_title, '/', package_title) = '".mysqlclean($this->search)."' DESC, score DESC
                LIMIT {$start}, {$end}"
;
        
$results mysql_query($sql) or die(mysql_error());
        while(
$row mysql_fetch_assoc($results)){
            
$this->data[] = $row;
        }
        
        
$sql "SELECT count(*) cnt FROM search_result";
        
$results mysql_query($sql) or die(mysql_error());
        
$row mysql_fetch_assoc($results);
        
$this->count $row['cnt'];
    }
    
}

?>