forked from GNUsocial/gnu-social
Merged in changes to Phergie
This commit is contained in:
parent
8abef1fd65
commit
7caff948f6
@ -82,6 +82,22 @@ class Phergie_Config implements ArrayAccess
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
* Writes the values of the current configuration settings back to their
|
||||||
* originating files.
|
* originating files.
|
||||||
|
@ -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;
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +1,23 @@
|
|||||||
<?php
|
<?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
|
* Intercepts and responds to messages from the NickServ agent requesting that
|
||||||
@ -6,10 +25,18 @@
|
|||||||
*
|
*
|
||||||
* The password configuration setting should contain the password registered
|
* The password configuration setting should contain the password registered
|
||||||
* with NickServ for the nick used by the bot.
|
* 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
|
* @var string
|
||||||
*/
|
*/
|
||||||
@ -21,20 +48,25 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract {
|
|||||||
protected $identifyMessage;
|
protected $identifyMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes instance variables.
|
* Checks for dependencies and required configuration settings.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function onLoad() {
|
public function onLoad()
|
||||||
|
{
|
||||||
$this->getPluginHandler()->getPlugin('Command');
|
$this->getPluginHandler()->getPlugin('Command');
|
||||||
|
|
||||||
// Get the name of the NickServ bot, defaults to NickServ
|
// Get the name of the NickServ bot, defaults to NickServ
|
||||||
$this->botNick = $this->config['nickserv.botnick'];
|
$this->botNick = $this->config['nickserv.botnick'];
|
||||||
if (!$this->botNick) $this->botNick = 'NickServ';
|
if (!$this->botNick) {
|
||||||
|
$this->botNick = 'NickServ';
|
||||||
|
}
|
||||||
|
|
||||||
// Get the identify message
|
// Get the identify message
|
||||||
$this->identifyMessage = $this->config['nickserv.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
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function onNotice() {
|
public function onNotice()
|
||||||
|
{
|
||||||
$event = $this->event;
|
$event = $this->event;
|
||||||
if (strtolower($event->getNick()) == strtolower($this->botNick)) {
|
if (strtolower($event->getNick()) == strtolower($this->botNick)) {
|
||||||
$message = $event->getArgument(1);
|
$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
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function onQuit() {
|
public function onQuit()
|
||||||
$eventnick = $this->event->getNick();
|
{
|
||||||
|
$eventNick = $this->event->getNick();
|
||||||
$nick = $this->connection->getNick();
|
$nick = $this->connection->getNick();
|
||||||
if ($eventnick == $nick) {
|
if ($eventNick == $nick) {
|
||||||
$this->doNick($nick);
|
$this->doNick($nick);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,7 +114,8 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract {
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function onNick() {
|
public function onNick()
|
||||||
|
{
|
||||||
$event = $this->event;
|
$event = $this->event;
|
||||||
$connection = $this->connection;
|
$connection = $this->connection;
|
||||||
if ($event->getNick() == $connection->getNick()) {
|
if ($event->getNick() == $connection->getNick()) {
|
||||||
@ -93,7 +128,8 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract {
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function onDoGhostbust() {
|
public function onCommandGhostbust()
|
||||||
|
{
|
||||||
$event = $this->event;
|
$event = $this->event;
|
||||||
$user = $event->getNick();
|
$user = $event->getNick();
|
||||||
$conn = $this->connection;
|
$conn = $this->connection;
|
||||||
@ -102,42 +138,44 @@ class Phergie_Plugin_NickServ extends Phergie_Plugin_Abstract {
|
|||||||
if ($nick != $this->config['connections'][$conn->getHost()]['nick']) {
|
if ($nick != $this->config['connections'][$conn->getHost()]['nick']) {
|
||||||
$password = $this->config['nickserv.password'];
|
$password = $this->config['nickserv.password'];
|
||||||
if (!empty($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->doPrivmsg(
|
||||||
$this->botNick,
|
$this->botNick,
|
||||||
'GHOST ' . $nick . ' ' . $password,
|
'GHOST ' . $nick . ' ' . $password,
|
||||||
true
|
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
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function onResponse() {
|
public function onResponse()
|
||||||
|
{
|
||||||
if ($this->event->getCode() == Phergie_Event_Response::ERR_NICKNAMEINUSE) {
|
if ($this->event->getCode() == Phergie_Event_Response::ERR_NICKNAMEINUSE) {
|
||||||
$password = $this->config['nickserv.password'];
|
$password = $this->config['nickserv.password'];
|
||||||
if (!empty($password)) {
|
if (!empty($password)) {
|
||||||
$this->doPrivmsg(
|
$this->doPrivmsg(
|
||||||
$this->botNick,
|
$this->botNick,
|
||||||
'GHOST ' . $this->connection->getNick() . ' ' . $password,
|
'GHOST ' . $this->connection->getNick() . ' ' . $password
|
||||||
true
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
unset($password);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The server sent a KILL request, so quit the server
|
* Handle the server sending a KILL request.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function onKill() {
|
public function onKill()
|
||||||
|
{
|
||||||
$this->doQuit($this->event->getArgument(1));
|
$this->doQuit($this->event->getArgument(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
* @license http://phergie.org/license New BSD License
|
* @license http://phergie.org/license New BSD License
|
||||||
* @link http://pear.phergie.org/package/Phergie_Plugin_Tld
|
* @link http://pear.phergie.org/package/Phergie_Plugin_Tld
|
||||||
* @uses Phergie_Plugin_Http pear.phergie.org
|
* @uses Phergie_Plugin_Http pear.phergie.org
|
||||||
|
* @uses extension PDO
|
||||||
|
* @uses extension pdo_sqlite
|
||||||
*
|
*
|
||||||
* @pluginDesc Provides information for a top level domain.
|
* @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 {
|
try {
|
||||||
$dbFile = dirname(__FILE__) . '/Tld/tld.db';
|
$this->db = new PDO('sqlite:' . $dbFile);
|
||||||
$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);
|
$this->select = $this->db->prepare('
|
||||||
|
SELECT type, description
|
||||||
|
FROM tld
|
||||||
|
WHERE LOWER(tld) = LOWER(:tld)
|
||||||
|
');
|
||||||
|
|
||||||
// prepare a statement to populate the table with
|
$this->selectAll = $this->db->prepare('
|
||||||
// tld information
|
SELECT tld, type, description
|
||||||
$insert = $this->db->prepare(
|
FROM btld
|
||||||
'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'
|
|
||||||
);
|
|
||||||
} catch (PDOException $e) {
|
} catch (PDOException $e) {
|
||||||
|
$this->getPluginHandler()->removePlugin($this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,4 +166,3 @@ class Phergie_Plugin_Tld extends Phergie_Plugin_Abstract
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
68
plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php
Normal file
68
plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php
Normal file
@ -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);
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Phergie
|
* Phergie
|
||||||
*
|
*
|
||||||
* PHP version 5
|
* PHP version 5
|
||||||
*
|
*
|
||||||
@ -11,7 +11,7 @@
|
|||||||
* It is also available through the world-wide-web at this URL:
|
* It is also available through the world-wide-web at this URL:
|
||||||
* http://phergie.org/license
|
* http://phergie.org/license
|
||||||
*
|
*
|
||||||
* @category Phergie
|
* @category Phergie
|
||||||
* @package Phergie_Plugin_Twitter
|
* @package Phergie_Plugin_Twitter
|
||||||
* @author Phergie Development Team <team@phergie.org>
|
* @author Phergie Development Team <team@phergie.org>
|
||||||
* @copyright 2008-2010 Phergie Development Team (http://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.
|
* conventions.
|
||||||
*
|
*
|
||||||
* @link http://github.com/scoates/simpletweet
|
* @link http://github.com/scoates/simpletweet
|
||||||
@ -67,11 +67,6 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract
|
|||||||
*/
|
*/
|
||||||
protected $twitterpassword = null;
|
protected $twitterpassword = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* Allow only admins to tweet
|
|
||||||
*/
|
|
||||||
protected $requireAdmin = true;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register with the URL plugin, if possible
|
* Register with the URL plugin, if possible
|
||||||
*
|
*
|
||||||
@ -91,13 +86,6 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract
|
|||||||
*/
|
*/
|
||||||
public function onLoad()
|
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'])
|
if (!isset($this->config['twitter.class'])
|
||||||
|| !$twitterClass = $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)
|
public function onCommandTweet($txt)
|
||||||
{
|
{
|
||||||
echo "Tweet!\n";
|
|
||||||
$nick = $this->getEvent()->getNick();
|
$nick = $this->getEvent()->getNick();
|
||||||
if (!$this->twitteruser) {
|
if (!$this->twitteruser) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($this->requireAdmin && !$this->fromAdmin(true)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$source = $this->getEvent()->getSource();
|
$source = $this->getEvent()->getSource();
|
||||||
if ($tweet = $this->twitter->sendTweet($txt)) {
|
if ($tweet = $this->twitter->sendTweet($txt)) {
|
||||||
$this->doPrivmsg(
|
$this->doPrivmsg(
|
||||||
@ -173,7 +157,7 @@ class Phergie_Plugin_Twitter extends Phergie_Plugin_Abstract
|
|||||||
* Formats a Tweet into a message suitable for output
|
* Formats a Tweet into a message suitable for output
|
||||||
*
|
*
|
||||||
* @param object $tweet JSON-decoded tweet object from Twitter
|
* @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
|
* formatted output
|
||||||
*
|
*
|
||||||
* @return string
|
* @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:
|
// if we get this far, we haven't satisfied the URL, so bail:
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
70
plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php
Executable file → Normal file
70
plugins/Irc/extlib/phergie/Phergie/Plugin/Weather.php
Executable file → Normal file
@ -55,6 +55,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.
|
* Returns a weather report for a specified location.
|
||||||
*
|
*
|
||||||
@ -107,18 +131,44 @@ class Phergie_Plugin_Weather extends Phergie_Plugin_Abstract
|
|||||||
|
|
||||||
$xml = $response->getContent();
|
$xml = $response->getContent();
|
||||||
$weather = 'Weather for ' . (string) $xml->loc->dnam . ' - ';
|
$weather = 'Weather for ' . (string) $xml->loc->dnam . ' - ';
|
||||||
$weather .= 'Current temperature ' .
|
switch ($xml->head->ut) {
|
||||||
(string) $xml->cc->tmp .
|
case 'F':
|
||||||
(string) $xml->head->ut . ' / ';
|
$tempF = $xml->cc->tmp;
|
||||||
if ((string) $xml->head->ut == 'F') {
|
$tempC = $this->convertFahrenheitToCelsius($tempF);
|
||||||
$weather .= round(((((int) $xml->cc->tmp - 32) * 5) / 9)) . 'C';
|
break;
|
||||||
} else {
|
case 'C':
|
||||||
$weather .= round(((((int) $xml->cc->tmp * 9) / 5) + 32)) . 'F';
|
$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 .=
|
$weather .=
|
||||||
', Relative humidity ' . (string) $xml->cc->hmid . '%' .
|
', Conditions: ' . (string) $xml->cc->t .
|
||||||
', Current conditions ' . (string) $xml->cc->t .
|
', Updated: ' . (string) $xml->cc->lsup .
|
||||||
', Last update ' . (string) $xml->cc->lsup .
|
|
||||||
' [ http://weather.com/weather/today/' .
|
' [ http://weather.com/weather/today/' .
|
||||||
str_replace(
|
str_replace(
|
||||||
array('(', ')', ',', ' '),
|
array('(', ')', ',', ' '),
|
||||||
|
Loading…
Reference in New Issue
Block a user