diff options
author | Luke Fitzgerald <lw.fitzgerald@googlemail.com> | 2010-07-18 06:28:15 -0700 |
---|---|---|
committer | Luke Fitzgerald <lw.fitzgerald@googlemail.com> | 2010-07-18 06:28:15 -0700 |
commit | 7caff948f6cc70d8b14ddf02051476d8feb0c696 (patch) | |
tree | 69aaa23e5b80134fb7c54100beedc83b2c39acc5 /plugins | |
parent | 8abef1fd653a1c017679aa9bd54b7f80f743af78 (diff) |
Merged in changes to Phergie
Diffstat (limited to 'plugins')
-rwxr-xr-x | plugins/Irc/extlib/phergie/Phergie/Config.php | 16 | ||||
-rw-r--r-- | plugins/Irc/extlib/phergie/Phergie/Db/Exception.php | 39 | ||||
-rwxr-xr-x | plugins/Irc/extlib/phergie/Phergie/Db/Manager.php | 49 | ||||
-rw-r--r-- | plugins/Irc/extlib/phergie/Phergie/Db/Sqlite.php | 117 | ||||
-rw-r--r-- | plugins/Irc/extlib/phergie/Phergie/ExtendedConfig.php | 51 | ||||
-rw-r--r-- | plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php | 82 | ||||
-rw-r--r-- | plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php | 125 | ||||
-rw-r--r-- | plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php | 68 | ||||
-rw-r--r-- | plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php | 25 | ||||
-rw-r--r--[-rwxr-xr-x] | plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php | 70 |
10 files changed, 224 insertions, 418 deletions
diff --git a/plugins/Irc/extlib/phergie/Phergie/Config.php b/plugins/Irc/extlib/phergie/Phergie/Config.php index f011db236..c182f2ac1 100755 --- a/plugins/Irc/extlib/phergie/Phergie/Config.php +++ b/plugins/Irc/extlib/phergie/Phergie/Config.php @@ -83,6 +83,22 @@ class Phergie_Config implements ArrayAccess } /** + * Merges an associative array of configuration setting values into the + * current configuration settings. + * + * @param array $settings Associative array of configuration setting + * values keyed by setting name + * + * @return Phergie_Config Provides a fluent interface + */ + public function readArray(array $settings) + { + $this->settings += $settings; + + return $this; + } + + /** * Writes the values of the current configuration settings back to their * originating files. * diff --git a/plugins/Irc/extlib/phergie/Phergie/Db/Exception.php b/plugins/Irc/extlib/phergie/Phergie/Db/Exception.php deleted file mode 100644 index 77421108a..000000000 --- a/plugins/Irc/extlib/phergie/Phergie/Db/Exception.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Phergie - * - * PHP version 5 - * - * LICENSE - * - * This source file is subject to the new BSD license that is bundled - * with this package in the file LICENSE. - * It is also available through the world-wide-web at this URL: - * http://phergie.org/license - * - * @category Phergie - * @package Phergie - * @author Phergie Development Team <team@phergie.org> - * @copyright 2008-2010 Phergie Development Team (http://phergie.org) - * @license http://phergie.org/license New BSD License - * @link http://pear.phergie.org/package/Phergie - */ - -/** - * Exceptions related to handling databases for plugins. - * - * @category Phergie - * @package Phergie - * @author Phergie Development Team <team@phergie.org> - * @license http://phergie.org/license New BSD License - * @link http://pear.phergie.org/package/Phergie - */ - -class Phergie_Db_Exception extends Phergie_Exception -{ - /** - * Error indicating that a directory needed to support database - * functionality was unable to be created. - */ - const ERR_UNABLE_TO_CREATE_DIRECTORY = 1; -} diff --git a/plugins/Irc/extlib/phergie/Phergie/Db/Manager.php b/plugins/Irc/extlib/phergie/Phergie/Db/Manager.php deleted file mode 100755 index 2a8215e96..000000000 --- a/plugins/Irc/extlib/phergie/Phergie/Db/Manager.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -/** - * Phergie - * - * PHP version 5 - * - * LICENSE - * - * This source file is subject to the new BSD license that is bundled - * with this package in the file LICENSE. - * It is also available through the world-wide-web at this URL: - * http://phergie.org/license - * - * @category Phergie - * @package Phergie - * @author Phergie Development Team <team@phergie.org> - * @copyright 2008-2010 Phergie Development Team (http://phergie.org) - * @license http://phergie.org/license New BSD License - * @link http://pear.phergie.org/package/Phergie_Command - */ - -/** - * Database management class. Provides a base API for managing databases - * within - * - * @category Phergie - * @package Phergie - * @author Phergie Development Team <team@phergie.org> - * @license http://phergie.org/license New BSD License - * @link http://pear.phergie.org/package/Phergie_Db_Manager - */ -abstract class Phergie_Db_Manager -{ - /** - * Returns a connection to the database. - * - * @return object - */ - public abstract function getDb(); - - /** - * Checks if a table/collection exists within the database. - * - * @param string $table Table/collection name to check for - * - * @return boolean - */ - public abstract function hasTable($table); -} diff --git a/plugins/Irc/extlib/phergie/Phergie/Db/Sqlite.php b/plugins/Irc/extlib/phergie/Phergie/Db/Sqlite.php deleted file mode 100644 index 14ee520fd..000000000 --- a/plugins/Irc/extlib/phergie/Phergie/Db/Sqlite.php +++ /dev/null @@ -1,117 +0,0 @@ -<?php - -/** - * Phergie - * - * PHP version 5 - * - * LICENSE - * - * This source file is subject to the new BSD license that is bundled - * with this package in the file LICENSE. - * It is also available through the world-wide-web at this URL: - * http://phergie.org/license - * - * @category Phergie - * @package Phergie - * @author Phergie Development Team <team@phergie.org> - * @copyright 2008-2010 Phergie Development Team (http://phergie.org) - * @license http://phergie.org/license New BSD License - * @link http://pear.phergie.org/package/Phergie - */ - -/** - * Provides basic management for SQLite databases - * - * @category Phergie - * @package Phergie - * @author Phergie Development Team <team@phergie.org> - * @license http://phergie.org/license New BSD License - * @link http://pear.phergie.org/package/Phergie - */ -class Phergie_Db_Sqlite extends Phergie_Db_Manager -{ - /** - * Database connection - * - * @var PDO - */ - protected $db; - - /** - * Database file path - * - * @var string - */ - protected $dbFile; - - /** - * Allows setting of the database file path when creating the class. - * - * @param string $dbFile database file path (optional) - * - * @return void - */ - public function __construct($dbFile = null) - { - if ($dbFile != null) { - $this->setDbFile($dbFile); - } - } - - /** - * Sets the database file path. - * - * @param string $dbFile SQLite database file path - * - * @return null - */ - public function setDbFile($dbFile) - { - if (is_string($dbFile) && !empty($dbFile)) { - $this->dbFile = $dbFile; - } - } - - /** - * Returns a configured database connection. - * - * @return PDO - */ - public function getDb() - { - if (!empty($this->db)) { - return $this->db; - } - - $dir = dirname($this->dbFile); - if (!is_dir($dir) && !mkdir($dir, 0755, true)) { - throw new Phergie_Db_Exception( - 'Unable to create directory', - Phergie_Db_Exception::ERR_UNABLE_TO_CREATE_DIRECTORY - ); - } - - $this->db = new PDO('sqlite:' . $this->dbFile); - - return $this->db; - } - - - /** - * Returns whether a given table exists in the database. - * - * @param string $table Name of the table to check for - * - * @return boolean TRUE if the table exists, FALSE otherwise - */ - public function hasTable($table) - { - $db = $this->getDb(); - - return (bool) $db->query( - 'SELECT COUNT(*) FROM sqlite_master WHERE name = ' - . $db->quote($table) - )->fetchColumn(); - } -} diff --git a/plugins/Irc/extlib/phergie/Phergie/ExtendedConfig.php b/plugins/Irc/extlib/phergie/Phergie/ExtendedConfig.php deleted file mode 100644 index 4ae6b0293..000000000 --- a/plugins/Irc/extlib/phergie/Phergie/ExtendedConfig.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * Extends the configuration class (Phergie_Config) to allow passing config
- * array instead of loading from file
- *
- * @category Phergie
- * @package Phergie_Extended_Config
- * @author Luke Fitzgerald <lw.fitzgerald@googlemail.com>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link http://status.net/
- */
-class Phergie_Extended_Config extends Phergie_Config {
- /**
- * Incorporates an associative array of settings into the current
- * configuration settings.
- *
- * @param array $array Array of settings
- *
- * @return Phergie_Config Provides a fluent interface
- * @throws Phergie_Config_Exception
- */
- public function readArray($array) {
- $settings = $array;
- if (!is_array($settings)) {
- throw new Phergie_Config_Exception(
- 'Parameter is not an array',
- Phergie_Config_Exception::ERR_ARRAY_NOT_RETURNED
- );
- }
-
- $this->settings += $settings;
-
- return $this;
- }
-}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php index c3af4ed42..ff181d94e 100644 --- a/plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php +++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/NickServ.php @@ -1,4 +1,23 @@ <?php
+/**
+ * Phergie
+ *
+ * PHP version 5
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.
+ * It is also available through the world-wide-web at this URL:
+ * http://phergie.org/license
+ *
+ * @category Phergie
+ * @package Phergie_Plugin_NickServ
+ * @author Phergie Development Team <team@phergie.org>
+ * @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_NickServ
+ */
/**
* Intercepts and responds to messages from the NickServ agent requesting that
@@ -6,10 +25,18 @@ *
* The password configuration setting should contain the password registered
* with NickServ for the nick used by the bot.
+ *
+ * @category Phergie
+ * @package Phergie_Plugin_NickServ
+ * @author Phergie Development Team <team@phergie.org>
+ * @license http://phergie.org/license New BSD License
+ * @link http://pear.phergie.org/package/Phergie_Plugin_NickServ
+ * @uses Phergie_Plugin_Command pear.phergie.org
*/
-class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract {
+class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract
+{
/**
- * The name of the nickserv bot
+ * Nick of the NickServ bot
*
* @var string
*/
@@ -21,20 +48,25 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract { protected $identifyMessage;
/**
- * Initializes instance variables.
+ * Checks for dependencies and required configuration settings.
*
* @return void
*/
- public function onLoad() {
+ public function onLoad()
+ {
$this->getPluginHandler()->getPlugin('Command');
// Get the name of the NickServ bot, defaults to NickServ
$this->botNick = $this->config['nickserv.botnick'];
- if (!$this->botNick) $this->botNick = 'NickServ';
+ if (!$this->botNick) {
+ $this->botNick = 'NickServ';
+ }
// Get the identify message
$this->identifyMessage = $this->config['nickserv.identify_message'];
- if (!$this->identifyMessage) $this->identifyMessage = 'This nickname is registered.';
+ if (!$this->identifyMessage) {
+ $this->identifyMessage = 'This nickname is registered.';
+ }
}
/**
@@ -44,7 +76,8 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract { *
* @return void
*/
- public function onNotice() {
+ public function onNotice()
+ {
$event = $this->event;
if (strtolower($event->getNick()) == strtolower($this->botNick)) {
$message = $event->getArgument(1);
@@ -62,14 +95,15 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract { }
/**
- * Checks to see if the original Nick has quit, if so, take the name back
+ * Checks to see if the original nick has quit; if so, take the name back.
*
* @return void
*/
- public function onQuit() {
- $eventnick = $this->event->getNick();
+ public function onQuit()
+ {
+ $eventNick = $this->event->getNick();
$nick = $this->connection->getNick();
- if ($eventnick == $nick) {
+ if ($eventNick == $nick) {
$this->doNick($nick);
}
}
@@ -80,7 +114,8 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract { *
* @return void
*/
- public function onNick() {
+ public function onNick()
+ {
$event = $this->event;
$connection = $this->connection;
if ($event->getNick() == $connection->getNick()) {
@@ -93,7 +128,8 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract { *
* @return void
*/
- public function onDoGhostbust() {
+ public function onCommandGhostbust()
+ {
$event = $this->event;
$user = $event->getNick();
$conn = $this->connection;
@@ -102,42 +138,44 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract { if ($nick != $this->config['connections'][$conn->getHost()]['nick']) {
$password = $this->config['nickserv.password'];
if (!empty($password)) {
- $this->doPrivmsg($this->event->getSource(), $user . ': Attempting to ghost ' . $nick .'.');
+ $this->doPrivmsg(
+ $this->event->getSource(),
+ $user . ': Attempting to ghost ' . $nick .'.'
+ );
$this->doPrivmsg(
$this->botNick,
'GHOST ' . $nick . ' ' . $password,
true
);
}
- unset($password);
}
}
/**
- * Automatically send the GHOST command if the Nickname is in use
+ * Automatically send the GHOST command if the bot's nick is in use.
*
* @return void
*/
- public function onResponse() {
+ public function onResponse()
+ {
if ($this->event->getCode() == Phergie_Event_Response::ERR_NICKNAMEINUSE) {
$password = $this->config['nickserv.password'];
if (!empty($password)) {
$this->doPrivmsg(
$this->botNick,
- 'GHOST ' . $this->connection->getNick() . ' ' . $password,
- true
+ 'GHOST ' . $this->connection->getNick() . ' ' . $password
);
}
- unset($password);
}
}
/**
- * The server sent a KILL request, so quit the server
+ * Handle the server sending a KILL request.
*
* @return void
*/
- public function onKill() {
+ public function onKill()
+ {
$this->doQuit($this->event->getArgument(1));
}
}
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php index 21ba1e671..5efc265c6 100644 --- a/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php +++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld.php @@ -30,6 +30,8 @@ * @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. */ @@ -78,116 +80,22 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract ); } + $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); } } @@ -258,4 +166,3 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract return false; } } - diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php new file mode 100644 index 000000000..28f963ad1 --- /dev/null +++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php @@ -0,0 +1,68 @@ +<?php + +$dbFile = 'tld.db'; + +if (file_exists($dbFile)) { + exit; +} + +$db = new PDO('sqlite:' . dirname(__FILE__) . '/' . $dbFile); + +$query = ' + CREATE TABLE tld ( + tld VARCHAR(20), + type VARCHAR(20), + description VARCHAR(255) + ) +'; +$db->exec($query); + +$insert = $db->prepare(' + INSERT INTO tld (tld, type, description) + VALUES (:tld, :type, :description) +'); + +$contents = file_get_contents( + 'http://www.iana.org/domains/root/db/' +); + +libxml_use_internal_errors(true); +$doc = new DOMDocument; +$doc->loadHTML($contents); +libxml_clear_errors(); + +$descriptions = array( + 'com' => 'Commercial', + 'info' => 'Information', + 'net' => 'Network', + 'org' => 'Organization', + 'edu' => 'Educational', + 'name' => 'Individuals, by name' +); + +$xpath = new DOMXPath($doc); +$rows = $xpath->query('//tr[contains(@class, "iana-group")]'); +foreach (range(0, $rows->length - 1) as $index) { + $row = $rows->item($index); + $tld = strtolower(ltrim($row->childNodes->item(0)->textContent, '.')); + $type = $row->childNodes->item(1)->nodeValue; + if (isset($descriptions[$tld])) { + $description = $descriptions[$tld]; + } else { + $description = $row->childNodes->item(2)->textContent; + $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); +} diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php index 91f177d2a..4a77d1e41 100644 --- a/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php +++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Twitter.php @@ -1,6 +1,6 @@ <?php /** - * Phergie + * Phergie * * PHP version 5 * @@ -11,7 +11,7 @@ * It is also available through the world-wide-web at this URL: * http://phergie.org/license * - * @category Phergie + * @category Phergie * @package Phergie_Plugin_Twitter * @author Phergie Development Team <team@phergie.org> * @copyright 2008-2010 Phergie Development Team (http://phergie.org) @@ -20,7 +20,7 @@ */ /** - * These requires are for library code, so they don't fit Autoload's normal + * These requires are for library code, so they don't fit Autoload's normal * conventions. * * @link http://github.com/scoates/simpletweet @@ -68,11 +68,6 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract protected $twitterpassword = null; /** - * Allow only admins to tweet - */ - protected $requireAdmin = true; - - /** * Register with the URL plugin, if possible * * @return void @@ -91,13 +86,6 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract */ public function onLoad() { - // see if tweetrequireadmin defined in config - if (isset($this->config['twitter.tweetrequireadmin']) - && $req = $this->config['twitter.tweetrequireadmin'] - ) { - // if so, override default - $this->requireAdmin = $req; - } if (!isset($this->config['twitter.class']) || !$twitterClass = $this->config['twitter.class'] ) { @@ -150,14 +138,10 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract */ public function onCommandTweet($txt) { - echo "Tweet!\n"; $nick = $this->getEvent()->getNick(); if (!$this->twitteruser) { return; } - if ($this->requireAdmin && !$this->fromAdmin(true)) { - return; - } $source = $this->getEvent()->getSource(); if ($tweet = $this->twitter->sendTweet($txt)) { $this->doPrivmsg( @@ -173,7 +157,7 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract * Formats a Tweet into a message suitable for output * * @param object $tweet JSON-decoded tweet object from Twitter - * @param bool $includeUrl whether or not to include the URL in the + * @param bool $includeUrl whether or not to include the URL in the * formatted output * * @return string @@ -218,6 +202,5 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract // if we get this far, we haven't satisfied the URL, so bail: return false; - } } diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php index 7d3cc1de0..499cd9d55 100755..100644 --- a/plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php +++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php @@ -56,6 +56,30 @@ class Phergie_Plugin_Weather extends Phergie_Plugin_Abstract } /** + * Converts a temperature in Celsius to Fahrenheit. + * + * @param int $temp Temperature in Celsius + * + * @return int Temperature converted to Fahrenheit + */ + public function convertCelsiusToFahrenheit($temp) + { + return round(((((int) $temp * 9) / 5) + 32)); + } + + /** + * Converts a temperature in Fahrenheit to Celsius. + * + * @param int $temp Temperature in Fahrenheit + * + * @return int Temperature converted to Celsius + */ + public function convertFahrenheitToCelsius($temp) + { + return round(((((int) $temp - 32) * 5) / 9)); + } + + /** * Returns a weather report for a specified location. * * @param string $location Zip code or city/state/country specification @@ -107,18 +131,44 @@ class Phergie_Plugin_Weather extends Phergie_Plugin_Abstract $xml = $response->getContent(); $weather = 'Weather for ' . (string) $xml->loc->dnam . ' - '; - $weather .= 'Current temperature ' . - (string) $xml->cc->tmp . - (string) $xml->head->ut . ' / '; - if ((string) $xml->head->ut == 'F') { - $weather .= round(((((int) $xml->cc->tmp - 32) * 5) / 9)) . 'C'; - } else { - $weather .= round(((((int) $xml->cc->tmp * 9) / 5) + 32)) . 'F'; + switch ($xml->head->ut) { + case 'F': + $tempF = $xml->cc->tmp; + $tempC = $this->convertFahrenheitToCelsius($tempF); + break; + case 'C': + $tempC = $xml->cc->tmp; + $tempF = $this->convertCelsiusToFahrenheit($tempC); + break; + default: + $this->doNotice( + $this->event->getNick(), + 'ERROR: No scale information given.'); + break; + } + $r = $xml->cc->hmid; + $tempF2 = $tempF * $tempF; + $r2 = $r * $r; + $hiF = round( + -42.379 + + (2.04901523 * $tempF) + + (10.14333127 * $r) - + (.22475541 * $tempF * $r) - + (6.83783 * pow(10,-3) * $tempF2) - + (5.481717 * pow(10,-2) * $r2) + + (1.22874 * pow(10,-3) * $tempF2 * $r) + + (8.5282 * pow(10,-4) * $tempF * $r2) - + (1.99 * pow(10,-6) * $tempF2 * $r2) + ); + $hiC = $this->convertFahrenheitToCelsius($hiF); + $weather .= 'Temperature: ' . $tempF . 'F/' . $tempC . 'C'; + $weather .= ', Humidity: ' . (string) $xml->cc->hmid . '%'; + if ($hiF > $tempF || $hiC > $tempC) { + $weather .= ', Heat Index: ' . $hiF . 'F/' . $hiC . 'C'; } $weather .= - ', Relative humidity ' . (string) $xml->cc->hmid . '%' . - ', Current conditions ' . (string) $xml->cc->t . - ', Last update ' . (string) $xml->cc->lsup . + ', Conditions: ' . (string) $xml->cc->t . + ', Updated: ' . (string) $xml->cc->lsup . ' [ http://weather.com/weather/today/' . str_replace( array('(', ')', ',', ' '), |