Fix for r71961 (moved SpecialPage constructor from named to __construct()). Intercept...
[lhc/web/wiklou.git] / includes / GlobalFunctions.php
index 9dbfde1..e0d70ad 100644 (file)
@@ -224,15 +224,6 @@ function wfArrayDiff2_cmp( $a, $b ) {
        }
 }
 
-/**
- * Seed Mersenne Twister
- * No-op for compatibility; only necessary in PHP < 4.2.0
- * @deprecated. Remove in 1.18
- */
-function wfSeedRandom() {
-       wfDeprecated(__FUNCTION__);
-}
-
 /**
  * Get a random decimal value between 0 and 1, in a way
  * not likely to give duplicate values for any realistic
@@ -306,7 +297,6 @@ function wfUrlencode( $s ) {
 function wfDebug( $text, $logonly = false ) {
        global $wgOut, $wgDebugLogFile, $wgDebugComments, $wgProfileOnly, $wgDebugRawPage;
        global $wgDebugLogPrefix, $wgShowDebug;
-       static $recursion = 0;
 
        static $cache = array(); // Cache of unoutputted messages
        $text = wfDebugTimer() . $text;
@@ -319,21 +309,11 @@ function wfDebug( $text, $logonly = false ) {
        if ( ( $wgDebugComments || $wgShowDebug ) && !$logonly ) {
                $cache[] = $text;
 
-               if ( !isset( $wgOut ) ) {
-                       return;
+               if ( isset( $wgOut ) && StubObject::isRealObject( $wgOut ) ) {
+                       // add the message and any cached messages to the output
+                       array_map( array( $wgOut, 'debug' ), $cache );
+                       $cache = array();
                }
-               if ( !StubObject::isRealObject( $wgOut ) ) {
-                       if ( $recursion ) {
-                               return;
-                       }
-                       $recursion++;
-                       $wgOut->_unstub();
-                       $recursion--;
-               }
-
-               // add the message and possible cached ones to the output
-               array_map( array( $wgOut, 'debug' ), $cache );
-               $cache = array();
        }
        if ( $wgDebugLogFile != '' && !$wgProfileOnly ) {
                # Strip unprintables; they can switch terminal modes when binary data
@@ -854,7 +834,7 @@ function wfMsgWikiHtml( $key ) {
  *   <i>content</i>: fetch message for content language instead of interface
  * Also can accept a single associative argument, of the form 'language' => 'xx':
  *   <i>language</i>: Language object or language code to fetch message for
- *       (overriden by <i>content</i>), its behaviour with parser, parseinline
+ *       (overriden by <i>content</i>), its behaviour with parse, parseinline
  *       and parsemag is undefined.
  * Behavior for conflicting options (e.g., parse+parseinline) is undefined.
  */
@@ -1287,39 +1267,15 @@ function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) {
  */
 function wfEscapeWikiText( $text ) {
        $text = str_replace(
-               array( '[',     '|',      ']',     '\'',    'ISBN ',     
+               array( '[',     '|',      ']',     '\'',    'ISBN ',
                        'RFC ',     '://',     "\n=",     '{{',           '}}' ),
-               array( '&#91;', '&#124;', '&#93;', '&#39;', 'ISBN&#32;', 
+               array( '&#91;', '&#124;', '&#93;', '&#39;', 'ISBN&#32;',
                        'RFC&#32;', '&#58;//', "\n&#61;", '&#123;&#123;', '&#125;&#125;' ),
                htmlspecialchars( $text )
        );
        return $text;
 }
 
-/**
- * @todo document
- */
-function wfQuotedPrintable( $string, $charset = '' ) {
-       # Probably incomplete; see RFC 2045
-       if( empty( $charset ) ) {
-               global $wgInputEncoding;
-               $charset = $wgInputEncoding;
-       }
-       $charset = strtoupper( $charset );
-       $charset = str_replace( 'ISO-8859', 'ISO8859', $charset ); // ?
-
-       $illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff=';
-       $replace = $illegal . '\t ?_';
-       if( !preg_match( "/[$illegal]/", $string ) ) {
-               return $string;
-       }
-       $out = "=?$charset?Q?";
-       $out .= preg_replace( "/([$replace])/e", 'sprintf("=%02X",ord("$1"))', $string );
-       $out .= '?=';
-       return $out;
-}
-
-
 /**
  * @todo document
  * @return float
@@ -1987,7 +1943,7 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
        $uts = 0;
        $da = array();
        $strtime = '';
-       
+
        if ( $ts === 0 ) {
                $uts = time();
                $strtime = "@$uts";
@@ -2029,12 +1985,12 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
                $strtime = $ts;
        } else {
                # Bogus value; fall back to the epoch...
-               wfDebug("wfTimestamp() fed bogus time value: $outputtype; $ts\n");
+               wfDebug("wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n");
                
                return false;
        }
 
-       
+
 
        static $formats = array(
                TS_UNIX => 'U',
@@ -2058,7 +2014,7 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
                        $ds = sprintf("%04d-%02d-%02dT%02d:%02d:%02d.00+00:00",
                                (int)$da[1], (int)$da[2], (int)$da[3],
                                (int)$da[4], (int)$da[5], (int)$da[6]);
-                       
+
                        $d = date_create( $ds, new DateTimeZone( 'GMT' ) );
                } elseif ( $strtime ) {
                        $d = date_create( $strtime, new DateTimeZone( 'GMT' ) );
@@ -2081,12 +2037,12 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
                } elseif ( $strtime ) {
                        $uts = strtotime( $strtime );
                }
-               
+
                if ( $uts === false ) {
                        wfDebug("wfTimestamp() can't parse the timestamp (non 32-bit time? Update php): $outputtype; $ts\n");
                        return false;
                }
-               
+
                if ( TS_UNIX == $outputtype ) {
                        return $uts;
                }
@@ -2240,7 +2196,7 @@ function wfGetSiteNotice() {
 
 /**
  * BC wrapper for MimeMagic::singleton()
- * @deprecated No longer needed as of 1.17 (r68836).
+ * @deprecated No longer needed as of 1.17 (r68836). Remove in 1.19.
  */
 function &wfGetMimeMagic() {
        wfDeprecated( __FUNCTION__ );
@@ -2510,7 +2466,7 @@ function wfDl( $extension ) {
  * @param $cmd String Command line, properly escaped for shell.
  * @param &$retval optional, will receive the program's exit code.
  *                 (non-zero is usually failure)
- * @param $environ Array optional environment variables which should be 
+ * @param $environ Array optional environment variables which should be
  *                 added to the executed command environment.
  * @return collected stdout as a string (trailing newlines stripped)
  */
@@ -2545,22 +2501,22 @@ function wfShellExec( $cmd, &$retval = null, $environ = array() ) {
        $envcmd = '';
        foreach( $environ as $k => $v ) {
                if ( wfIsWindows() ) {
-                       /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves 
-                        * appear in the environment variable, so we must use carat escaping as documented in 
-                        * http://technet.microsoft.com/en-us/library/cc723564.aspx 
-                        * Note however that the quote isn't listed there, but is needed, and the parentheses 
+                       /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves
+                        * appear in the environment variable, so we must use carat escaping as documented in
+                        * http://technet.microsoft.com/en-us/library/cc723564.aspx
+                        * Note however that the quote isn't listed there, but is needed, and the parentheses
                         * are listed there but doesn't appear to need it.
                         */
                        $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . ' && ';
                } else {
-                       /* Assume this is a POSIX shell, thus required to accept variable assignments before the command 
+                       /* Assume this is a POSIX shell, thus required to accept variable assignments before the command
                         * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01
                         */
                        $envcmd .= "$k=" . escapeshellarg( $v ) . ' ';
                }
        }
        $cmd = $envcmd . $cmd;
-       
+
        if ( wfIsWindows() ) {
                if ( version_compare( PHP_VERSION, '5.3.0', '<' ) && /* Fixed in 5.3.0 :) */
                        ( version_compare( PHP_VERSION, '5.2.1', '>=' ) || php_uname( 's' ) == 'Windows NT' ) )
@@ -2859,18 +2815,36 @@ function wfMakeUrlIndex( $url ) {
 
 /**
  * Do any deferred updates and clear the list
- * TODO: This could be in Wiki.php if that class made any sense at all
+ *
+ * @param $commit String: set to 'commit' to commit after every update to
+ *                prevent lock contention
  */
-function wfDoUpdates() {
-       global $wgPostCommitUpdateList, $wgDeferredUpdateList;
-       foreach ( $wgDeferredUpdateList as $update ) {
-               $update->doUpdate();
+function wfDoUpdates( $commit = '' ) {
+       global $wgDeferredUpdateList;
+
+       wfProfileIn( __METHOD__ );
+
+       // No need to get master connections in case of empty updates array
+       if ( !count( $wgDeferredUpdateList ) ) {
+               wfProfileOut( __METHOD__ );
+               return;
+       }
+
+       $doCommit = $commit == 'commit';
+       if ( $doCommit ) {
+               $dbw = wfGetDB( DB_MASTER );
        }
-       foreach ( $wgPostCommitUpdateList as $update ) {
+
+       foreach ( $wgDeferredUpdateList as $update ) {
                $update->doUpdate();
+
+               if ( $doCommit && $dbw->trxLevel() ) {
+                       $dbw->commit();
+               }
        }
+
        $wgDeferredUpdateList = array();
-       $wgPostCommitUpdateList = array();
+       wfProfileOut( __METHOD__ );
 }
 
 /**
@@ -3206,7 +3180,7 @@ function wfFindFile( $title, $options = array() ) {
 /**
  * Get an object referring to a locally registered file.
  * Returns a valid placeholder object if the file does not exist.
- * @param $title Title|String
+ * @param $title Title or String
  * @return File, or null if passed an invalid Title
  */
 function wfLocalFile( $title ) {
@@ -3274,9 +3248,10 @@ function wfBoolToStr( $value ) {
 
 /**
  * Load an extension messages file
- * @deprecated in 1.16 (warnings in 1.18, removed in ?)
+ * @deprecated in 1.16, warnings in 1.18, remove in 1.20
  */
 function wfLoadExtensionMessages( $extensionName, $langcode = false ) {
+       wfDeprecated( __FUNCTION__ );
 }
 
 /**
@@ -3582,23 +3557,3 @@ function wfArrayMap( $function, $input ) {
        }
        return $ret;
 }
-
-/**
- * Returns the PackageRepository object for interaction with the package repository.
- * 
- * TODO: Make the repository type also configurable. 
- * 
- * @since 1.17
- * 
- * @return PackageRepository
- */
-function wfGetRepository() {
-       global $wgRepositoryApiLocation;
-       static $repository = false;
-       
-       if ( $repository === false ) {
-               $repository = new DistributionRepository( $wgRepositoryApiLocation );
-       }
-       
-       return $repository;
-}