* Introduced FileRepoStatus -- result class for file repo operations.
[lhc/web/wiklou.git] / includes / GlobalFunctions.php
index bf58971..f8d0c76 100644 (file)
@@ -237,6 +237,13 @@ function wfLogDBError( $text ) {
  * Log to a file without getting "file size exceeded" signals
  */
 function wfErrorLog( $text, $file ) {
+       # Temp: add unique request prefix
+       static $prefix;
+       if ( !isset( $prefix ) ) {
+               $prefix = chr( mt_rand( 33, 126 ) ) . chr( mt_rand( 33, 126 ) ) . chr( mt_rand( 33, 126 ) ) . '| ';
+       }
+       $text = $prefix . $text;
+
        wfSuppressWarnings();
        $exists = file_exists( $file );
        $size = $exists ? filesize( $file ) : false;
@@ -701,14 +708,14 @@ function wfHostname() {
         * @return string
         */
        function wfReportTime() {
-               global $wgRequestTime;
+               global $wgRequestTime, $wgShowHostnames;
 
                $now = wfTime();
                $elapsed = $now - $wgRequestTime;
 
-               $com = sprintf( "<!-- Served by %s in %01.3f secs. -->",
-                 wfHostname(), $elapsed );
-               return $com;
+               return $wgShowHostnames
+                       ? sprintf( "<!-- Served by %s in %01.3f secs. -->", wfHostname(), $elapsed )
+                       : sprintf( "<!-- Served in %01.3f secs. -->", $elapsed );
        }
 
 /**
@@ -1663,47 +1670,11 @@ function wfTempDir() {
  * Make directory, and make all parent directories if they don't exist
  */
 function wfMkdirParents( $fullDir, $mode = 0777 ) {
-       if ( strval( $fullDir ) === '' ) {
+       if( strval( $fullDir ) === '' )
                return true;
-       }
-       
-       # Go back through the paths to find the first directory that exists
-       $currentDir = $fullDir;
-       $createList = array();
-       while ( strval( $currentDir ) !== '' && !file_exists( $currentDir ) ) { 
-               # Strip trailing slashes
-               $currentDir = rtrim( $currentDir, '/\\' );
-
-               # Add to create list
-               $createList[] = $currentDir;
-
-               # Find next delimiter searching from the end
-               $p = max( strrpos( $currentDir, '/' ), strrpos( $currentDir, '\\' ) );
-               if ( $p === false ) {
-                       $currentDir = false;
-               } else {
-                       $currentDir = substr( $currentDir, 0, $p );
-               }
-       }
-       
-       if ( count( $createList ) == 0 ) {
-               # Directory specified already exists
+       if( file_exists( $fullDir ) )
                return true;
-       } elseif ( $currentDir === false ) {
-               # Went all the way back to root and it apparently doesn't exist
-               return false;
-       }
-       
-       # Now go forward creating directories
-       $createList = array_reverse( $createList );
-       foreach ( $createList as $dir ) {
-               # use chmod to override the umask, as suggested by the PHP manual
-               if ( !mkdir( $dir, $mode ) || !chmod( $dir, $mode ) ) {
-                       wfDebugLog( 'mkdir', "Unable to create directory $dir\n" );
-                       return false;
-               } 
-       }
-       return true;
+       return mkdir( str_replace( '/', DIRECTORY_SEPARATOR, $fullDir ), $mode, true );
 }
 
 /**
@@ -1767,7 +1738,7 @@ function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) {
  * @return bool
  */
 function wfEmptyMsg( $msg, $wfMsgOut ) {
-       return $wfMsgOut === "&lt;$msg&gt;";
+       return $wfMsgOut === htmlspecialchars( "<$msg>" );
 }
 
 /**
@@ -1908,11 +1879,15 @@ function wfRegexReplacement( $string ) {
  * We'll consider it so always, as we don't want \s in our Unix paths either.
  * 
  * @param string $path
+ * @param string $suffix to remove if present
  * @return string
  */
-function wfBaseName( $path ) {
+function wfBaseName( $path, $suffix='' ) {
+       $encSuffix = ($suffix == '')
+               ? ''
+               : ( '(?:' . preg_quote( $suffix, '#' ) . ')?' );
        $matches = array();
-       if( preg_match( '#([^/\\\\]*)[/\\\\]*$#', $path, $matches ) ) {
+       if( preg_match( "#([^/\\\\]*?){$encSuffix}[/\\\\]*$#", $path, $matches ) ) {
                return $matches[1];
        } else {
                return '';
@@ -2171,7 +2146,9 @@ function wfSetupSession() {
        }
        session_set_cookie_params( 0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure);
        session_cache_limiter( 'private, must-revalidate' );
+       wfDebug( "Starting session..." );
        @session_start();
+       wfDebug( "ok\n" );
 }
 
 /**
@@ -2294,25 +2271,38 @@ function wfLocalFile( $title ) {
        return RepoGroup::singleton()->getLocalRepo()->newFile( $title );
 }
 
+/**
+ * Should low-performance queries be disabled?
+ *
+ * @return bool
+ */
 function wfQueriesMustScale() {
        global $wgMiserMode;
-       // If $wgMiserMode is true, it is either large or just cheap, other way the
-       // affect is the same...
-       if( $wgMiserMode )
-               return true;
-       // Try to roughly guess how large this wiki is.
-       // Useful for figuring out if a query that doesn't scale should be avoided
-       // or if job queue should be used
-       $dbr = wfGetDB( DB_SLAVE );
-       $stats = $dbr->selectRow('site_stats', 
-               array('ss_total_pages AS pages','ss_total_edits as edits','ss_users AS users'),
-               array(),
-               __METHOD__);
-       if( $stats->pages > 100000 && $stats->edits > 1000000 && $stats->users > 10000 ) {
-               return true;
-       } else {
-               return false;
-       }
+       return $wgMiserMode
+               || ( SiteStats::pages() > 100000
+               && SiteStats::edits() > 1000000
+               && SiteStats::users() > 10000 );
+}
+
+/**
+ * Get the path to a specified script file, respecting file
+ * extensions; this is a wrapper around $wgScriptExtension etc.
+ *
+ * @param string $script Script filename, sans extension
+ * @return string
+ */
+function wfScript( $script = 'index' ) {
+       global $wgScriptPath, $wgScriptExtension;
+       return "{$wgScriptPath}/{$script}{$wgScriptExtension}";
 }
 
-?>
+/**
+ * Convenience function converts boolean values into "true"
+ * or "false" (string) values
+ *
+ * @param bool $value
+ * @return string
+ */
+function wfBoolToStr( $value ) {
+       return $value ? 'true' : 'false';
+}