/** * Handler for the UploadVerifyFile hook * * @param $upload UploadBase * @param $mime * @param $error array * * @return bool */ public static function onUploadVerifyFile($upload, $mime, &$error) { global $wgUser, $wgVersion; $vars = new AbuseFilterVariableHolder(); $title = $upload->getTitle(); if (!$title) { // If there's no valid title assigned to the upload // it wont proceed anyway, so no point in filtering it. return true; } $vars->addHolders(AbuseFilter::generateUserVars($wgUser), AbuseFilter::generateTitleVars($title, 'FILE')); $vars->setVar('ACTION', 'upload'); // We us the hexadecimal version of the file sha1 if (version_compare($wgVersion, '1.21', '>=')) { // Use UploadBase::getTempFileSha1Base36 so that we don't have to calculate the sha1 sum again $sha1 = wfBaseConvert($upload->getTempFileSha1Base36(), 36, 16, 40); } else { // UploadBase::getTempFileSha1Base36 wasn't public until 1.21 $sha1 = sha1_file($upload->getTempPath()); } $vars->setVar('file_sha1', $sha1); $filter_result = AbuseFilter::filterAction($vars, $title); if (!$filter_result->isOK()) { $error = $filter_result->getErrorsArray(); $error = $error[0]; } return $filter_result->isOK(); }
/** * @param $row * @return AbuseFilterVariableHolder */ 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->addHolders(self::generateUserVars($user), 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->addHolders(self::getEditVars($title)); return $vars; }
/** * @param $vars */ public function setVars($vars) { if (is_array($vars)) { foreach ($vars as $name => $var) { $this->setVar($name, $var); } } elseif ($vars instanceof AbuseFilterVariableHolder) { $this->mVars->addHolders($vars); } }