<?php
require_once "globals.inc";
require_once 
"DB.php";

/**
 * Function to retrieve a list of PDB ids
 *
 * @param    string    $metal    metal symbol
 * @param    string    $mode    one of: first, last, random, new
 * @param    int        $count    number of entries to retrieve
 * @return    mixed    array of results on sucess, false or a DB_Error otherwise
 */

function &getPDBFromMetal($metal$mode$count) {
    
$fields "distinct site.metal, protein.source_id, ";
    
$fields .= "DATE_FORMAT(protein.rev_date, '%Y/%m/%d') as revision_date,"
    
$fields .= "DATE_FORMAT(protein.dep_date, '%Y/%m/%d') as deposition_date,"
    
$fields .= "protein.expdata, protein.r_value, protein.resolution,";
    
$fields .= "protein.authors, protein.description";
    
$from "from site,protein";
    
$where "where site.metal = '$metal' and site.source_id = protein.source_id";
    switch (
$mode) {
        case 
"last" :
            
$ordlim " order by protein.source_id DESC limit $count";
            break;
        case 
"new" :
            
$ordlim " order by protein.rev_date DESC limit $count";
            break;
        case 
"random" :
            
$ordlim "";
            break;
        case 
"first" :
        default:
            
$ordlim " order by protein.source_id ASC limit $count";
            break;
    }
    
$query "select $fields $from $where $ordlim";
    
$c = @DB::connect(MDB_DATA_DSN);
    if (
is_object($c) && !DB::isError($c)) {
        
$c->setFetchMode(DB_FETCHMODE_ASSOC);
        
$result $c->getAll($query);
        
$c->disconnect();
        if (!
is_array($result))
            return 
false;
        if (
$mode == "random") {
            
$n count($result);
            list(
$usec$sec) = explode(' 'microtime());
            
srand((float) $sec + ((float) $usec 100000));
            
$indexlist array_rand(range(0$n 1), $count);
            
$randomresult = array();
            foreach (
$indexlist as $index)
                
$randomresult[] = $result[$index];
            return 
$randomresult;
        } else {
            return 
$result;
        }
    } else {
        return new 
DB_Error("Error while accessing database -- ".$c->getMessage());
    }
}

?>