https://www.mediawiki.org/wiki/Special:Code/MediaWiki/113587

Revision: 113587
Author:   reedy
Date:     2012-03-11 20:40:04 +0000 (Sun, 11 Mar 2012)
Log Message:
-----------
A LOT of function level documentation

Modified Paths:
--------------
    trunk/extensions/AbuseFilter/AbuseFilter.class.php
    trunk/extensions/AbuseFilter/AbuseFilter.parser.php
    trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php

Modified: trunk/extensions/AbuseFilter/AbuseFilter.class.php
===================================================================
--- trunk/extensions/AbuseFilter/AbuseFilter.class.php  2012-03-11 20:39:18 UTC 
(rev 113586)
+++ trunk/extensions/AbuseFilter/AbuseFilter.class.php  2012-03-11 20:40:04 UTC 
(rev 113587)
@@ -120,6 +120,10 @@
        );
        public static $editboxName = null;
 
+       /**
+        * @param $context IContextSource
+        * @param $pageType
+        */
        public static function addNavigationLinks( IContextSource $context, 
$pageType ) {
                $linkDefs = array(
                        'home' => 'Special:AbuseFilter',
@@ -159,7 +163,7 @@
                        if ( $name == $pageType ) {
                                $links[] = Xml::tags( 'strong', null, $msg );
                        } else {
-                               $links[] = $context->getSkin()->link( $title, 
$msg );
+                               $links[] = Linker::link( $title, $msg );
                        }
                }
 
@@ -192,6 +196,9 @@
                return $vars;
        }
 
+       /**
+        * @return array
+        */
        public static function getBuilderValues() {
                static $realValues = null;
 
@@ -205,6 +212,10 @@
                return $realValues;
        }
 
+       /**
+        * @param $filter
+        * @return bool
+        */
        public static function filterHidden( $filter ) {
                $globalIndex = self::decodeGlobalName( $filter );
                if ( $globalIndex ) {
@@ -226,6 +237,10 @@
                return $hidden ? true : false;
        }
 
+       /**
+        * @param $val int
+        * @throws MWException
+        */
        public static function triggerLimiter( $val = 1 ) {
                self::$condCount += $val;
 
@@ -242,9 +257,8 @@
        }
 
        /**
-        * @static
-        * @param  $title Title
-        * @param  $prefix
+        * @param $title Title
+        * @param $prefix
         * @return AbuseFilterVariableHolder
         */
        public static function generateTitleVars( $title, $prefix ) {
@@ -280,6 +294,10 @@
                return $vars;
        }
 
+       /**
+        * @param $filter
+        * @return mixed
+        */
        public static function checkSyntax( $filter ) {
                global $wgAbuseFilterParserClass;
 
@@ -288,6 +306,11 @@
                return $parser->checkSyntax( $filter );
        }
 
+       /**
+        * @param $expr
+        * @param array $vars
+        * @return string
+        */
        public static function evaluateExpression( $expr, $vars = array() ) {
                global $wgAbuseFilterParserClass;
 
@@ -302,6 +325,14 @@
                return $parser->evaluateExpression( $expr );
        }
 
+       /**
+        * @param $conds
+        * @param $vars
+        * @param $ignoreError bool
+        * @param $keepVars string
+        * @return bool
+        * @throws Exception
+        */
        public static function checkConditions(
                $conds,
                $vars,
@@ -392,6 +423,14 @@
                return $filter_matched;
        }
 
+       /**
+        * @static
+        * @param $row
+        * @param $vars
+        * @param $profile bool
+        * @param $prefix string
+        * @return bool
+        */
        public static function checkFilter( $row, $vars, $profile = false, 
$prefix = '' ) {
                $filterID = $prefix . $row->af_id;
 
@@ -431,6 +470,9 @@
                return $result;
        }
 
+       /**
+        * @param $filter
+        */
        public static function resetFilterProfile( $filter ) {
                global $wgMemc;
                $countKey = wfMemcKey( 'abusefilter', 'profile', $filter, 
'count' );
@@ -440,6 +482,11 @@
                $wgMemc->delete( $totalKey );
        }
 
+       /**
+        * @param $filter
+        * @param $time
+        * @param $conds
+        */
        public static function recordProfilingResult( $filter, $time, $conds ) {
                global $wgMemc;
 
@@ -462,6 +509,10 @@
                }
        }
 
+       /**
+        * @param $filter
+        * @return array
+        */
        public static function getFilterProfile( $filter ) {
                global $wgMemc;
 
@@ -491,7 +542,7 @@
         *
         * @param $filter string
         *
-        * @return string|false
+        * @return string|bool
         */
        public static function decodeGlobalName( $filter ) {
                if ( strpos( $filter, 'global-' ) == 0 ) {
@@ -501,6 +552,10 @@
                return false;
        }
 
+       /**
+        * @param $filters array
+        * @return array
+        */
        public static function getConsequencesForFilters( $filters ) {
                $globalFilters = array();
                $localFilters = array();
@@ -536,6 +591,12 @@
                return $consequences;
        }
 
+       /**
+        * @param $dbr DatabaseBase
+        * @param $filters array
+        * @param $prefix string
+        * @return array
+        */
        public static function loadConsequencesFromDB( $dbr, $filters, $prefix 
= '' ) {
                $actionsByFilter = array();
                foreach ( $filters as $filter ) {
@@ -670,6 +731,11 @@
                return array( $actionsTaken, implode( "\n", $messages ) );
        }
 
+       /**
+        * @param $vars AbuseFilterVariableHolder
+        * @param $title
+        * @return bool
+        */
        public static function filterAction( $vars, $title ) {
                global $wgUser, $wgTitle;
 
@@ -731,6 +797,13 @@
                return $error_msg;
        }
 
+       /**
+        * @param $actions_taken
+        * @param $log_template
+        * @param $action
+        * @param $vars AbuseFilterVariableHolder
+        * @return mixed
+        */
        public static function addLogEntries( $actions_taken, $log_template, 
$action, $vars ) {
                wfProfileIn( __METHOD__ );
                $dbw = wfGetDB( DB_MASTER );
@@ -961,6 +1034,14 @@
                return $obj;
        }
 
+       /**
+        * @param $action
+        * @param $parameters
+        * @param $title
+        * @param $vars AbuseFilterVariableHolder
+        * @param $rule_desc
+        * @return string
+        */
        public static function takeConsequenceAction( $action, $parameters, 
$title,
                $vars, $rule_desc )
        {
@@ -1120,6 +1201,14 @@
                return $display;
        }
 
+       /**
+        * @param $throttleId
+        * @param $types
+        * @param $title
+        * @param $rateCount
+        * @param $ratePeriod
+        * @return bool
+        */
        public static function isThrottled( $throttleId, $types, $title, 
$rateCount, $ratePeriod ) {
                global $wgMemc;
 
@@ -1148,6 +1237,11 @@
                return false; // NOT THROTTLED
        }
 
+       /**
+        * @param $type
+        * @param $title Title
+        * @return Int|string
+        */
        public static function throttleIdentifier( $type, $title ) {
                global $wgUser;
 
@@ -1178,6 +1272,12 @@
                return $identifier;
        }
 
+       /**
+        * @param $throttleId
+        * @param $type
+        * @param $title Title
+        * @return String
+        */
        public static function throttleKey( $throttleId, $type, $title ) {
                $types = explode( ',', $type );
 
@@ -1192,10 +1292,17 @@
                return wfMemcKey( 'abusefilter', 'throttle', $throttleId, 
$type, $identifier );
        }
 
+       /**
+        * @param $user User
+        * @return String
+        */
        public static function autoPromoteBlockKey( $user ) {
                return wfMemcKey( 'abusefilter', 'block-autopromote', 
$user->getId() );
        }
 
+       /**
+        * @param $filters
+        */
        public static function recordStats( $filters ) {
                global $wgAbuseFilterConditionLimit, $wgMemc;
 
@@ -1234,6 +1341,10 @@
                wfProfileOut( __METHOD__ );
        }
 
+       /**
+        * @param $filters
+        * @param $total
+        */
        public static function checkEmergencyDisable( $filters, $total ) {
                global $wgAbuseFilterEmergencyDisableThreshold, 
$wgAbuseFilterEmergencyDisableCount,
                        $wgAbuseFilterEmergencyDisableAge, $wgMemc;
@@ -1272,18 +1383,31 @@
                }
        }
 
+       /**
+        * @return String
+        */
        public static function filterLimitReachedKey() {
                return wfMemcKey( 'abusefilter', 'stats', 'overflow' );
        }
 
+       /**
+        * @return String
+        */
        public static function filterUsedKey() {
                return wfMemcKey( 'abusefilter', 'stats', 'total' );
        }
 
+       /**
+        * @param $filter
+        * @return String
+        */
        public static function filterMatchesKey( $filter = null ) {
                return wfMemcKey( 'abusefilter', 'stats', 'matches', $filter );
        }
 
+       /**
+        * @return User
+        */
        public static function getFilterUser() {
                $user = User::newFromName( wfMsgForContent( 
'abusefilter-blocker' ) );
                $user->load();
@@ -1318,6 +1442,7 @@
         * @param $textName String
         * @param $addResultDiv Boolean
         * @param $canEdit Boolean
+        * @return string
         */
        static function buildEditBox( $rules, $textName = 'wpFilterRules', 
$addResultDiv = true,
                                                                        
$canEdit = true ) {
@@ -1442,6 +1567,10 @@
                return array_unique( $differences );
        }
 
+       /**
+        * @param $row
+        * @return array
+        */
        static function translateFromHistory( $row ) {
                # Translate into an abuse_filter row with some black magic.
                # This is ever so slightly evil!
@@ -1477,12 +1606,20 @@
                return array( $af_row, $actions_output );
        }
 
+       /**
+        * @param $action string
+        * @return String
+        */
        static function getActionDisplay( $action ) {
                $display = wfMsg( "abusefilter-action-$action" );
                $display = wfEmptyMsg( "abusefilter-action-$action", $display ) 
? $action : $display;
                return $display;
        }
 
+       /**
+        * @param $row
+        * @return AbuseFilterVariableHolder|null
+        */
        public static function getVarsFromRCRow( $row ) {
                if ( $row->rc_this_oldid ) {
                        // It's an edit.
@@ -1502,6 +1639,10 @@
                return $vars;
        }
 
+       /**
+        * @param $row
+        * @return AbuseFilterVariableHolder
+        */
        public static function getCreateVarsFromRCRow( $row ) {
                $vars = new AbuseFilterVariableHolder;
 
@@ -1518,6 +1659,10 @@
                return $vars;
        }
 
+       /**
+        * @param $row
+        * @return AbuseFilterVariableHolder
+        */
        public static function getEditVarsFromRCRow( $row ) {
                $vars = new AbuseFilterVariableHolder;
                $title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
@@ -1551,6 +1696,10 @@
                return $vars;
        }
 
+       /**
+        * @param $row
+        * @return AbuseFilterVariableHolder
+        */
        public static function getMoveVarsFromRCRow( $row ) {
                $vars = new AbuseFilterVariableHolder;
 
@@ -1580,8 +1729,8 @@
        }
 
        /**
-        * @static
-        * @param  $title Title
+        * @param $title Title
+        * @param $article Array
         * @return AbuseFilterVariableHolder
         */
        public static function getEditVars( $title, $article = null ) {
@@ -1640,6 +1789,10 @@
                return $vars;
        }
 
+       /**
+        * @param $vars AbuseFilterVariableHolder
+        * @return string
+        */
        public static function buildVarDumpTable( $vars ) {
                // Export all values
                if ( $vars instanceof AbuseFilterVariableHolder ) {
@@ -1693,20 +1846,32 @@
                return $output;
        }
 
+       /**
+        * @param $page
+        * @param $type
+        * @param $title Title
+        * @param $sk Skin
+        * @param $args array
+        * @return String
+        */
        static function modifyActionText( $page, $type, $title, $sk, $args ) {
                list( $history_id, $filter_id ) = $args;
 
-               $filter_link = $sk ? $sk->link( $title ) : 
$title->getCanonicalURL();
+               $filter_link = Linker::link( $title );
 
                $details_title = SpecialPage::getTitleFor( 'AbuseFilter', 
"history/$filter_id/diff/prev/$history_id" );
                $details_text = wfMsgExt( 'abusefilter-log-detailslink', 
'parseinline' );
-               $details_link =
-                       $sk ? $sk->link( $details_title, $details_text ) : 
$details_title->getCanonicalURL();
+               $details_link = Linker::link( $details_title, $details_text );
 
                return wfMsgExt( 'abusefilter-log-entry-modify',
                        array( 'parseinline', 'replaceafter' ), array( 
$filter_link, $details_link ) );
        }
 
+       /**
+        * @param $action
+        * @param $parameters
+        * @return String
+        */
        static function formatAction( $action, $parameters ) {
                global $wgLang;
                if ( count( $parameters ) == 0 ) {
@@ -1719,6 +1884,10 @@
                return $displayAction;
        }
 
+       /**
+        * @param $value array
+        * @return string
+        */
        static function formatFlags( $value ) {
                global $wgLang;
                $flags = array_filter( explode( ',', $value ) );
@@ -1729,6 +1898,9 @@
                return $wgLang->commaList( $flags_display );
        }
 
+       /**
+        * @param $data string
+        */
        static function sendToUDP( $data ) {
                global $wgAbuseFilterUDPPrefix, $wgAbuseFilterUDPAddress, 
$wgAbuseFilterUDPPort;
 
@@ -1740,11 +1912,15 @@
                );
        }
 
+       /**
+        * @param $filterID
+        * @return bool|mixed|string
+        */
        static function getGlobalFilterDescription( $filterID ) {
                global $wgAbuseFilterCentralDB;
 
                if ( !$wgAbuseFilterCentralDB ) {
-                       return;
+                       return '';
                }
 
                $fdb = wfGetDB( DB_SLAVE, array(), $wgAbuseFilterCentralDB );

Modified: trunk/extensions/AbuseFilter/AbuseFilter.parser.php
===================================================================
--- trunk/extensions/AbuseFilter/AbuseFilter.parser.php 2012-03-11 20:39:18 UTC 
(rev 113586)
+++ trunk/extensions/AbuseFilter/AbuseFilter.parser.php 2012-03-11 20:40:04 UTC 
(rev 113587)
@@ -79,6 +79,11 @@
                $this->data = $val;
        }
 
+       /**
+        * @param $var
+        * @return AFPData
+        * @throws AFPException
+        */
        public static function newFromPHPVar( $var ) {
                if ( is_string( $var ) ) {
                        return new AFPData( self::DString, $var );
@@ -103,10 +108,19 @@
                }
        }
 
+       /**
+        * @return AFPData
+        */
        public function dup() {
                return new AFPData( $this->type, $this->data );
        }
 
+       /**
+        * @static
+        * @param $orig
+        * @param $target
+        * @return AFPData
+        */
        public static function castTypes( $orig, $target ) {
                if ( $orig->type == $target ) {
                        return $orig->dup();
@@ -120,7 +134,7 @@
                                return new AFPData( self::DBool, (bool)count( 
$orig->data ) );
                        }
                        if ( $target == self::DFloat ) {
-                               return new AFPData( self::DFloat, doubleval( 
count( $orig->data  ) ) );
+                               return new AFPData( self::DFloat,  floatval( 
count( $orig->data  ) ) );
                        }
                        if ( $target == self::DInt ) {
                                return new AFPData( self::DInt, intval( count( 
$orig->data ) ) );
@@ -138,7 +152,7 @@
                        return new AFPData( self::DBool, (bool)$orig->data );
                }
                if ( $target == self::DFloat ) {
-                       return new AFPData( self::DFloat, doubleval( 
$orig->data ) );
+                       return new AFPData( self::DFloat, floatval( $orig->data 
) );
                }
                if ( $target == self::DInt ) {
                        return new AFPData( self::DInt, intval( $orig->data ) );
@@ -151,14 +165,28 @@
                }
        }
 
+       /**
+        * @param $value
+        * @return AFPData
+        */
        public static function boolInvert( $value ) {
                return new AFPData( self::DBool, !$value->toBool() );
        }
 
+       /**
+        * @param $base
+        * @param $exponent
+        * @return AFPData
+        */
        public static function pow( $base, $exponent ) {
                return new AFPData( self::DFloat, pow( $base->toFloat(), 
$exponent->toFloat() ) );
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @return AFPData
+        */
        public static function keywordIn( $a, $b ) {
                $a = $a->toString();
                $b = $b->toString();
@@ -170,6 +198,11 @@
                return new AFPData( self::DBool, in_string( $a, $b ) );
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @return AFPData
+        */
        public static function keywordContains( $a, $b ) {
                $a = $a->toString();
                $b = $b->toString();
@@ -181,6 +214,11 @@
                return new AFPData( self::DBool, in_string( $b, $a ) );
        }
 
+       /**
+        * @param $value
+        * @param $list
+        * @return bool
+        */
        public static function listContains( $value, $list ) {
                // Should use built-in PHP function somehow
                foreach ( $list->data as $item ) {
@@ -191,11 +229,21 @@
                return false;
        }
 
+       /**
+        * @param $d1
+        * @param $d2
+        * @return bool
+        */
        public static function equals( $d1, $d2 ) {
                return $d1->type != self::DList && $d2->type != self::DList &&
                        $d1->toString() === $d2->toString();
        }
 
+       /**
+        * @param $str
+        * @param $pattern
+        * @return AFPData
+        */
        public static function keywordLike( $str, $pattern ) {
                $str = $str->toString();
                $pattern = $pattern->toString();
@@ -205,6 +253,14 @@
                return new AFPData( self::DBool, (bool)$result );
        }
 
+       /**
+        * @param $str
+        * @param $regex
+        * @param $pos
+        * @param $insensitive bool
+        * @return AFPData
+        * @throws Exception
+        */
        public static function keywordRegex( $str, $regex, $pos, $insensitive = 
false ) {
                $str = $str->toString();
                $pattern = $regex->toString();
@@ -228,10 +284,20 @@
                return new AFPData( self::DBool, (bool)$result );
        }
 
+       /**
+        * @param $str
+        * @param $regex
+        * @param $pos
+        * @return AFPData
+        */
        public static function keywordRegexInsensitive( $str, $regex, $pos ) {
                return self::keywordRegex( $str, $regex, $pos, true );
        }
 
+       /**
+        * @param $data
+        * @return AFPData
+        */
        public static function unaryMinus( $data ) {
                if ( $data->type == self::DInt ) {
                        return new AFPData( $data->type, - $data->toInt() );
@@ -240,6 +306,13 @@
                }
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @param $op
+        * @return AFPData
+        * @throws AFPException
+        */
        public static function boolOp( $a, $b, $op ) {
                $a = $a->toBool();
                $b = $b->toBool();
@@ -255,6 +328,13 @@
                throw new AFPException( "Invalid boolean operation: {$op}" ); 
// Should never happen.
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @param $op
+        * @return AFPData
+        * @throws AFPException
+        */
        public static function compareOp( $a, $b, $op ) {
                if ( $op == '==' || $op == '=' ) {
                        return new AFPData( self::DBool, self::equals( $a, $b ) 
);
@@ -285,6 +365,15 @@
                throw new AFPException( "Invalid comparison operation: {$op}" 
); // Should never happen
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @param $op
+        * @param $pos
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        * @throws AFPException
+        */
        public static function mulRel( $a, $b, $op, $pos ) {
                // Figure out the type.
                if ( $a->type == self::DFloat || $b->type == self::DFloat ||
@@ -315,12 +404,17 @@
                if ( $type == self::DInt ) {
                        $data = intval( $data );
                } else {
-                       $data = doubleval( $data );
+                       $data = floatval( $data );
                }
 
                return new AFPData( $type, $data );
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @return AFPData
+        */
        public static function sum( $a, $b ) {
                if ( $a->type == self::DString || $b->type == self::DString ) {
                        return new AFPData( self::DString, $a->toString() . 
$b->toString() );
@@ -331,6 +425,11 @@
                }
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @return AFPData
+        */
        public static function sub( $a, $b ) {
                return new AFPData( self::DFloat, $a->toFloat() - $b->toFloat() 
);
        }
@@ -338,6 +437,7 @@
        /** Convert shorteners */
 
        /**
+        * @throws MWException
         * @return mixed
         */
        public function toNative() {
@@ -434,6 +534,15 @@
                $this->pos = $pos;
        }
 
+       /**
+        * @param $errno
+        * @param $errstr
+        * @param $errfile
+        * @param $errline
+        * @param $context
+        * @return bool
+        * @throws AFPUserVisibleException
+        */
        function handleError( $errno, $errstr, $errfile, $errline, $context ) {
                if ( error_reporting() == 0 ) {
                        return true;
@@ -455,8 +564,13 @@
 }
 
 class AbuseFilterParser {
-       var $mParams, $mVars, $mCode, $mTokens, $mPos, $mCur, $mShortCircuit, 
$mAllowShort;
+       var $mParams, $mCode, $mTokens, $mPos, $mCur, $mShortCircuit, 
$mAllowShort, $mLen;
 
+       /**
+        * @var AbuseFilterVariableHolder
+        */
+       var $mVars;
+
        // length,lcase,ccnorm,rmdoubles,specialratio,rmspecials,norm,count
        static $mFunctions = array(
                'lcase' => 'funcLc',
@@ -529,6 +643,10 @@
                $this->mAllowShort = true;
        }
 
+       /**
+        * @param $filter
+        * @return array|bool
+        */
        public function checkSyntax( $filter ) {
                try {
                        $origAS = $this->mAllowShort;
@@ -542,11 +660,18 @@
                return true;
        }
 
+       /**
+        * @param $name
+        * @param $value
+        */
        public function setVar( $name, $value ) {
                $name = strtolower( $name );
                $this->mVars->setVar( $name, $value );
        }
 
+       /**
+        * @param $vars
+        */
        public function setVars( $vars ) {
                if ( is_array( $vars ) ) {
                        foreach ( $vars as $name => $var ) {
@@ -557,6 +682,9 @@
                }
        }
 
+       /**
+        * @return AFPToken
+        */
        protected function move( ) {
                wfProfileIn( __METHOD__ );
                list( $val, $type, $code, $offset ) =
@@ -568,17 +696,28 @@
                return $this->mCur = $token;
        }
 
-       // getState() and setState() function allows parser state to be 
rollbacked to several tokens back
+       /**
+        * getState() function allows parser state to be rollbacked to several 
tokens back
+        * @return AFPParserState
+        */
        protected function getState() {
                return new AFPParserState( $this->mCur, $this->mPos );
        }
 
+       /**
+        * setState() function allows parser state to be rollbacked to several 
tokens back
+        * @param AFPParserState $state
+        */
        protected function setState( AFPParserState $state ) {
                $this->mCur = $state->token;
                $this->mPos = $state->pos;
                self::$lastHandledToken = $state->lastInput;
        }
 
+       /**
+        * @return mixed
+        * @throws AFPUserVisibleException
+        */
        protected function skipOverBraces() {
                if ( !( $this->mCur->type == AFPToken::TBrace && 
$this->mCur->value == '(' ) || !$this->mShortCircuit ) {
                        return;
@@ -601,14 +740,26 @@
                        throw new AFPUserVisibleException( 'expectednotfound', 
$this->mCur->pos, array( ')' ) );
        }
 
+       /**
+        * @param $code
+        * @return bool
+        */
        public function parse( $code ) {
                return $this->intEval( $code )->toBool();
        }
 
+       /**
+        * @param $filter
+        * @return string
+        */
        public function evaluateExpression( $filter ) {
                return $this->intEval( $filter )->toString();
        }
 
+       /**
+        * @param $code
+        * @return AFPData
+        */
        function intEval( $code ) {
                // Setup, resetting
                $this->mCode = $code;
@@ -621,6 +772,11 @@
                return $result;
        }
 
+       /**
+        * @param $a
+        * @param $b
+        * @return int
+        */
        static function lengthCompare( $a, $b ) {
                if ( strlen( $a ) == strlen( $b ) ) {
                        return 0;
@@ -635,6 +791,7 @@
         * Handles unexpected characters after the expression
         *
         * @param $result
+        * @throws AFPUserVisibleException
         */
        protected function doLevelEntry( &$result ) {
                $this->doLevelSemicolon( $result );
@@ -661,6 +818,8 @@
         * Handles multiple expressions
         *
         * @param $result
+        * @throws AFPUserVisibleException
+        * @return
         */
        protected function doLevelSet( &$result ) {
                if ( $this->mCur->type == AFPToken::TID ) {
@@ -724,6 +883,10 @@
                $this->doLevelConditions( $result );
        }
 
+       /**
+        * @param $result
+        * @throws AFPUserVisibleException
+        */
        protected function doLevelConditions( &$result ) {
                if ( $this->mCur->type == AFPToken::TKeyword && 
$this->mCur->value == 'if' ) {
                        $this->move();
@@ -838,6 +1001,9 @@
                }
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelBoolOps( &$result ) {
                $this->doLevelCompares( $result );
                $ops = array( '&', '|', '^' );
@@ -876,6 +1042,9 @@
                }
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelCompares( &$result ) {
                AbuseFilter::triggerLimiter();
                $this->doLevelSumRels( $result );
@@ -891,6 +1060,9 @@
                }
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelSumRels( &$result ) {
                $this->doLevelMulRels( $result );
                wfProfileIn( __METHOD__ );
@@ -910,6 +1082,9 @@
                wfProfileOut( __METHOD__ );
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelMulRels( &$result ) {
                $this->doLevelPow( $result );
                wfProfileIn( __METHOD__ );
@@ -924,6 +1099,9 @@
                wfProfileOut( __METHOD__ );
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelPow( &$result ) {
                $this->doLevelBoolInvert( $result );
                wfProfileIn( __METHOD__ );
@@ -936,6 +1114,9 @@
                wfProfileOut( __METHOD__ );
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelBoolInvert( &$result ) {
                if ( $this->mCur->type == AFPToken::TOp && $this->mCur->value 
== '!' ) {
                        $this->move();
@@ -948,6 +1129,9 @@
                }
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelSpecialWords( &$result ) {
                $this->doLevelUnarys( $result );
                $keyword = strtolower( $this->mCur->value );
@@ -979,6 +1163,9 @@
                }
        }
 
+       /**
+        * @param $result
+        */
        protected function doLevelUnarys( &$result ) {
                $op = $this->mCur->value;
                if ( $this->mCur->type == AFPToken::TOp && ( $op == "+" || $op 
== "-" ) ) {
@@ -994,6 +1181,10 @@
                }
        }
 
+       /**
+        * @param $result
+        * @throws AFPUserVisibleException
+        */
        protected function doLevelListElements( &$result ) {
                $this->doLevelBraces( $result );
                while ( $this->mCur->type == AFPToken::TSquareBracket && 
$this->mCur->value == '[' ) {
@@ -1017,6 +1208,10 @@
                }
        }
 
+       /**
+        * @param $result
+        * @throws AFPUserVisibleException
+        */
        protected function doLevelBraces( &$result ) {
                if ( $this->mCur->type == AFPToken::TBrace && 
$this->mCur->value == '(' ) {
                        if ( $this->mShortCircuit ) {
@@ -1036,6 +1231,10 @@
                }
        }
 
+       /**
+        * @param $result
+        * @throws AFPUserVisibleException
+        */
        protected function doLevelFunction( &$result ) {
                if ( $this->mCur->type == AFPToken::TID && isset( 
self::$mFunctions[$this->mCur->value] ) ) {
                        wfProfileIn( __METHOD__ );
@@ -1104,6 +1303,11 @@
                }
        }
 
+       /**
+        * @param $result
+        * @throws AFPUserVisibleException
+        * @return AFPData
+        */
        protected function doLevelAtom( &$result ) {
                wfProfileIn( __METHOD__ );
                $tok = $this->mCur->value;
@@ -1186,6 +1390,11 @@
 
        /* End of levels */
 
+       /**
+        * @param $var
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function getVarValue( $var ) {
                wfProfileIn( __METHOD__ );
                $var = strtolower( $var );
@@ -1206,6 +1415,11 @@
                }
        }
 
+       /**
+        * @param $name
+        * @param $value
+        * @throws AFPUserVisibleException
+        */
        protected function setUserVariable( $name, $value ) {
                $builderValues = AbuseFilter::getBuilderValues();
                if ( array_key_exists( $name, $builderValues['vars'] ) ) {
@@ -1214,6 +1428,13 @@
                $this->mVars->setVar( $name, $value );
        }
 
+       /**
+        * @param $code
+        * @param $offset
+        * @return array
+        * @throws AFPException
+        * @throws AFPUserVisibleException
+        */
        static function nextToken( $code, $offset ) {
                $tok = '';
 
@@ -1394,7 +1615,7 @@
 
                                return array(
                                        $float
-                                               ? doubleval( $num )
+                                               ? floatval( $num )
                                                : intval( $num ),
                                        $float
                                                ? AFPToken::TFloat
@@ -1426,6 +1647,12 @@
        }
 
        // Built-in functions
+
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcLc( $args ) {
                global $wgContLang;
                if ( count( $args ) < 1 ) {
@@ -1439,6 +1666,11 @@
                return new AFPData( AFPData::DString, $wgContLang->lc( $s ) );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcLen( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1451,6 +1683,11 @@
                return new AFPData( AFPData::DInt, mb_strlen( $s, 'utf-8' ) );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcSimpleNorm( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1466,6 +1703,11 @@
                return new AFPData( AFPData::DString, $s );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcSpecialRatio( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1487,6 +1729,11 @@
                return new AFPData( AFPData::DFloat, $val );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcCount( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1517,6 +1764,12 @@
                return new AFPData( AFPData::DInt, $count );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        * @throws Exception
+        */
        protected function funcRCount( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1552,6 +1805,11 @@
                return new AFPData( AFPData::DInt, $count );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcIPInRange( $args ) {
                if ( count( $args ) < 2 ) {
                        throw new AFPUserVisibleException(
@@ -1569,6 +1827,11 @@
                return new AFPData( AFPData::DBool, $result );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcCCNorm( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1585,6 +1848,11 @@
                return new AFPData( AFPData::DString, $s );
        }
 
+       /**
+        * @param $args
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcContainsAny( $args ) {
                if ( count( $args ) < 2 ) {
                        throw new AFPUserVisibleException(
@@ -1621,6 +1889,10 @@
                return new AFPData( AFPData::DBool, $ok );
        }
 
+       /**
+        * @param $s
+        * @return mixed
+        */
        protected function ccnorm( $s ) {
                static $equivset = null;
                static $replacementArray = null;
@@ -1634,20 +1906,35 @@
                return $replacementArray->replace( $s );
        }
 
+       /**
+        * @param $s string
+        * @return array|string
+        */
        protected function rmspecials( $s ) {
-               $s = preg_replace( '/[^\p{L}\p{N}]/u', '', $s );
-
-               return $s;
+               return preg_replace( '/[^\p{L}\p{N}]/u', '', $s );
        }
 
+       /**
+        * @param $s string
+        * @return array|string
+        */
        protected function rmdoubles( $s ) {
                return preg_replace( '/(.)\1+/us', '\1', $s );
        }
 
+       /**
+        * @param $s string
+        * @return array|string
+        */
        protected function rmwhitespace( $s ) {
                return preg_replace( '/\s+/u', '', $s );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcRMSpecials( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1663,6 +1950,11 @@
                return new AFPData( AFPData::DString, $s );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcRMWhitespace( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1678,6 +1970,11 @@
                return new AFPData( AFPData::DString, $s );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcRMDoubles( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1693,6 +1990,11 @@
                return new AFPData( AFPData::DString, $s );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcNorm( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException(
@@ -1711,6 +2013,11 @@
                return new AFPData( AFPData::DString, $s );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcSubstr( $args ) {
                if ( count( $args ) < 2 ) {
                        throw new AFPUserVisibleException(
@@ -1734,6 +2041,11 @@
                return new AFPData( AFPData::DString, $result );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcStrPos( $args ) {
                if ( count( $args ) < 2 ) {
                        throw new AFPUserVisibleException(
@@ -1760,6 +2072,11 @@
                return new AFPData( AFPData::DInt, $result );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcStrReplace( $args ) {
                if ( count( $args ) < 3 ) {
                        throw new AFPUserVisibleException(
@@ -1776,6 +2093,11 @@
                return new AFPData( AFPData::DString, str_replace( $search, 
$replace, $subject ) );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function funcStrRegexEscape( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException( 'notenoughargs', 
$this->mCur->pos,
@@ -1788,6 +2110,11 @@
                return new AFPData( AFPData::DString, preg_quote( $string ) );
        }
 
+       /**
+        * @param $args array
+        * @return mixed
+        * @throws AFPUserVisibleException
+        */
        protected function funcSetVar( $args ) {
                if ( count( $args ) < 2 ) {
                        throw new AFPUserVisibleException(
@@ -1805,6 +2132,11 @@
                return $value;
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function castString( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException( 'noparams', 
$this->mCur->pos, array( __METHOD__ ) );
@@ -1814,6 +2146,11 @@
                return AFPData::castTypes( $val, AFPData::DString );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function castInt( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException( 'noparams', 
$this->mCur->pos, array( __METHOD__ ) );
@@ -1823,6 +2160,11 @@
                return AFPData::castTypes( $val, AFPData::DInt );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function castFloat( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException( 'noparams', 
$this->mCur->pos, array( __METHOD__ ) );
@@ -1832,6 +2174,11 @@
                return AFPData::castTypes( $val, AFPData::DFloat );
        }
 
+       /**
+        * @param $args array
+        * @return AFPData
+        * @throws AFPUserVisibleException
+        */
        protected function castBool( $args ) {
                if ( count( $args ) < 1 ) {
                        throw new AFPUserVisibleException( 'noparams', 
$this->mCur->pos, array( __METHOD__ ) );

Modified: trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php
===================================================================
--- trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php  2012-03-11 
20:39:18 UTC (rev 113586)
+++ trunk/extensions/AbuseFilter/AbuseFilterVariableHolder.php  2012-03-11 
20:40:04 UTC (rev 113587)
@@ -3,6 +3,10 @@
        var $mVars = array();
        static $varBlacklist = array( 'context' );
 
+       /**
+        * @param $variable
+        * @param $datum
+        */
        function setVar( $variable, $datum ) {
                $variable = strtolower( $variable );
                if ( !( $datum instanceof AFPData || $datum instanceof 
AFComputedVariable ) ) {
@@ -12,11 +16,20 @@
                $this->mVars[$variable] = $datum;
        }
 
+       /**
+        * @param $variable
+        * @param $method
+        * @param $parameters
+        */
        function setLazyLoadVar( $variable, $method, $parameters ) {
                $placeholder = new AFComputedVariable( $method, $parameters );
                $this->setVar( $variable, $placeholder );
        }
 
+       /**
+        * @param $variable
+        * @return AFPData
+        */
        function getVar( $variable ) {
                $variable = strtolower( $variable );
                if ( isset( $this->mVars[$variable] ) ) {
@@ -32,6 +45,9 @@
                }
        }
 
+       /**
+        * @return AbuseFilterVariableHolder
+        */
        static function merge() {
                $newHolder = new AbuseFilterVariableHolder;
 
@@ -42,6 +58,10 @@
                return $newHolder;
        }
 
+       /**
+        * @param $addHolder
+        * @throws MWException
+        */
        function addHolder( $addHolder ) {
                if ( !is_object( $addHolder ) ) {
                        throw new MWException( 'Invalid argument to 
AbuseFilterVariableHolder::addHolder' );
@@ -54,6 +74,9 @@
                $this->setVar( 'context', 'stored' );
        }
 
+       /**
+        * @return array
+        */
        function exportAllVars() {
                $allVarNames = array_keys( $this->mVars );
                $exported = array();
@@ -67,6 +90,10 @@
                return $exported;
        }
 
+       /**
+        * @param $var
+        * @return bool
+        */
        function varIsSet( $var ) {
                return array_key_exists( $var, $this->mVars );
        }
@@ -102,6 +129,10 @@
        static $userCache = array();
        static $articleCache = array();
 
+       /**
+        * @param $method
+        * @param $parameters
+        */
        function __construct( $method, $parameters ) {
                $this->mMethod = $method;
                $this->mParameters = $parameters;
@@ -119,7 +150,7 @@
        function parseNonEditWikitext( $wikitext, $article ) {
                static $cache = array();
 
-               $cacheKey = md5( $wikitext ) . ':' . 
$article->mTitle->getPrefixedText();
+               $cacheKey = md5( $wikitext ) . ':' . 
$article->getTitle()->getPrefixedText();
 
                if ( isset( $cache[$cacheKey] ) ) {
                        return $cache[$cacheKey];
@@ -135,6 +166,10 @@
                return $edit;
        }
 
+       /**
+        * @param $username string
+        * @return User
+        */
        static function userObjectFromName( $username ) {
                if ( isset( self::$userCache[$username] ) ) {
                        return self::$userCache[$username];
@@ -160,6 +195,11 @@
                return $user;
        }
 
+       /**
+        * @param $namespace
+        * @param $title Title
+        * @return Article
+        */
        static function articleFromTitle( $namespace, $title ) {
                if ( isset( self::$articleCache["$namespace:$title"] ) ) {
                        return self::$articleCache["$namespace:$title"];
@@ -177,6 +217,10 @@
                return self::$articleCache["$namespace:$title"];
        }
 
+       /**
+        * @param $article Article
+        * @return array
+        */
        static function getLinksFromDB( $article ) {
                // Stolen from ConfirmEdit
                $id = $article->getId();
@@ -198,6 +242,12 @@
                return $links;
        }
 
+       /**
+        * @param $vars AbuseFilterVariableHolder
+        * @return AFPData|array|int|mixed|null|string
+        * @throws MWException
+        * @throws AFPException
+        */
        function compute( $vars ) {
                $parameters = $this->mParameters;
                $result = null;


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to