static function merge() { $newHolder = new AbuseFilterVariableHolder(); foreach (func_get_args() as $addHolder) { $newHolder->addHolder($addHolder); } return $newHolder; }
public static function getEditVarsFromRCRow($row) { $vars = new AbuseFilterVariableHolder(); $title = Title::makeTitle($row->rc_namespace, $row->rc_title); if ($row->rc_user) { $user = User::newFromName($row->rc_user_text); } else { $user = new User(); $user->setName($row->rc_user_text); } $vars->addHolder(self::generateUserVars($user)); $vars->addHolder(self::generateTitleVars($title, 'ARTICLE')); $vars->setVar('ACTION', 'edit'); $vars->setVar('SUMMARY', $row->rc_comment); $vars->setVar('minor_edit', $row->rc_minor); $vars->setLazyLoadVar('new_wikitext', 'revision-text-by-id', array('revid' => $row->rc_this_oldid)); if ($row->rc_last_oldid) { $vars->setLazyLoadVar('old_wikitext', 'revision-text-by-id', array('revid' => $row->rc_last_oldid)); } else { $vars->setVar('old_wikitext', ''); } $vars->addHolder(self::getEditVars($title, $row->rc_this_oldid, $row->rc_last_oldid)); return $vars; }
public static function onUploadVerification($saveName, $tempName, &$error) { $vars = new AbuseFilterVariableHolder(); global $wgUser; $title = Title::makeTitle(NS_FILE, $saveName); $vars->addHolder(AbuseFilterVariableHolder::merge(AbuseFilter::generateUserVars($wgUser), AbuseFilter::generateTitleVars($title, 'FILE'))); $vars->setVar('ACTION', 'upload'); $vars->setVar('file_sha1', sha1_file($tempName)); // TODO share with save $filter_result = AbuseFilter::filterAction($vars, $title); if (is_string($filter_result)) { $error = $filter_result; } return $filter_result == '' || $filter_result === true; }
/** * Check for abusive or spammy content * * Check the following in sequence (cheapest processing to most expensive, * returning if we get a hit): * 1) Respect $wgSpamRegex * 2) Check SpamBlacklist * 3) Check AbuseFilter * * @param $value string the text to check * @param $pageId int the page ID */ private function findAbuse(&$value, $pageId) { // Respect $wgSpamRegex global $wgSpamRegex; if (is_array($wgSpamRegex) && count($wgSpamRegex) > 0 || is_string($wgSpamRegex) && strlen($wgSpamRegex) > 0) { // In older versions, $wgSpamRegex may be a single string rather than // an array of regexes, so make it compatible. $regexes = (array) $wgSpamRegex; foreach ($regexes as $regex) { if (preg_match($regex, $value)) { return true; } } } // Create a fake title so we can pretend this is an article edit $title = Title::newFromText('__article_feedback_5__'); // Check SpamBlacklist, if installed if (function_exists('wfSpamBlacklistObject')) { $spam = wfSpamBlacklistObject(); $ret = $spam->filter($title, $value, ''); if ($ret !== false) { return true; } } // Check AbuseFilter, if installed if (class_exists('AbuseFilter')) { global $wgUser; $vars = new AbuseFilterVariableHolder(); $vars->addHolder(AbuseFilter::generateUserVars($wgUser)); $vars->addHolder(AbuseFilter::generateTitleVars($title, 'FEEDBACK')); $vars->setVar('SUMMARY', 'Article Feedback 5'); $vars->setVar('ACTION', 'feedback'); $vars->setVar('old_wikitext', ''); $vars->setVar('new_wikitext', $value); $vars->addHolder(AbuseFilter::getEditVars($title)); $filter_result = AbuseFilter::filterAction($vars, $title); return $filter_result != '' && $filter_result !== true; } return false; }