<?php
/**
* @name DB_CountryCodes
* @package IANATools
* @author Kevin Hagel <khote@mminternet.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);
}
}
?>
|