summaryrefslogtreecommitdiff
path: root/plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php')
-rwxr-xr-xplugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php120
1 files changed, 120 insertions, 0 deletions
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php
new file mode 100755
index 000000000..99c69d873
--- /dev/null
+++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php
@@ -0,0 +1,120 @@
+<?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_Censor
+ * @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_Censor
+ */
+
+/**
+ * Facilitates censoring of event content or discardment of events
+ * containing potentially offensive phrases depending on the value of the
+ * configuration setting censor.mode ('off', 'censor', 'discard'). Also
+ * provides access to a web service for detecting censored words so that
+ * other plugins may optionally integrate and adjust behavior accordingly to
+ * prevent discardment of events.
+ *
+ * @category Phergie
+ * @package Phergie_Plugin_Censor
+ * @author Phergie Development Team <team@phergie.org>
+ * @license http://phergie.org/license New BSD License
+ * @link http://pear.phergie.org/package/Phergie_Plugin_Censor
+ * @uses extension soap
+ */
+class Phergie_Plugin_Censor extends Phergie_Plugin_Abstract
+{
+ /**
+ * SOAP client to interact with the CDYNE Profanity Filter API
+ *
+ * @var SoapClient
+ */
+ protected $soap;
+
+ /**
+ * Checks for dependencies.
+ *
+ * @return void
+ */
+ public function onLoad()
+ {
+ if (!extension_loaded('soap')) {
+ $this->fail('The PHP soap extension is required');
+ }
+
+ if (!in_array($this->config['censor.mode'], array('censor', 'discard'))) {
+ $this->plugins->removePlugin($this);
+ }
+ }
+
+ /**
+ * Returns a "clean" version of a given string.
+ *
+ * @param string $string String to clean
+ *
+ * @return string Cleaned string
+ */
+ public function cleanString($string)
+ {
+ if (empty($this->soap)) {
+ $this->soap = new SoapClient('http://ws.cdyne.com/ProfanityWS/Profanity.asmx?wsdl');
+ }
+ $params = array('Text' => $string);
+ $attempts = 0;
+ while ($attempts < 3) {
+ try {
+ $response = $this->soap->SimpleProfanityFilter($params);
+ break;
+ } catch (SoapFault $e) {
+ $attempts++;
+ sleep(1);
+ }
+ }
+ if ($attempts == 3) {
+ return $string;
+ }
+ return $response->SimpleProfanityFilterResult->CleanText;
+ }
+
+ /**
+ * Processes events before they are dispatched and either censors their
+ * content or discards them if they contain potentially offensive
+ * content.
+ *
+ * @return void
+ */
+ public function preDispatch()
+ {
+ $events = $this->events->getEvents();
+
+ foreach ($events as $event) {
+ switch ($event->getType()) {
+ case Phergie_Event_Request::TYPE_PRIVMSG:
+ case Phergie_Event_Request::TYPE_ACTION:
+ case Phergie_Event_Request::TYPE_NOTICE:
+ $text = $event->getArgument(1);
+ $clean = $this->cleanString($text);
+ if ($text != $clean) {
+ if ($this->config['censor.mode'] == 'censor') {
+ $event->setArgument(1, $clean);
+ } else {
+ $this->events->removeEvent($event);
+ }
+ }
+ break;
+ }
+ }
+ }
+}