<?PHP
/******************************************************
    package class

- used to import and retreive package information
******************************************************/
require_once('classes/ebuild.php');

class 
package{
    
    var 
$id 0;
    var 
$title '';
    var 
$category 0;
    var 
$category_title '';
    var 
$data = array();
    var 
$ebuilds = array();
    var 
$images = array();
    var 
$use_flags = array();
    var 
$comments = array();
    var 
$rdeps = array();

    function 
package($category$package$insertIfNeeded false){
        if (!
is_numeric($category)) die('$category is not category');
        
$this->category $category;
        
        if (
is_numeric($package) && $package != 0){
            
$sql "SELECT package_p, package_title, package_description, category_title
                    FROM `package`, `category`
                    WHERE `category_p` = `category_f` AND package_p = '{$package}' 
                    LIMIT 0,1"
;
            
$results mysql_query($sql) or die(mysql_error());
            
            if(
$row mysql_fetch_assoc($results)){
                
$this->id $row['package_p'];
                
$this->title $row['package_title'];
                
$this->category_title $row['category_title'];
                
$this->data $row;
            }
        }elseif(
trim($package) != ''){
            
            
$sql "SELECT package_p, package_title, package_description, category_title
                    FROM `package`, `category`
                    WHERE `category_p` = `category_f` AND `package_title` = '"
.mysqlclean($package)."' AND `category_f` = {$category} AND `package`.`_removed` IS NULL 
                    LIMIT 0,1"
;
            
$results mysql_query($sql) or die(mysql_error());
            
            if(
$row mysql_fetch_assoc($results)){
                
$this->id $row['package_p'];
                
$this->title $row['package_title'];
                
$this->category_title $row['category_title'];
                
$this->data $row;
            }elseif(
$insertIfNeeded){
                
// import the category
                
$this->_import($category$package);
            }
        }
    }
    
    function 
ebuilds(){
        if(
count($this->ebuilds) == 0){
            
$sql "SELECT ebuild_p, ebuild_display, ebuild_description, ebuild_urls, ebuild_keywords, ebuild_use, ebuild_rdeps, ebuild_licence, ebuild_version, ebuild_revision, hard_masked
                    FROM ebuild WHERE package_f = {$this->id} AND `_removed` IS NULL "
;
            
$results mysql_query($sql) or die(mysql_error());
            while(
$row mysql_fetch_assoc($results)){
                
$this->ebuilds[] = $row;
            }
            
            
// reorder using php
            
usort($this->ebuilds"user_ebuild_sort");
        }
        
        return 
$this->ebuilds;
    }
    
    function 
gentoo_bugs(){
        
$bugs = array();
        
        
$sql "SELECT * FROM gentoo_bugs WHERE `desc` LIKE '%".$this->title."%' ORDER BY bug_id";
        
$results mysql_query($sql) or die(mysql_error());
        while(
$row mysql_fetch_assoc($results)){
            
$bugs[] = $row;
        }
        
        return 
$bugs;
    }
    
    function 
images(){
        if(
count($this->images) == 0){
            
$sql "SELECT * FROM package_image WHERE package_f = {$this->id} ORDER BY _added DESC";
            
$results mysql_query($sql) or die(mysql_error());
            while(
$row mysql_fetch_assoc($results)){
                
$this->images[] = $row;
            }
        }
        
        return 
$this->images;
    }
    
    function 
rdeps(){
        if(
count($this->rdeps) == 0){
            
$sql "SELECT ebuild_display, package_title, category_title, count(*) FROM ebuild, package, category 
                    WHERE category_p = category_f AND package_p = package_f AND 
                        (ebuild_rdeps LIKE '%"
.$this->category_title.'/'.$this->title." %' OR ebuild_rdeps LIKE '%".$this->category_title.'/'.$this->title."-%' )
                    GROUP BY package_p ORDER BY category_title, package_title"
;
            
$results mysql_query($sql) or die(mysql_error());
            while(
$row mysql_fetch_assoc($results)){
                
$this->rdeps[] = $row;
            }
        }
        return 
$this->rdeps;
    }
    
    function 
newest_ebuild(){
        
$ebuilds $this->ebuilds();
        
        if(isset(
$ebuilds[0]))
            return 
$ebuilds[0];
        return 
false;
    }
    
    function 
changelog(){
        
$sql "SELECT * FROM package_changelog WHERE package_f = {$this->id}";
        
$results mysql_query($sql) or die(mysql_error());
        if(
$row mysql_fetch_assoc($results)){
            return 
$row;
        }else{
            return array(
'changelog' => 'ChangeLog Not Found''changelog_md5' => '');
        }
    }
    
    function 
update_desc($desc){
        
$sql "UPDATE `package` SET package_description = '".mysqlclean($desc)."' WHERE package_p = {$this->id}";
        
mysql_query($sql) or die(mysql_error());
    }
    
    function 
use_flags(){
        if(
count($this->use_flags) == 0){
            
$mid_flags = array();
            
$all_flags = array();
        
            
$ebuilds $this->ebuilds();
            foreach (
$ebuilds as $value){
                
$flags_str $value['ebuild_use'];
                if(
trim($flags_str) != ''){
                    
$flags explode(' '$flags_str);
                    
$all_flags array_merge($all_flags$flags);
                    foreach(
$flags as $key => $value){
                        if(
trim($value) == ''){
                            unset(
$flags[$key]);
                        }else{
                            
$mid_flags[$value] = array('flag' => trim($value), 'global' => '''local' => '''undoc' => 0);
                        }
                    }
                }
            }
        
            if(isset(
$flags) && count($flags) > 0){
                
// get the primary flags
                
$sql "SELECT * FROM use_flag WHERE use_flag IN ('".implode("','",$all_flags)."')";
                
$results mysql_query($sql) or die(mysql_error());
                while(
$row mysql_fetch_assoc($results)){
                    
$mid_flags[$row['use_flag']]['global'] = $row['use_desc'];
                    
$mid_flags[$row['use_flag']]['undoc'] += 1;
                }
                
// get the local flags
                
$sql "SELECT * FROM local_use_flag WHERE use_flag IN ('".implode("','",$all_flags)."') AND pkg_title = '".$this->category_title."/".$this->title."'";
                
$results mysql_query($sql) or die(mysql_error());
                while(
$row mysql_fetch_assoc($results)){
                    
$mid_flags[$row['use_flag']]['local'] = $row['use_desc'];
                    
$mid_flags[$row['use_flag']]['undoc'] += 2;
                }
            }
            
            foreach(
$mid_flags as $value)
                
$this->use_flags[] = $value;
        }
            
        return 
$this->use_flags;
    }
    
    function 
comments(){
        if(
count($this->comments) == 0){
            
$sql "SELECT package_comment.*, user_display FROM user, package_comment WHERE user_f = user_p AND package_f = " $this->id "  ORDER BY `_added` DESC ";
            
$results mysql_query($sql) or die(mysql_error());
            while(
$row mysql_fetch_assoc($results)){
                
$this->comments[] = $row;
            }
        }
        
        return 
$this->comments;
    }
    
    function 
add_comment($user$comment){
        
$sql "INSERT INTO package_comment (`package_f`, `user_f`, `comment_text`, `_added`) VALUES (".$this->id.", ".intval($user).", '".mysqlclean($comment)."', NOW())";
        
mysql_query($sql) or die(mysql_error());
    }
    
    function 
add_image($file$type$caption$uploader$uploaded true){
        global 
$GLOBAL;
        
        switch(
$type){
            case 
'image/png':
            case 
'png':
                
$ext 'png';
                break;
            case 
'image/gif':
            case 
'gif':
                
$ext 'png';
                break;
            case 
'image/jpg':
            case 
'jpg':
            case 
'image/jpeg':
            case 
'jpeg':
                
$ext 'jpg';
                break;
            default:
                
$this->error "Invalid File Type.";
                return 
false;
                break;
        }
        
        if (
is_file($file)){
    
            
$sql "INSERT INTO `package_image` 
                    (`package_f`, `login_f`, `image_md5`, `image_ext`, `image_caption`, `_added`) 
                    VALUES 
                    ({$this->id}, {$uploader}, '"
.md5_file($file)."', '{$ext}', '".mysqlclean($caption)."', NOW())";
            
mysql_query($sql) or die(mysql_error());
            
$imgid mysql_insert_id();
    
            if(
$uploaded){
                
move_uploaded_file($file$GLOBAL['file_path'].'/htdocs/up_img/'.$imgid.'.'.$ext);
            }else{
                
copy($file$GLOBAL['file_path'].'/htdocs/up_img/'.$imgid.'.'.$ext);
            }
        
            
// make a thumbnail
            
make_thumbnail($GLOBAL['file_path'].'/htdocs/up_img/'.$imgid.'.'.$ext$GLOBAL['file_path'].'/htdocs/up_img/thumb/'.$imgid.'.'.$ext);
            
make_thumbnail($GLOBAL['file_path'].'/htdocs/up_img/'.$imgid.'.'.$ext$GLOBAL['file_path'].'/htdocs/up_img/img_800px/'.$imgid.'.'.$ext800);
            
            
$this->error "Image Uploaded Successfully";
            return 
true;
        }
    }
    
    function 
_import($category$package){
        
$sql "INSERT INTO `package` (`category_f`, `package_title`, `_added`) 
                VALUES ({$category},'"
.mysqlclean($package)."', NOW())";
        
mysql_query($sql) or die('Package Insert Error: ' mysql_error());
        
$this->id mysql_insert_id();
        
$this->title $package;
    }

}

?>