diff options
Diffstat (limited to 'plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php')
-rwxr-xr-x | plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php | 605 |
1 files changed, 605 insertions, 0 deletions
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php new file mode 100755 index 000000000..b7105ecdb --- /dev/null +++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Abstract.php @@ -0,0 +1,605 @@ +<?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 + */ + +/** + * Base class for plugins to provide event handler stubs and commonly needed + * functionality. + * + * @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 + */ +abstract class Phergie_Plugin_Abstract +{ + /** + * Current configuration handler + * + * @var Phergie_Config + */ + protected $config; + + /** + * Plugin handler used to provide access to other plugins + * + * @var Phergie_Plugin_Handler + */ + protected $plugins; + + /** + * Current event handler instance for outgoing events + * + * @var Phergie_Event_Handler + */ + protected $events; + + /** + * Current connection instance + * + * @var Phergie_Connection + */ + protected $connection; + + /** + * Current incoming event being handled + * + * @var Phergie_Event_Request|Phergie_Event_Response + */ + protected $event; + + /** + * Plugin short name + * + * @var string + */ + protected $name; + + /** + * Returns the short name for the plugin based on its class name. + * + * @return string + */ + public function getName() + { + if (empty($this->name)) { + $this->name = substr(strrchr(get_class($this), '_'), 1); + } + return $this->name; + } + + /** + * Sets the short name for the plugin. + * + * @param string $name Plugin short name + * + * @return Phergie_Plugin_Abstract Provides a fluent interface + */ + public function setName($name) + { + $this->name = (string) $name; + return $this; + } + + /** + * Indicates that the plugin failed to load due to an unsatisfied + * runtime requirement, such as a missing dependency. + * + * @param string $message Error message to provide more information + * about the reason for the failure + * + * @return Phergie_Plugin_Abstract Provides a fluent interface + * @throws Phergie_Plugin_Exception Always + */ + protected function fail($message) + { + throw new Phergie_Plugin_Exception( + $message, + Phergie_Plugin_Exception::ERR_REQUIREMENT_UNSATISFIED + ); + } + + /** + * Sets the current configuration handler. + * + * @param Phergie_Config $config Configuration handler + * + * @return Phergie_Plugin_Abstract Provides a fluent interface + */ + public function setConfig(Phergie_Config $config) + { + $this->config = $config; + return $this; + } + + /** + * Returns the current configuration handler or the value of a single + * setting from it. + * + * @param string $name Optional name of a setting for which the value + * should be returned instead of the entire configuration handler + * @param mixed $default Optional default value to return if no value + * is set for the setting indicated by $name + * + * @return Phergie_Config|mixed Configuration handler or value of the + * setting specified by $name + * @throws Phergie_Plugin_Exception No configuration handler has been set + */ + public function getConfig($name = null, $default = null) + { + if (empty($this->config)) { + throw new Phergie_Plugin_Exception( + 'Configuration handler cannot be accessed before one is set', + Phergie_Plugin_Exception::ERR_NO_CONFIG_HANDLER + ); + } + if (!is_null($name)) { + if (!isset($this->config[$name])) { + return $default; + } + return $this->config[$name]; + } + return $this->config; + } + + /** + * Sets the current plugin handler. + * + * @param Phergie_Plugin_Handler $handler Plugin handler + * + * @return Phergie_Plugin_Abstract Provides a fluent interface + */ + public function setPluginHandler(Phergie_Plugin_Handler $handler) + { + $this->plugins = $handler; + return $this; + } + + /** + * Returns the current plugin handler. + * + * @return Phergie_Plugin_Handler + * @throws Phergie_Plugin_Exception No plugin handler has been set + */ + public function getPluginHandler() + { + if (empty($this->plugins)) { + throw new Phergie_Plugin_Exception( + 'Plugin handler cannot be accessed before one is set', + Phergie_Plugin_Exception::ERR_NO_PLUGIN_HANDLER + ); + } + return $this->plugins; + } + + /** + * Sets the current event handler. + * + * @param Phergie_Event_Handler $handler Event handler + * + * @return Phergie_Plugin_Abstract Provides a fluent interface + */ + public function setEventHandler(Phergie_Event_Handler $handler) + { + $this->events = $handler; + return $this; + } + + /** + * Returns the current event handler. + * + * @return Phergie_Event_Handler + * @throws Phergie_Plugin_Exception No event handler has been set + */ + public function getEventHandler() + { + if (empty($this->events)) { + throw new Phergie_Plugin_Exception( + 'Event handler cannot be accessed before one is set', + Phergie_Plugin_Exception::ERR_NO_EVENT_HANDLER + ); + } + return $this->events; + } + + /** + * Sets the current connection. + * + * @param Phergie_Connection $connection Connection + * + * @return Phergie_Plugin_Abstract Provides a fluent interface + */ + public function setConnection(Phergie_Connection $connection) + { + $this->connection = $connection; + return $this; + } + + /** + * Returns the current event connection. + * + * @return Phergie_Connection + * @throws Phergie_Plugin_Exception No connection has been set + */ + public function getConnection() + { + if (empty($this->connection)) { + throw new Phergie_Plugin_Exception( + 'Connection cannot be accessed before one is set', + Phergie_Plugin_Exception::ERR_NO_CONNECTION + ); + } + return $this->connection; + } + + /** + * Sets the current incoming event to be handled. + * + * @param Phergie_Event_Request|Phergie_Event_Response $event Event + * + * @return Phergie_Plugin_Abstract Provides a fluent interface + */ + public function setEvent($event) + { + $this->event = $event; + return $this; + } + + /** + * Returns the current incoming event to be handled. + * + * @return Phergie_Event_Request|Phergie_Event_Response + */ + public function getEvent() + { + if (empty($this->event)) { + throw new Phergie_Plugin_Exception( + 'Event cannot be accessed before one is set', + Phergie_Plugin_Exception::ERR_NO_EVENT + ); + } + return $this->event; + } + + /** + * Provides do* methods with signatures identical to those of + * Phergie_Driver_Abstract but that queue up events to be dispatched + * later. + * + * @param string $name Name of the method called + * @param array $args Arguments passed in the call + * + * @return mixed + */ + public function __call($name, array $args) + { + $subcmd = substr($name, 0, 2); + if ($subcmd == 'do') { + $type = strtolower(substr($name, 2)); + $this->getEventHandler()->addEvent($this, $type, $args); + } else if ($subcmd != 'on') { + throw new Phergie_Plugin_Exception( + 'Called invalid method ' . $name . ' in ' . get_class($this), + Phergie_Plugin_Exception::ERR_INVALID_CALL + ); + } + } + + /** + * Handler for when the plugin is initially loaded - useful for checking + * runtime dependencies or performing any setup necessary for the plugin + * to function properly such as initializing a database. + * + * @return void + */ + public function onLoad() + { + } + + /** + * Handler for when the bot initially connects to a server. + * + * @return void + */ + public function onConnect() + { + } + + /** + * Handler for each tick, a single iteration of the continuous loop + * executed by the bot to receive, handle, and send events - useful for + * repeated execution of tasks on a time interval. + * + * @return void + */ + public function onTick() + { + } + + /** + * Handler for when any event is received but has not yet been dispatched + * to the plugin handler method specific to its event type. + * + * @return bool|null|void FALSE to short-circuit further event + * processing, TRUE or NULL otherwise + */ + public function preEvent() + { + } + + /** + * Handler for after plugin processing of an event has concluded but + * before any events triggered in response by plugins are sent to the + * server - useful for modifying outgoing events before they are sent. + * + * @return void + */ + public function preDispatch() + { + } + + /** + * Handler for after any events triggered by plugins in response to a + * received event are sent to the server. + * + * @return void + */ + public function postDispatch() + { + } + + /** + * Handler for when the server prompts the client for a nick. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_1_2 + */ + public function onNick() + { + } + + /** + * Handler for when a user obtains operator privileges. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_1_5 + */ + public function onOper() + { + } + + /** + * Handler for when the client session is about to be terminated. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_1_6 + */ + public function onQuit() + { + } + + /** + * Handler for when a user joins a channel. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_1 + */ + public function onJoin() + { + } + + /** + * Handler for when a user leaves a channel. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_2 + */ + public function onPart() + { + } + + /** + * Handler for when a user or channel mode is changed. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_3 + */ + public function onMode() + { + } + + /** + * Handler for when a channel topic is viewed or changed. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_4 + */ + public function onTopic() + { + } + + /** + * Handler for when a message is received from a channel or user. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_4_1 + */ + public function onPrivmsg() + { + } + + /** + * Handler for when the bot receives a CTCP ACTION request. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html#4.4 + */ + public function onAction() + { + } + + /** + * Handler for when a notice is received. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_4_2 + */ + public function onNotice() + { + } + + /** + * Handler for when a user is kicked from a channel. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_8 + */ + public function onKick() + { + } + + /** + * Handler for when the bot receives a ping event from a server, at + * which point it is expected to respond with a pong request within + * a short period else the server may terminate its connection. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_6_2 + */ + public function onPing() + { + } + + /** + * Handler for when the bot receives a CTCP TIME request. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html#4.6 + */ + public function onTime() + { + } + + /** + * Handler for when the bot receives a CTCP VERSION request. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html#4.1 + */ + public function onVersion() + { + } + + /** + * Handler for when the bot receives a CTCP PING request. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html#4.2 + */ + public function onCtcpPing() + { + } + + /** + * Handler for when the bot receives a CTCP request of an unknown type. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html + */ + public function onCtcp() + { + } + + /** + * Handler for when a reply is received for a CTCP PING request sent by + * the bot. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html#4.2 + */ + public function onPingReply() + { + } + + /** + * Handler for when a reply is received for a CTCP TIME request sent by + * the bot. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html#4.6 + */ + public function onTimeReply() + { + } + + /** + * Handler for when a reply is received for a CTCP VERSION request sent + * by the bot. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html#4.1 + */ + public function onVersionReply() + { + } + + /** + * Handler for when a reply received for a CTCP request of an unknown + * type. + * + * @return void + * @link http://www.invlogic.com/irc/ctcp.html + */ + public function onCtcpReply() + { + } + + /** + * Handler for when the bot receives a kill request from a server. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_6_1 + */ + public function onKill() + { + } + + /** + * Handler for when the bot receives an invitation to join a channel. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter4.html#c4_2_7 + */ + public function onInvite() + { + } + + /** + * Handler for when a server response is received to a command issued by + * the bot. + * + * @return void + * @link http://irchelp.org/irchelp/rfc/chapter6.html + */ + public function onResponse() + { + } +} |