Location: PHPKode > scripts > DB Country Codes class > db-country-codes-class/DB_CountryCodes.php
<?php
/**
 * @name     DB_CountryCodes
 * @package  IANATools
 * @author   Kevin Hagel <hide@address.com>
 * @version  $Revision: 1.0 $
 * @since    April 27, 2004
 * @requires ianacclister, PEAR, DB, DB_Table
 *
 * Country Codes Accessor, creator, etc.  More in my IANATools package, this
 * class extends DB_Table to allow you to create, insert data, update data etc,
 * using the dbms's supported by DB_Table.
 *
 * Uses ianacclister on initdb to
 *
 * Assuming a PEAR_DB $db, To create the database, and initialize it:
 *
 *      $table = "countrycodes";
 *      $auto_create = 'drop';
 *      $cc =& new CountryCodes($db,$table,$auto_create);
 *      $result =& $cc->initdb();
 *
 * And of course to update.  Note the 'safe' option for $auto_create
 *
 *      $table = "countrycodes";
 *      $auto_create = 'safe';
 *      $cc =& new DB_CountryCodes($db,$table,$auto_create);
 *      $result =& $cc->updatedb();
 *
 * Accessing DB Contents:
 *
 *      $table = "countrycodes";
 *      $auto_create = 'safe';
 *      $cc =& new DB_CountryCodes($db,$table,$auto_create);
 *
 *      $rows    =& $cc->listall();
 *      $assoc   =& $cc->listassoc();
 *      $record  =& $cc->getRecord();
*/
require_once "DB.php";
require_once "DB/Table.php";
require_once 'class.ianacclister.php';


class DB_CountryCodes extends DB_Table
{
    // Describe the columns
    var $col = array(
        'code'  => array('type' => 'char',    'require' => true,  'size' => 2   ),
        'name'  => array('type' => 'varchar', 'require' => true,  'size' => 128 ),
        'whois' => array('type' => 'varchar', 'require' => true,  'size' => 128 ),
        'extra' => array('type' => 'clob',    'require' => false, 'size' => 256 )
    );

    // Use the country-code for the primary key.
    var $idx = array(
        'code' => 'unique',
        'name' => 'normal',
    );

    // SQL we use
    // listall - dumps all records
    // listassoc - dumps all records, keyed by code
    var $sql = array(
        'listall'      => array('order'  => 'code',                 'get' => 'all'),
        'listassoc'    => array('order'  => 'code',                 'get' => 'assoc'),
        'getrecord'    => array('select' => 'name, whois, extra',   'get' => 'row'),
        'codenamerows' => array('select' => 'code,name',            'get' => 'assoc'),
    );

    /**
     * Initialize the db with ianacclister data
     * @return mixed void on success, PEAR_Error on failure.
    */
    function initdb()
    {
        $hash =& ianacclister::getHash();
        foreach ($hash as $blah=>$data) {
            $cols_vals = array(
                'code'  => $data['code'],
                'name'  => $data['name'],
                'whois' => $data['whois'],
                'extra' => "Used for extra data ..."
            );
            $result = $this->insert($cols_vals);
            if (PEAR::isError($result)) {
                return $result;
            }
        }
        return $result;  // Return whatever was the last result
    }

    /**
     * Update the database
     * @return mixed void on success, PEAR_Error on failure.
    */
    function updatedb()
    {
        $hash =& ianacclister::getHash();
        foreach ($hash as $blah=>$data) {
            $cols_vals = array(
                'name'  => $data['name'],
                'whois' => $data['whois'],
                'extra' => "blah for now"
            );
            $where = "code = '".$data['code']."'";
            $result = $this->update($cols_vals,$where);
            if (PEAR::isError($result)) {
                return $result;
            }
        }
        return $result;  // Return whatever was the last result
    }


    //------------------------\\
    //----- Accessors --------||
    //------------------------//


    /**
     * List everything, do a SELECT *
     * @return array of records on success, PEAR_Error on failure.
    */
    function &listall()
    {
        $rows =& $this->select("listall");
        return $rows;
    }

    /**
     * List everything, do a SELECT *, return in assoc array keyed by ccode.
     * @return code-keyed assoc array on success, PEAR_Error on failure.
    */
    function &listassoc()
    {
        $rows =& $this->select("listassoc");
        return $rows;
    }

    /**
     * returns a hash of "code" => "name", which is probably used
     * more than the others.
    */
    function &codenamehash()
    {
        $rows =& $this->select("codenamerows");
        return $rows;
    }

    /**
     * get a particular record
     * @return array containing country code data if found, NULL if not found,
     *  and PEAR_Error on error.
    */
    function &getRecord($code=NULL)
    {
        if(empty($code)) {
            return new PEAR_Error("Invalid Argument: code received is empty");
        }
        $view = "getrecord";
        $filter = "code = '$code'";
        return $this->select($view, $filter);
    }

}
?>
Return current item: DB Country Codes class