/** * Enable expansion of local URLs. * * In order to output stand-alone content with all absolute links, it is * necessary to expand local URLs. MediaWiki tries to do this in a few * places by sniffing into the 'action' GET request parameter, but this * fails in many ways. This function tries to remedy this. * * This function pre-expands all base URL fragments used by MediaWiki, * and also enables URL expansion in the Wikilog::GetLocalURL hook. * The original values of all URLs are saved when $enable = true, and * restored back when $enabled = false. * * The proper way to use this function is: * @code * $saveExpUrls = WikilogParser::expandLocalUrls(); * # ...code that uses $wgParser in order to parse articles... * WikilogParser::expandLocalUrls( $saveExpUrls ); * @endcode * * @note Using this function changes the behavior of Parser. When enabled, * parsed content should be cached under a different key. */ public static function expandLocalUrls( $enable = true ) { global $wgScriptPath, $wgUploadPath, $wgStylePath, $wgMathPath, $wgLocalFileRepo; static $originalPaths = null; $prev = self::$expandingUrls; if ( $enable ) { if ( !self::$expandingUrls ) { self::$expandingUrls = true; # Save original values. $originalPaths = array( $wgScriptPath, $wgUploadPath, $wgStylePath, $wgMathPath, $wgLocalFileRepo['url'] ); # Expand paths. $wgScriptPath = wfExpandUrl( $wgScriptPath ); $wgUploadPath = wfExpandUrl( $wgUploadPath ); $wgStylePath = wfExpandUrl( $wgStylePath ); $wgMathPath = wfExpandUrl( $wgMathPath ); $wgLocalFileRepo['url'] = wfExpandUrl( $wgLocalFileRepo['url'] ); # Destroy existing RepoGroup, if any. RepoGroup::destroySingleton(); } } else { if ( self::$expandingUrls ) { self::$expandingUrls = false; # Restore original values. list( $wgScriptPath, $wgUploadPath, $wgStylePath, $wgMathPath, $wgLocalFileRepo['url'] ) = $originalPaths; # Destroy existing RepoGroup, if any. RepoGroup::destroySingleton(); } } return $prev; }