Standardize indentation of multiline 'if'/'elseif' conditions
[lhc/web/wiklou.git] / includes / GlobalFunctions.php
index 379335a..b499904 100644 (file)
@@ -30,7 +30,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 /**
  * Compatibility functions
  *
- * We support PHP 5.3.2 and up.
+ * We support PHP 5.3.3 and up.
  * Re-implementations of newer functions or functions in non-standard
  * PHP extensions may be included here.
  */
@@ -1067,8 +1067,6 @@ function wfDebugMem( $exact = false ) {
  *     - false: same as 'private'
  */
 function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
-       global $wgDebugLogGroups;
-
        // Turn $dest into a string if it's a boolean (for b/c)
        if ( $dest === true ) {
                $dest = 'all';
@@ -1163,7 +1161,7 @@ function wfErrorLog( $text, $file ) {
  * @todo document
  */
 function wfLogProfilingData() {
-       global $wgRequestTime, $wgDebugLogFile, $wgDebugLogGroups, $wgDebugRawPage;
+       global $wgRequestTime, $wgDebugLogGroups, $wgDebugRawPage;
        global $wgProfileLimit, $wgUser, $wgRequest;
 
        StatCounter::singleton()->flush();
@@ -1184,53 +1182,54 @@ function wfLogProfilingData() {
 
        $profiler->logData();
 
-       // Check whether this should be logged in the debug file.
        if ( isset( $wgDebugLogGroups['profileoutput'] )
                && $wgDebugLogGroups['profileoutput'] === false
        ) {
-               // Explicitely disabled
-               return;
-       }
-       if ( !isset( $wgDebugLogGroups['profileoutput'] ) && $wgDebugLogFile == '' ) {
-               // Logging not enabled; no point going further
+               // Explicitly disabled
                return;
        }
        if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
                return;
        }
 
-       $forward = '';
+       $ctx = array( 'elapsed' => $elapsed );
        if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
-               $forward = ' forwarded for ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
+               $ctx['forwarded_for'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        if ( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
-               $forward .= ' client IP ' . $_SERVER['HTTP_CLIENT_IP'];
+               $ctx['client_ip'] = $_SERVER['HTTP_CLIENT_IP'];
        }
        if ( !empty( $_SERVER['HTTP_FROM'] ) ) {
-               $forward .= ' from ' . $_SERVER['HTTP_FROM'];
+               $ctx['from'] = $_SERVER['HTTP_FROM'];
        }
-       if ( $forward ) {
-               $forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";
+       if ( isset( $ctx['forwarded_for'] ) ||
+               isset( $ctx['client_ip'] ) ||
+               isset( $ctx['from'] ) ) {
+               $ctx['proxy'] = $_SERVER['REMOTE_ADDR'];
        }
+
        // Don't load $wgUser at this late stage just for statistics purposes
-       // @todo FIXME: We can detect some anons even if it is not loaded. See User::getId()
+       // @todo FIXME: We can detect some anons even if it is not loaded.
+       // See User::getId()
        if ( $wgUser->isItemLoaded( 'id' ) && $wgUser->isAnon() ) {
-               $forward .= ' anon';
+               $ctx['anon'] = true;
+       } else {
+               $ctx['anon'] = false;
        }
 
        // Command line script uses a FauxRequest object which does not have
        // any knowledge about an URL and throw an exception instead.
        try {
-               $requestUrl = $wgRequest->getRequestURL();
-       } catch ( MWException $e ) {
-               $requestUrl = 'n/a';
+               $ctx['url'] = urldecode( $wgRequest->getRequestURL() );
+       } catch ( MWException $ignored ) {
+               // no-op
        }
 
-       $log = sprintf( "%s\t%04.3f\t%s\n",
-               gmdate( 'YmdHis' ), $elapsed,
-               urldecode( $requestUrl . $forward ) );
+       $ctx['output'] = $profiler->getOutput();
+       $ctx['profile'] = $profiler->getRawData();
 
-       wfDebugLog( 'profileoutput', $log . $profiler->getOutput() );
+       $log = MWLogger::getInstance( 'profileoutput' );
+       $log->info( 'Elapsed: {elapsed}', $ctx );
 }
 
 /**
@@ -1621,15 +1620,15 @@ function wfMsgExt( $key, $options ) {
        array_shift( $args );
        array_shift( $args );
        $options = (array)$options;
+       $validOptions = array( 'parse', 'parseinline', 'escape', 'escapenoentities', 'replaceafter',
+               'parsemag', 'content' );
 
        foreach ( $options as $arrayKey => $option ) {
                if ( !preg_match( '/^[0-9]+|language$/', $arrayKey ) ) {
-                       # An unknown index, neither numeric nor "language"
+                       // An unknown index, neither numeric nor "language"
                        wfWarn( "wfMsgExt called with incorrect parameter key $arrayKey", 1, E_USER_WARNING );
-               } elseif ( preg_match( '/^[0-9]+$/', $arrayKey ) && !in_array( $option,
-               array( 'parse', 'parseinline', 'escape', 'escapenoentities',
-               'replaceafter', 'parsemag', 'content' ) ) ) {
-                       # A numeric index with unknown value
+               } elseif ( preg_match( '/^[0-9]+$/', $arrayKey ) && !in_array( $option, $validOptions ) ) {
+                       // A numeric index with unknown value
                        wfWarn( "wfMsgExt called with incorrect parameter $option", 1, E_USER_WARNING );
                }
        }
@@ -1790,52 +1789,37 @@ function wfDebugBacktrace( $limit = 0 ) {
 /**
  * Get a debug backtrace as a string
  *
+ * @param bool|null $raw If true, the return value is plain text. If false, HTML.
+ *   Defaults to $wgCommandLineMode if unset.
  * @return string
+ * @since 1.25 Supports $raw parameter.
  */
-function wfBacktrace() {
+function wfBacktrace( $raw = null ) {
        global $wgCommandLineMode;
 
-       if ( $wgCommandLineMode ) {
-               $msg = '';
-       } else {
-               $msg = "<ul>\n";
+       if ( $raw === null ) {
+               $raw = $wgCommandLineMode;
        }
-       $backtrace = wfDebugBacktrace();
-       foreach ( $backtrace as $call ) {
-               if ( isset( $call['file'] ) ) {
-                       $f = explode( DIRECTORY_SEPARATOR, $call['file'] );
-                       $file = $f[count( $f ) - 1];
-               } else {
-                       $file = '-';
-               }
-               if ( isset( $call['line'] ) ) {
-                       $line = $call['line'];
-               } else {
-                       $line = '-';
-               }
-               if ( $wgCommandLineMode ) {
-                       $msg .= "$file line $line calls ";
-               } else {
-                       $msg .= '<li>' . $file . ' line ' . $line . ' calls ';
-               }
-               if ( !empty( $call['class'] ) ) {
-                       $msg .= $call['class'] . $call['type'];
-               }
-               $msg .= $call['function'] . '()';
 
-               if ( $wgCommandLineMode ) {
-                       $msg .= "\n";
-               } else {
-                       $msg .= "</li>\n";
-               }
-       }
-       if ( $wgCommandLineMode ) {
-               $msg .= "\n";
+       if ( $raw ) {
+               $frameFormat = "%s line %s calls %s()\n";
+               $traceFormat = "%s";
        } else {
-               $msg .= "</ul>\n";
+               $frameFormat = "<li>%s line %s calls %s()</li>\n";
+               $traceFormat = "<ul>\n%s</ul>\n";
        }
 
-       return $msg;
+       $frames = array_map( function ( $frame ) use ( $frameFormat ) {
+               $file = !empty( $frame['file'] ) ? basename( $frame['file'] ) : '-';
+               $line = $frame['line'] ?: '-';
+               $call = $frame['function'];
+               if ( !empty( $frame['class'] ) ) {
+                       $call = $frame['class'] . $frame['type'] . $call;
+               }
+               return sprintf( $frameFormat, $file, $line, $call );
+       }, wfDebugBacktrace() );
+
+       return sprintf( $traceFormat, implode( '', $frames ) );
 }
 
 /**
@@ -3709,7 +3693,7 @@ function wfWaitForSlaves(
        // Figure out which clusters need to be checked
        $lbs = array();
        if ( $cluster === '*' ) {
-               wfGetLBFactory()->forEachLB( function( LoadBalancer $lb ) use ( &$lbs ) {
+               wfGetLBFactory()->forEachLB( function ( LoadBalancer $lb ) use ( &$lbs ) {
                        $lbs[] = $lb;
                } );
        } elseif ( $cluster !== false ) {
@@ -3729,7 +3713,9 @@ function wfWaitForSlaves(
                        if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
                                continue; // assume no writes done
                        }
-                       $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
+                       // Use the empty string to not trigger selectDB() since the connection
+                       // may have been to a server that does not have a DB for the current wiki.
+                       $dbw = $lb->getConnection( DB_MASTER, array(), '' );
                        if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
                                continue; // no writes since the last wait
                        }