127 lines
3.3 KiB
PHP
Executable File
127 lines
3.3 KiB
PHP
Executable File
<?php
|
|
|
|
/*
|
|
* Plugin Name: QuickSpamFilter
|
|
* Version: 3.5.1
|
|
* Plugin URI: https://www.flatpress.org
|
|
* Author: FlatPress
|
|
* Author URI: https://www.flatpress.org
|
|
* Description: Block comments by "bad" words. Part of the standard distribution.
|
|
*/
|
|
|
|
/**
|
|
* This plugin denies comments when they're containing "bad words",
|
|
* e.g.
|
|
* "href" (which indexes links)., etc.
|
|
*
|
|
* @global $smarty
|
|
* @param boolean $bool
|
|
* @param string $contents
|
|
* The comment
|
|
* @return unknown
|
|
*/
|
|
function plugin_qspam_validate($bool, $contents) {
|
|
if (!$bool) {
|
|
return false;
|
|
}
|
|
$qscfg = plugin_getoptions('qspam');
|
|
// We're looking for these words:
|
|
$BAN_WORDS = '';
|
|
if (isset($qscfg ['wordlist'])) {
|
|
$BAN_WORDS = $qscfg ['wordlist'];
|
|
} else {
|
|
// rudimentary ban of links
|
|
$BAN_WORDS = array(
|
|
'href',
|
|
'[url'
|
|
);
|
|
}
|
|
$qscfg ['number'] = isset($qscfg ['number']) ? $qscfg ['number'] : 1;
|
|
$txt = strtolower(trim($contents ['content']));
|
|
$count = 0;
|
|
while ($w = array_pop($BAN_WORDS)) {
|
|
$count += substr_count($txt, strtolower($w));
|
|
}
|
|
if ($count >= $qscfg ['number']) {
|
|
global $smarty;
|
|
$lang = lang_load('plugin:qspam');
|
|
$smarty->assign('error', array(
|
|
$lang ['plugin'] ['qspam'] ['error']
|
|
));
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
add_action('comment_validate', 'plugin_qspam_validate', 5, 2);
|
|
|
|
if (class_exists('AdminPanelAction')) {
|
|
|
|
/**
|
|
* Provides an admin panel entry for QuickSpam setup.
|
|
*/
|
|
class admin_plugin_qspam extends AdminPanelAction {
|
|
|
|
var $langres = 'plugin:qspam';
|
|
|
|
/**
|
|
* Initializes this panel.
|
|
*/
|
|
function setup() {
|
|
$this->smarty->assign('admin_resource', "plugin:qspam/admin.plugin.qspam");
|
|
}
|
|
|
|
/**
|
|
* Setups the default panel.
|
|
*/
|
|
function main() {
|
|
$qscfg = plugin_getoptions('qspam');
|
|
$qscfg ['wordlist'] = isset($qscfg ['wordlist']) && is_array($qscfg ['wordlist']) ? implode("\n", $qscfg ['wordlist']) : '';
|
|
$qscfg ['number'] = isset($qscfg ['number']) ? $qscfg ['number'] : 1;
|
|
$this->smarty->assign('qscfg', $qscfg);
|
|
}
|
|
|
|
/**
|
|
* Will be executed when the QSF configuration is send.
|
|
*
|
|
* @return int
|
|
*/
|
|
function onsubmit($data = null) {
|
|
if ($_POST ['qs-wordlist']) {
|
|
$wordlist = isset($_POST ['qs-wordlist']) ? stripslashes($_POST ['qs-wordlist']) : '';
|
|
$wordlist = str_replace("\r", "\n", $wordlist);
|
|
// DMKE: Works neither recursive correct nor in a loop... *grrr*
|
|
// $wordlist = str_replace("\n\n", "\n", $wordlist);
|
|
$wordlist = explode("\n", $wordlist);
|
|
$wordlist = array_filter($wordlist, array(
|
|
$this,
|
|
'_array_filter'
|
|
));
|
|
$number = isset($_POST ['qs-number']) && is_numeric($_POST ['qs-number']) ? (int) $_POST ['qs-number'] : 1;
|
|
plugin_addoption('qspam', 'wordlist', $wordlist);
|
|
plugin_addoption('qspam', 'number', $number);
|
|
plugin_saveoptions('qspam');
|
|
$this->smarty->assign('success', 1);
|
|
} else {
|
|
$this->smarty->assign('success', -1);
|
|
}
|
|
return 2;
|
|
}
|
|
|
|
/**
|
|
* Array filter callback function.
|
|
* Culls empty array values.
|
|
* Life is hell ._.
|
|
*
|
|
* @param string $str
|
|
* @return boolean
|
|
*/
|
|
function _array_filter($str) {
|
|
return strlen(trim($str)) > 0;
|
|
}
|
|
|
|
}
|
|
admin_addpanelaction('plugin', 'qspam', true);
|
|
}
|
|
|
|
?>
|