* Move the Preloader class into its own file + add $wgAutoloadClasses entry * Coding style tweaks, as per MediaWiki's coding conventions * Converted from PHP-based i18n to JSON i18n * Version 1.3 with the appropriate changelog entries and whatnot * Deprecated Preloader.php (but didn't fully remove it yet) in favor of extension.json -- MediaWiki 1.25 or newer is now required for this extension * Added myself into authors * Changed the Special:Version URL back to MediaWiki.org as it should be the canonical location for extension (and skin etc.) documentation; since this is an updated version of [[mw:Extension:Preloader]] it should be no problem to update that page to point to the correct repository etc. * Tweak the README file to account for new MW requirements + extension loading method * Fix $wgPreloaderSource so that it works again ( HT @legoktm )
59 lines
No EOL
1.4 KiB
PHP
59 lines
No EOL
1.4 KiB
PHP
<?php
|
|
|
|
class Preloader {
|
|
|
|
/** Hook function for the preloading */
|
|
public static function mainHook( &$text, &$title ) {
|
|
$src = self::preloadSource( $title->getNamespace() );
|
|
if ( $src ) {
|
|
$stx = self::sourceText( $src );
|
|
if ( $stx ) {
|
|
$text = $stx;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Determine what page should be used as the source of preloaded text
|
|
* for a given namespace and return the title (in text form)
|
|
*
|
|
* @param int $namespace Namespace to check for
|
|
* @return string|bool Name of the page to be preloaded or bool false
|
|
*/
|
|
static function preloadSource( $namespace ) {
|
|
global $wgPreloaderSource;
|
|
if ( isset( $wgPreloaderSource[$namespace] ) ) {
|
|
return $wgPreloaderSource[$namespace];
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Grab the current text of a given page if it exists
|
|
*
|
|
* @param string $page Text form of the page title
|
|
* @return string|bool
|
|
*/
|
|
static function sourceText( $page ) {
|
|
$title = Title::newFromText( $page );
|
|
if ( $title && $title->exists() ) {
|
|
$revision = Revision::newFromTitle( $title );
|
|
return self::transform( $revision->getText() );
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove sections from the text and trim whitespace
|
|
*
|
|
* @param $text
|
|
* @return string
|
|
*/
|
|
static function transform( $text ) {
|
|
$text = trim( preg_replace( '/<\/?includeonly>/s', '', $text ) );
|
|
return trim( preg_replace( '/<noinclude>.*<\/noinclude>/s', '', $text ) );
|
|
}
|
|
} |