]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php
Revert "Merged in Phergie changes"
[quix0rs-gnu-social.git] / plugins / Irc / extlib / phergie / Phergie / Plugin / Tld.php
index 21ba1e671984b9831a3300d1b35b5466d8c8639b..21993f73c58fbde3efdb18ff5fc99d64ec24d0ca 100644 (file)
@@ -29,7 +29,8 @@
  * @author   Phergie Development Team <team@phergie.org>
  * @license  http://phergie.org/license New BSD License
  * @link     http://pear.phergie.org/package/Phergie_Plugin_Tld
- * @uses     Phergie_Plugin_Http pear.phergie.org
+ * @uses     extension PDO
+ * @uses     extension pdo_sqlite
  *
  * @pluginDesc Provides information for a top level domain.
  */
@@ -40,11 +41,6 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract
      * @var PDO
      */
     protected $db;
-    /**
-     * Some fixed TLD values, keys must be lowercase
-     * @var array
-     */
-    protected static $fixedTlds;
 
     /**
      * Prepared statement for selecting a single tld
@@ -65,129 +61,29 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract
      */
     public function onLoad()
     {
+        if (!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
+            $this->fail('PDO and pdo_sqlite extensions must be installed');
+        }
+
         $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.'
-            );
-        }
-
+        $dbFile = dirname(__FILE__) . '/Tld/tld.db';
         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 = '{<tr class="iana-group[^>]*><td><a[^>]*>\s*\.?([^<]+)\s*'
-                        . '(?:<br/><span[^>]*>[^<]*</span>)?</a></td><td>\s*'
-                        . '([^<]+)\s*</td><td>\s*([^<]+)\s*}i';
-                preg_match_all($regex, $contents, $matches, PREG_SET_ORDER);
-
-                foreach ($matches as $match) {
-                    list(, $tld, $type, $description) = array_pad($match, 4, null);
-                    $type = trim(strtolower($type));
-                    if ($type != 'test') {
-                        $tld = trim(strtolower($tld));
-                        $description = trim($description);
-
-                        switch ($tld) {
-
-                        case 'com':
-                            $description = 'Commercial';
-                            break;
-
-                        case 'info':
-                            $description = 'Information';
-                            break;
-
-                        case 'net':
-                            $description = 'Network';
-                            break;
-
-                        case 'org':
-                            $description = 'Organization';
-                            break;
-
-                        case 'edu':
-                            $description = 'Educational';
-                            break;
-
-                        case 'name':
-                            $description = 'Individuals, by name';
-                            break;
-                        }
-
-                        if (empty($tld) || empty($description)) {
-                            continue;
-                        }
-
-                        $regex = '{(^(?:Reserved|Restricted)\s*(?:exclusively\s*)?'
-                                 . '(?:for|to)\s*(?:members of\s*)?(?:the|support)?'
-                                 . '\s*|\s*as advised.*$)}i';
-                        $description = preg_replace($regex, '', $description);
-                        $description = ucfirst(trim($description));
-
-                        $data = array_map(
-                            'html_entity_decode', array(
-                                'tld' => $tld,
-                                'type' => $type,
-                                'description' => $description
-                            )
-                        );
-
-                        $insert->execute($data);
-                    }
-                }
-
-                unset(
-                    $insert,
-                    $matches,
-                    $match,
-                    $contents,
-                    $tld,
-                    $type,
-                    $description,
-                    $data,
-                    $regex
-                );
-            }
-
-            // Create a prepared statements for retrieving TLDs
-            $this->select = $this->db->prepare(
-                'SELECT type, description '
-                . 'FROM tld WHERE LOWER(tld) = LOWER(:tld)'
-            );
-
-            $this->selectAll = $this->db->prepare(
-                'SELECT tld, type, description FROM tld'
-            );
+            $this->db = new PDO('sqlite:' . $dbFile);
+
+            $this->select = $this->db->prepare('
+                SELECT type, description
+                FROM tld
+                WHERE LOWER(tld) = LOWER(:tld)
+            ');
+
+            $this->selectAll = $this->db->prepare('
+                SELECT tld, type, description
+                FROM btld
+            ');
         } catch (PDOException $e) {
+            $this->getPluginHandler()->removePlugin($this);
         }
     }
 
@@ -216,19 +112,15 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract
      *
      * @param string $tld TLD to search for
      *
-     * @return string Definition of the given TLD
+     * @return mixed Definition of the given TLD as a string or false if unknown
      */
     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'];
-                }
+        if ($this->select->execute(array('tld' => $tld))) {
+            $tlds = $this->select->fetch();
+            if (is_array($tlds)) {
+                return '(' . $tlds['type'] . ') ' . $tlds['description'];
             }
         }
         return false;
@@ -237,7 +129,8 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract
     /**
      * Retrieves a list of all the TLDs and their definitions
      *
-     * @return array Array of all the TLDs and their definitions
+     * @return mixed Array of all the TLDs and their definitions or FALSE on
+      *        failure
      */
     public function getTlds()
     {
@@ -251,11 +144,9 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract
                         . $tld['description'];
                     }
                 }
-                unset($tlds);
                 return $tldinfo;
             }
         }
         return false;
     }
 }
-