0byt3m1n1-V2
Path:
/
home
/
magalijoj
/
www
/
blog
/
plugins
/
antispam
/
filters
/
[
Home
]
File: class.dc.filter.words.php
<?php # ***** BEGIN LICENSE BLOCK ***** # This is Antispam, a plugin for DotClear. # Copyright (c) 2007 Alain Vagner and contributors. All rights # reserved. # # DotClear is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # DotClear 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DotClear; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ***** END LICENSE BLOCK ***** class dcFilterWords extends dcSpamFilter { public $has_gui = true; public $name = 'Bad Words'; private $style_list = 'height: 200px; overflow: auto; margin-bottom: 1em; '; private $style_p = 'margin: 1px 0 0 0; padding: 0.2em 0.5em; '; private $style_global = 'background: #ccff99; '; private $con; private $table; public function __construct(&$core) { parent::__construct($core); $this->con =& $core->con; $this->table = $core->prefix.'spamrule'; } protected function setInfo() { $this->description = __('Words Blacklist'); } public function getStatusMessage($status,$comment_id) { return sprintf(__('Filtered by %1$s with word %2$s.'),$this->guiLink(),'<em>'.$status.'</em>'); } public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) { $str = $author.' '.$email.' '.$site.' '.$content; $rs = $this->getRules(); while ($rs->fetch()) { $word = $rs->rule_content; if (substr($word,0,1) == '/' && substr($word,-1,1) == '/') { $reg = substr(substr($word,1),0,-1); } else { $reg = preg_quote($word); $reg = '(^|\s+|>|<)'.$reg.'(>|<|\s+|\.|$)'; } if (preg_match('/'.$reg.'/msiu',$str)) { $status = $word; return true; } } } public function gui($url) { $core =& $this->core; # Create list if (!empty($_POST['createlist'])) { try { $this->defaultWordsList(); http::redirect($url.'&list=1'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Adding a word if (!empty($_POST['swa'])) { $globalsw = !empty($_POST['globalsw']) && $core->auth->isSuperAdmin(); try { $this->addRule($_POST['swa'],$globalsw); http::redirect($url.'&added=1'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Removing spamwords if (!empty($_POST['swd']) && is_array($_POST['swd'])) { try { $this->removeRule($_POST['swd']); http::redirect($url.'&removed=1'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } /* DISPLAY ---------------------------------------------- */ $res = ''; if (!empty($_GET['list'])) { $res .= '<p class="message">'.__('Words have been successfully added.').'</p>'; } if (!empty($_GET['added'])) { $res .= '<p class="message">'.__('Word has been successfully added.').'</p>'; } if (!empty($_GET['removed'])) { $res .= '<p class="message">'.__('Words have been successfully removed.').'</p>'; } $res .= '<form action="'.html::escapeURL($url).'" method="post">'. '<fieldset><legend>'.__('Add a word').'</legend>'. '<p>'.form::field('swa',20,128).' '; if ($core->auth->isSuperAdmin()) { $res .= '<label class="classic">'.form::checkbox('globalsw',1).' '. __('Global word').'</label> '; } $res .= $core->formNonce(). '<input type="submit" value="'.__('Add').'"/></p>'. '</fieldset>'. '</form>'; $rs = $this->getRules(); if ($rs->isEmpty()) { $res .= '<p><strong>'.__('No word in list.').'</strong></p>'; } else { $res .= '<form action="'.html::escapeURL($url).'" method="post">'. '<fieldset><legend>' . __('List') . '</legend>'. '<div style="'.$this->style_list.'">'; while ($rs->fetch()) { $disabled_word = false; $p_style = $this->style_p; if (!$rs->blog_id) { $disabled_word = !$core->auth->isSuperAdmin(); $p_style .= $this->style_global; } $res .= '<p style="'.$p_style.'"><label class="classic">'. form::checkbox(array('swd[]'),$rs->rule_id,false,'','',$disabled_word).' '. html::escapeHTML($rs->rule_content). '</label></p>'; } $res .= '</div>'. '<p>'.form::hidden(array('spamwords'),1). $core->formNonce(). '<input class="submit" type="submit" value="' . __('Delete selected words') . '"/></p>'. '</fieldset></form>'; } if ($core->auth->isSuperAdmin()) { $res .= '<form action="'.html::escapeURL($url).'" method="post">'. '<p><input type="submit" value="'.__('Create default wordlist').'" />'. form::hidden(array('spamwords'),1). form::hidden(array('createlist'),1). $core->formNonce().'</p>'. '</form>'; } return $res; } private function getRules() { $strReq = 'SELECT rule_id, blog_id, rule_content '. 'FROM '.$this->table.' '. "WHERE rule_type = 'word' ". "AND ( blog_id = '".$this->con->escape($this->core->blog->id)."' ". "OR blog_id IS NULL ) ". 'ORDER BY blog_id ASC, rule_content ASC '; return $this->con->select($strReq); } private function addRule($content,$general=false) { $strReq = 'SELECT rule_id FROM '.$this->table.' '. "WHERE rule_type = 'word' ". "AND rule_content = '".$this->con->escape($content)."' "; $rs = $this->con->select($strReq); if (!$rs->isEmpty()) { throw new Exception(__('This word exists')); } $rs = $this->con->select('SELECT MAX(rule_id) FROM '.$this->table); $id = (integer) $rs->f(0) + 1; $cur = $this->con->openCursor($this->table); $cur->rule_id = $id; $cur->rule_type = 'word'; $cur->rule_content = (string) $content; if ($general && $this->core->auth->isSuperAdmin()) { $cur->blog_id = null; } else { $cur->blog_id = $this->core->blog->id; } $cur->insert(); } private function removeRule($ids) { $strReq = 'DELETE FROM '.$this->table.' '; if (is_array($ids)) { foreach ($ids as &$v) { $v = (integer) $v; } $strReq .= 'WHERE rule_id IN ('.implode(',',$ids).') '; } else { $ids = (integer) $ids; $strReq .= 'WHERE rule_id = '.$ids.' '; } if (!$this->core->auth->isSuperAdmin()) { $strReq .= "AND blog_id = '".$this->con->escape($this->core->blog->id)."' "; } $this->con->execute($strReq); } public function defaultWordsList() { $words = array( '/-credit(\s+|$)/', '/-digest(\s+|$)/', '/-loan(\s+|$)/', '/-online(\s+|$)/', '4u', 'adipex', 'advicer', 'amazing', 'ambien', 'astonishing', 'baccarat', 'baccarrat', 'blackjack', 'bllogspot', 'bolobomb', 'booker', 'byob', 'car-rental-e-site', 'car-rentals-e-site', 'carisoprodol', 'cash', 'casino', 'casinos', 'chatroom', 'cialis', 'craps', 'credit-card', 'credit-report-4u', 'cwas', 'cyclen', 'cyclobenzaprine', 'dating-e-site', 'day-trading', 'debt', 'digest-', 'discount', 'discreetordering', 'duty-free', 'dutyfree', 'enjoyed', 'estate', 'favourits', 'fioricet', 'flowers-leading-site', 'freenet', 'freenet-shopping', 'funny', 'gambling', 'gamias', 'health-insurancedeals-4u', 'helpful', 'holdem', 'holdempoker', 'holdemsoftware', 'holdemtexasturbowilson', 'hotel-dealse-site', 'hotele-site', 'hotelse-site', 'husband', 'incest', 'insurance-quotesdeals-4u', 'insurancedeals-4u', 'interesting', 'jrcreations', 'levitra', 'macinstruct', 'mortgage', 'nice site', 'online-gambling', 'onlinegambling-4u', 'ottawavalleyag', 'ownsthis', 'palm-texas-holdem-game', 'paxil', 'pharmacy', 'phentermine', 'pills', 'poker', 'poker-chip', 'poze', 'prescription', 'rarehomes', 'refund', 'rental-car-e-site', 'roulette', 'shemale', 'slot', 'slot-machine', 'soma', 'taboo', 'tamiflu', 'teen', 'texas-holdem', 'thorcarlson', 'top-e-site', 'top-site', 'tramadol', 'trim-spa', 'ultram', 'v1h', 'vacuum', 'valeofglamorganconservatives', 'viagra', 'vicodin', 'vioxx', 'xanax', 'zolus' ); foreach ($words as $w) { try { $this->addRule($w,true); } catch (Exception $e) {} } } } ?>
©
2018.