123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- <?php
- /**
- * Skin template for the fallback skin.
- *
- * The structure is copied from the example skin (mediawiki/skins/Example).
- *
- * @since 1.24
- * @file
- */
- use MediaWiki\MediaWikiServices;
- /**
- * BaseTemplate class for the fallback skin
- */
- class SkinFallbackTemplate extends BaseTemplate {
- /**
- * @return array
- */
- private function findInstalledSkins() {
- $styleDirectory = $this->config->get( 'StyleDirectory' );
- // Get all subdirectories which might contains skins
- $possibleSkins = scandir( $styleDirectory );
- $possibleSkins = array_filter( $possibleSkins, function ( $maybeDir ) use ( $styleDirectory ) {
- return $maybeDir !== '.' && $maybeDir !== '..' && is_dir( "$styleDirectory/$maybeDir" );
- } );
- // Filter out skins that aren't installed
- $possibleSkins = array_filter( $possibleSkins, function ( $skinDir ) use ( $styleDirectory ) {
- return is_file( "$styleDirectory/$skinDir/skin.json" )
- || is_file( "$styleDirectory/$skinDir/$skinDir.php" );
- } );
- return $possibleSkins;
- }
- /**
- * Inform the user why they are seeing this skin.
- *
- * @return string
- */
- private function buildHelpfulInformationMessage() {
- $defaultSkin = $this->config->get( 'DefaultSkin' );
- $installedSkins = $this->findInstalledSkins();
- $skinFactory = MediaWikiServices::getInstance()->getSkinFactory();
- $enabledSkins = $skinFactory->getSkinNames();
- $enabledSkins = array_change_key_case( $enabledSkins, CASE_LOWER );
- if ( $installedSkins ) {
- $skinsInstalledText = [];
- $skinsInstalledSnippet = [];
- foreach ( $installedSkins as $skin ) {
- $normalizedKey = strtolower( $skin );
- $isEnabled = array_key_exists( $normalizedKey, $enabledSkins );
- if ( $isEnabled ) {
- $skinsInstalledText[] = $this->getMsg( 'default-skin-not-found-row-enabled' )
- ->params( $normalizedKey, $skin )->plain();
- } else {
- $skinsInstalledText[] = $this->getMsg( 'default-skin-not-found-row-disabled' )
- ->params( $normalizedKey, $skin )->plain();
- $skinsInstalledSnippet[] = $this->getSnippetForSkin( $skin );
- }
- }
- return $this->getMsg( 'default-skin-not-found' )->params(
- $defaultSkin,
- implode( "\n", $skinsInstalledText ),
- implode( "\n", $skinsInstalledSnippet ) )->numParams(
- count( $skinsInstalledText ),
- count( $skinsInstalledSnippet )
- )->parseAsBlock();
- } else {
- return $this->getMsg( 'default-skin-not-found-no-skins' )->params(
- $defaultSkin
- )->parseAsBlock();
- }
- }
- /**
- * Get the appropriate LocalSettings.php snippet to enable the given skin
- *
- * @param string $skin
- * @return string
- */
- private function getSnippetForSkin( $skin ) {
- global $IP;
- if ( file_exists( "$IP/skins/$skin/skin.json" ) ) {
- return "wfLoadSkin( '$skin' );";
- } else {
- return "require_once \"\$IP/skins/$skin/$skin.php\";";
- }
- }
- /**
- * Outputs the entire contents of the page. No navigation (other than search box), just the big
- * warning message and page content.
- */
- public function execute() {
- $this->html( 'headelement' );
- echo Html::warningBox( $this->buildHelpfulInformationMessage() );
- ?>
- <form action="<?php $this->text( 'wgScript' ) ?>">
- <input type="hidden" name="title" value="<?php $this->text( 'searchtitle' ) ?>" />
- <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
- <?php echo $this->makeSearchInput( [ "id" => "searchInput" ] ) ?>
- <?php echo $this->makeSearchButton( 'go' ) ?>
- </form>
- <div class="mw-body" role="main">
- <h1 class="firstHeading"><?php $this->html( 'title' ) ?></h1>
- <div class="mw-body-content">
- <?php $this->html( 'bodytext' ) ?>
- <?php $this->html( 'catlinks' ) ?>
- </div>
- </div>
- <?php $this->printTrail() ?>
- </body></html>
- <?php
- }
- }
|