Revision: 48563
Author: werdna
Date: 2009-03-19 02:05:58 +0000 (Thu, 19 Mar 2009)
Log Message:
-----------
Load link vars from DB on edit. Includes some tracking of context, so it knows
whether to check the DB or the parser.
Modified Paths:
--------------
trunk/extensions/AbuseFilter/AbuseFilter.class.php
trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php
Modified: trunk/extensions/AbuseFilter/AbuseFilter.class.php
===================================================================
--- trunk/extensions/AbuseFilter/AbuseFilter.class.php 2009-03-19 01:09:39 UTC
(rev 48562)
+++ trunk/extensions/AbuseFilter/AbuseFilter.class.php 2009-03-19 02:05:58 UTC
(rev 48563)
@@ -97,8 +97,8 @@
'article_restrictions_edit' => 'restrictions-edit',
'article_restrictions_move' => 'restrictions-move',
'article_recent_contributors' => 'recent-contributors',
- 'old_text' => 'old-text-stripped',
- 'old_html' => 'old-html',
+# 'old_text' => 'old-text-stripped', ## Disabled,
performance
+# 'old_html' => 'old-html', ## Disabled, performance
'old_links' => 'old-links',
'minor_edit' => 'minor-edit',
),
@@ -342,6 +342,8 @@
} catch (Exception $excep) {
// Sigh.
$result = false;
+
+ wfDebugLog( 'AbuseFilter', "AbuseFilter parser error:
".$excep->getMessage()."\n" );
if (!$ignoreError) {
throw $excep;
@@ -506,6 +508,9 @@
// Add vars from extensions
wfRunHooks( 'AbuseFilter-filterAction', array( &$vars, $title )
);
+
+ // Set context
+ $vars->setVar( 'context', 'filter' );
$dbr = wfGetDB( DB_SLAVE );
@@ -1184,12 +1189,14 @@
public static function getVarsFromRCRow( $row ) {
if ($row->rc_this_oldid) {
// It's an edit.
- return self::getEditVarsFromRCRow( $row );
+ $vars = self::getEditVarsFromRCRow( $row );
} elseif ( $row->rc_log_type == 'move' ) {
- return self::getMoveVarsFromRCRow( $row );
+ $vars = self::getMoveVarsFromRCRow( $row );
} elseif ( $row->rc_log_type == 'newusers' ) {
- return self::getCreateVarsFromRCRow( $row );
+ $vars = self::getCreateVarsFromRCRow( $row );
}
+ $vars->setVar( 'context', 'generated' );
+ return $vars;
}
public static function getCreateVarsFromRCRow( $row ) {
@@ -1287,7 +1294,7 @@
'title' => $title->getText(),
'text-var' => 'new_wikitext'
) );
- $vars->setLazyLoadVar( 'old_links',
'links-from-wikitext-nonedit',
+ $vars->setLazyLoadVar( 'old_links',
'links-from-wikitext-or-database',
array(
'namespace' => $title->getNamespace(),
'title' => $title->getText(),
Modified: trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php
===================================================================
--- trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php 2009-03-19
01:09:39 UTC (rev 48562)
+++ trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php 2009-03-19
02:05:58 UTC (rev 48563)
@@ -2,6 +2,7 @@
class AbuseFilterVariableHolder {
var $mVars = array();
+ static $varBlacklist = array( 'context' );
function setVar( $variable, $datum ) {
$variable = strtolower( $variable );
@@ -49,13 +50,20 @@
$this->mVars = array_merge( $this->mVars, $addHolder->mVars );
}
+ function __wakeup() {
+ // Reset the context.
+ $this->setVar( 'context', 'stored' );
+ }
+
function exportAllVars() {
$allVarNames = array_keys( $this->mVars );
$exported = array();
foreach( $allVarNames as $varName ) {
- $exported[$varName] = $this->getVar( $varName
)->toString();
+ if (!in_array( $varName, self::$varBlacklist ) )
+ $exported[$varName] = $this->getVar( $varName
)->toString();
}
+
return $exported;
}
@@ -121,6 +129,21 @@
return self::$articleCache["$namespace:$title"];
}
+ static function getLinksFromDB( $article ) {
+ // Stolen from ConfirmEdit
+ $id = $article->getId();
+ if (!$id) return array();
+
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select( 'externallinks', array( 'el_to' ),
+ array( 'el_from' => $id ), __METHOD__ );
+ $links = array();
+ while ( $row = $dbr->fetchObject( $res ) ) {
+ $links[] = $row->el_to;
+ }
+ return $links;
+ }
+
function compute( $vars ) {
$parameters = $this->mParameters;
$result = null;
@@ -146,7 +169,8 @@
$result = implode( "\n", $interest_lines );
break;
case 'links-from-wikitext':
- $article = self::articleFromTitle(
$parameters['namespace'], $parameters['title'] );
+ $article = self::articleFromTitle(
$parameters['namespace'],
+
$parameters['title'] );
$textVar = $parameters['text-var'];
$new_text = $vars->getVar( $textVar
)->toString();
@@ -154,13 +178,22 @@
$links = array_keys(
$editInfo->output->getExternalLinks() );
$result = implode( "\n", $links );
break;
- case 'links-from-wikitext-nonedit':
- $article = self::articleFromTitle(
$parameters['namespace'], $parameters['title'] );
- $textVar = $parameters['text-var'];
+ case 'links-from-wikitext-or-database':
+ $article = self::articleFromTitle(
$parameters['namespace'],
+
$parameters['title'] );
- $wikitext = $vars->getVar( $textVar
)->toString();
- $editInfo = $this->parseNonEditWikitext(
$wikitext, $article );
- $links = array_keys(
$editInfo->output->getExternalLinks() );
+ if ($vars->getVar( 'context' )->toString() ==
'filter') {
+ $links = $this->getLinksFromDB(
$article );
+ wfDebug( "AbuseFilter: loading old
links from DB\n" );
+ } else {
+ wfDebug( "AbuseFilter: loading old
links from Parser\n" );
+ $textVar = $parameters['text-var'];
+
+ $wikitext = $vars->getVar( $textVar
)->toString();
+ $editInfo =
$this->parseNonEditWikitext( $wikitext, $article );
+ $links = array_keys(
$editInfo->output->getExternalLinks() );
+ }
+
$result = implode( "\n", $links );
break;
case 'link-diff-added':
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs