forked from GNUsocial/gnu-social
Updated phergie library
This commit is contained in:
108
plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php
Executable file
108
plugins/Irc/extlib/phergie/Phergie/Plugin/Censor.php
Executable file
@@ -0,0 +1,108 @@
|
||||
<?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);
|
||||
$response = $this->soap->SimpleProfanityFilter($params);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user