In mctest.php, use the configured timeout instead of the default
[lhc/web/wiklou.git] / includes / GlobalFunctions.php
index bcbcefe..74b2ea6 100644 (file)
@@ -559,6 +559,7 @@ function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
  *
  * @todo Need to integrate this into wfExpandUrl (bug 32168)
  *
+ * @since 1.19
  * @param $urlParts Array URL parts, as output from wfParseUrl
  * @return string URL assembled from its component parts
  */
@@ -1053,8 +1054,8 @@ function wfLogDBError( $text ) {
  * @param $component String|bool: Added in 1.19.
  * @param $callerOffset integer: How far up the callstack is the original
  *    caller. 2 = function that called the function that called
- *    wfDeprecated (Added in 1.20) 
- * 
+ *    wfDeprecated (Added in 1.20)
+ *
  * @return null
  */
 function wfDeprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
@@ -1064,23 +1065,23 @@ function wfDeprecated( $function, $version = false, $component = false, $callerO
 
        if ( !isset( $functionsWarned[$function] ) ) {
                $functionsWarned[$function] = true;
-               
+
                if ( $version ) {
                        global $wgDeprecationReleaseLimit;
-                       
+
                        if ( $wgDeprecationReleaseLimit && $component === false ) {
                                # Strip -* off the end of $version so that branches can use the
                                # format #.##-branchname to avoid issues if the branch is merged into
                                # a version of MediaWiki later than what it was branched from
                                $comparableVersion = preg_replace( '/-.*$/', '', $version );
-                               
+
                                # If the comparableVersion is larger than our release limit then
                                # skip the warning message for the deprecation
                                if ( version_compare( $wgDeprecationReleaseLimit, $comparableVersion, '<' ) ) {
                                        return;
                                }
                        }
-                       
+
                        $component = $component === false ? 'MediaWiki' : $component;
                        wfWarn( "Use of $function was deprecated in $component $version.", $callerOffset );
                } else {
@@ -1950,7 +1951,7 @@ function wfShowingResults( $offset, $limit ) {
  */
 function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) {
        wfDeprecated( __METHOD__, '1.19' );
-       
+
        global $wgLang;
 
        $query = wfCgiToArray( $query );
@@ -2657,7 +2658,8 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
 
        if( !$ok ) {
                // PHP doesn't report the path in its warning message, so add our own to aid in diagnosis.
-               trigger_error( __FUNCTION__ . ": failed to mkdir \"$dir\" mode $mode", E_USER_WARNING );
+               trigger_error( sprintf( "%s: failed to mkdir \"%s\" mode 0%o", __FUNCTION__, $dir, $mode ),
+                       E_USER_WARNING );
        }
        return $ok;
 }
@@ -2952,21 +2954,29 @@ function wfInitShellLocale() {
 }
 
 /**
- * Generate a shell-escaped command line string to run a maintenance script.
+ * Alias to wfShellWikiCmd()
+ * @see wfShellWikiCmd()
+ */
+function wfShellMaintenanceCmd( $script, array $parameters = array(), array $options = array() ) {
+       return wfShellWikiCmd( $script, $parameters, $options );
+}
+
+/**
+ * Generate a shell-escaped command line string to run a MediaWiki cli script.
  * Note that $parameters should be a flat array and an option with an argument
  * should consist of two consecutive items in the array (do not use "--option value").
- * @param $script string MediaWiki maintenance script path
+ * @param $script string MediaWiki cli script path
  * @param $parameters Array Arguments and options to the script
  * @param $options Array Associative array of options:
  *             'php': The path to the php executable
  *             'wrapper': Path to a PHP wrapper to handle the maintenance script
  * @return Array
  */
-function wfShellMaintenanceCmd( $script, array $parameters = array(), array $options = array() ) {
+function wfShellWikiCmd( $script, array $parameters = array(), array $options = array() ) {
        global $wgPhpCli;
        // Give site config file a chance to run the script in a wrapper.
        // The caller may likely want to call wfBasename() on $script.
-       wfRunHooks( 'wfShellMaintenanceCmd', array( &$script, &$parameters, &$options ) );
+       wfRunHooks( 'wfShellWikiCmd', array( &$script, &$parameters, &$options ) );
        $cmd = isset( $options['php'] ) ? array( $options['php'] ) : array( $wgPhpCli );
        if ( isset( $options['wrapper'] ) ) {
                $cmd[] = $options['wrapper'];
@@ -3384,7 +3394,7 @@ function wfFixSessionID() {
                        || ini_get( 'session.entropy_file' )
                )
                && intval( ini_get( 'session.entropy_length' ) ) >= 32;
-       
+
        // If built-in entropy is not enabled or not sufficient override php's built in session id generation code
        if ( !$entropyEnabled ) {
                wfDebug( __METHOD__ . ": PHP's built in entropy is disabled or not sufficient, overriding session id generation using our cryptrand source.\n" );
@@ -3595,7 +3605,7 @@ function wfFindFile( $title, $options = array() ) {
  * Returns a valid placeholder object if the file does not exist.
  *
  * @param $title Title|String
- * @return File|null A File, or null if passed an invalid Title
+ * @return LocalFile|null A File, or null if passed an invalid Title
  */
 function wfLocalFile( $title ) {
        return RepoGroup::singleton()->getLocalRepo()->newFile( $title );
@@ -3912,6 +3922,16 @@ function wfGetParserCacheStorage() {
        return ObjectCache::getInstance( $wgParserCacheType );
 }
 
+/**
+ * Get the cache object used by the language converter
+ *
+ * @return BagOStuff
+ */
+function wfGetLangConverterCacheStorage() {
+       global $wgLanguageConverterCacheType;
+       return ObjectCache::getInstance( $wgLanguageConverterCacheType );
+}
+
 /**
  * Call hook functions defined in $wgHooks
  *
@@ -3958,3 +3978,84 @@ function wfUnpack( $format, $data, $length=false ) {
        }
        return $result;
 }
+
+/**
+ * Determine if an image exists on the 'bad image list'.
+ *
+ * The format of MediaWiki:Bad_image_list is as follows:
+ *    * Only list items (lines starting with "*") are considered
+ *    * The first link on a line must be a link to a bad image
+ *    * Any subsequent links on the same line are considered to be exceptions,
+ *      i.e. articles where the image may occur inline.
+ *
+ * @param $name string the image name to check
+ * @param $contextTitle Title|bool the page on which the image occurs, if known
+ * @param $blacklist string wikitext of a file blacklist
+ * @return bool
+ */
+function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
+       static $badImageCache = null; // based on bad_image_list msg
+       wfProfileIn( __METHOD__ );
+
+       # Handle redirects
+       $redirectTitle = RepoGroup::singleton()->checkRedirect( Title::makeTitle( NS_FILE, $name ) );
+       if( $redirectTitle ) {
+               $name = $redirectTitle->getDbKey();
+       }
+
+       # Run the extension hook
+       $bad = false;
+       if( !wfRunHooks( 'BadImage', array( $name, &$bad ) ) ) {
+               wfProfileOut( __METHOD__ );
+               return $bad;
+       }
+
+       $cacheable = ( $blacklist === null );
+       if( $cacheable && $badImageCache !== null ) {
+               $badImages = $badImageCache;
+       } else { // cache miss
+               if ( $blacklist === null ) {
+                       $blacklist = wfMsgForContentNoTrans( 'bad_image_list' ); // site list
+               }
+               # Build the list now
+               $badImages = array();
+               $lines = explode( "\n", $blacklist );
+               foreach( $lines as $line ) {
+                       # List items only
+                       if ( substr( $line, 0, 1 ) !== '*' ) {
+                               continue;
+                       }
+
+                       # Find all links
+                       $m = array();
+                       if ( !preg_match_all( '/\[\[:?(.*?)\]\]/', $line, $m ) ) {
+                               continue;
+                       }
+
+                       $exceptions = array();
+                       $imageDBkey = false;
+                       foreach ( $m[1] as $i => $titleText ) {
+                               $title = Title::newFromText( $titleText );
+                               if ( !is_null( $title ) ) {
+                                       if ( $i == 0 ) {
+                                               $imageDBkey = $title->getDBkey();
+                                       } else {
+                                               $exceptions[$title->getPrefixedDBkey()] = true;
+                                       }
+                               }
+                       }
+
+                       if ( $imageDBkey !== false ) {
+                               $badImages[$imageDBkey] = $exceptions;
+                       }
+               }
+               if ( $cacheable ) {
+                       $badImageCache = $badImages;
+               }
+       }
+
+       $contextKey = $contextTitle ? $contextTitle->getPrefixedDBkey() : false;
+       $bad = isset( $badImages[$name] ) && !isset( $badImages[$name][$contextKey] );
+       wfProfileOut( __METHOD__ );
+       return $bad;
+}