* @copyright 2008-2010 Phergie Development Team (http://phergie.org) * @license http://phergie.org/license New BSD License * @link http://pear.phergie.org/package/Phergie_Plugin_Url */ /** * Responds to a request for a TLD (formatted as .tld where tld is the TLD to * be looked up) with its corresponding description. * * @category Phergie * @package Phergie_Plugin_Tld * @author Phergie Development Team * @license http://phergie.org/license New BSD License * @link http://pear.phergie.org/package/Phergie_Plugin_Tld * @uses Phergie_Plugin_Http pear.phergie.org * * @pluginDesc Provides information for a top level domain. */ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract { /** * connection to the database * @var PDO */ protected $db; /** * Some fixed TLD values, keys must be lowercase * @var array */ protected static $fixedTlds; /** * Prepared statement for selecting a single tld * @var PDOStatement */ protected $select; /** * Prepared statement for selecting all tlds * @var PDOStatement */ protected $selectAll; /** * Checks for dependencies, sets up database and hard coded values * * @return void */ public function onLoad() { $help = $this->getPluginHandler()->getPlugin('Help'); $help->register($this); if (!is_array(self::$fixedTlds)) { self::$fixedTlds = array( 'phergie' => 'You can find Phergie at http://www.phergie.org', 'spoon' => 'Don\'t you know? There is no spoon!', 'poo' => 'Do you really think that\'s funny?', 'root' => 'Diagnostic marker to indicate ' . 'a root zone load was not truncated.' ); } try { $dbFile = dirname(__FILE__) . '/Tld/tld.db'; $dbManager = new Phergie_Db_Sqlite($dbFile); $this->db = $dbManager->getDb(); if (!$dbManager->hasTable('tld')) { $query = 'CREATE TABLE tld (' . 'tld VARCHAR(20), ' . 'type VARCHAR(20), ' . 'description VARCHAR(255))'; $this->db->exec($query); // prepare a statement to populate the table with // tld information $insert = $this->db->prepare( 'INSERT INTO tld (tld, type, description) VALUES (:tld, :type, :description)' ); // grab tld data from iana.org... $contents = file_get_contents( 'http://www.iana.org/domains/root/db/' ); // ...and then parse it out $regex = '{getEvent()->getNick()}: .{$tld} -> " . ($description ? $description : 'Unknown TLD') ); } /** * Retrieves the definition for a given TLD if it exists * * @param string $tld TLD to search for * * @return string Definition of the given TLD */ public function getTld($tld) { $tld = trim(strtolower($tld)); if (isset(self::$fixedTlds[$tld])) { return self::$fixedTlds[$tld]; } else { if ($this->select->execute(array('tld' => $tld))) { $tlds = $this->select->fetch(); if (is_array($tlds)) { return '(' . $tlds['type'] . ') ' . $tlds['description']; } } } return false; } /** * Retrieves a list of all the TLDs and their definitions * * @return array Array of all the TLDs and their definitions */ public function getTlds() { if ($this->selectAll->execute()) { $tlds = $this->selectAll->fetchAll(); if (is_array($tlds)) { $tldinfo = array(); foreach ($tlds as $key => $tld) { if (!empty($tld['tld'])) { $tldinfo[$tld['tld']] = "({$tld['type']}) " . $tld['description']; } } unset($tlds); return $tldinfo; } } return false; } }