Completely remove skin autodiscovery
Also update documentation. Bug: 65748 Change-Id: I393896281e901de2000c09c0abd16ee2a0f41e2f
This commit is contained in:
parent
07da3a1362
commit
5b11fa4146
3 changed files with 22 additions and 137 deletions
|
|
@ -23,6 +23,9 @@ regularly. Below only new and removed languages are listed, as well as
|
|||
changes to languages because of Bugzilla reports.
|
||||
|
||||
=== Other changes in 1.25 ===
|
||||
* The skin autodiscovery mechanism, deprecated in MediaWiki 1.23, has been
|
||||
removed. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for
|
||||
migration guide for creators and users of custom skins that relied on it.
|
||||
|
||||
== Compatibility ==
|
||||
|
||||
|
|
|
|||
|
|
@ -53,40 +53,30 @@ server-side source files. This is done by editing some pages on the wiki:
|
|||
These can also be customised on a per-user basis, by editing
|
||||
[[User:<name>/vector.css]], [[User:<name>/vector.js]], etc.
|
||||
|
||||
This feature has led to a wide variety of "user styles" becoming available:
|
||||
|
||||
https://www.mediawiki.org/wiki/Manual:Gallery_of_user_styles
|
||||
== Custom skins ==
|
||||
|
||||
If you want a different look for your wiki, that gallery is a good place to start.
|
||||
Several custom skins are available as of 2014.
|
||||
|
||||
== Drop-in custom skins ==
|
||||
https://www.mediawiki.org/wiki/Category:All_skins
|
||||
|
||||
If you put a file in MediaWiki's skins directory, ending in .php, the name of
|
||||
the file will automatically be added as a skin name, and the file will be
|
||||
expected to contain a class called Skin<name> with the skin class. You can then
|
||||
make that skin the default by adding to LocalSettings.php:
|
||||
Installing a skin requires adding its files in a subdirectory under skins/ and
|
||||
adding an appropriate require_once line to LocalSettings.php, similarly to how
|
||||
extensions are installed.
|
||||
|
||||
$wgDefaultSkin = '<name>';
|
||||
You can then make that skin the default by adding:
|
||||
$wgDefaultSkin = '<name>';
|
||||
|
||||
You can also disable dropped-in or core skins using:
|
||||
Or disable it entirely by removing the require_once line. (User settings will
|
||||
not be lost if it's reenabled later.)
|
||||
|
||||
$wgSkipSkins[] = '<name>';
|
||||
See https://www.mediawiki.org/wiki/Manual:Skinning for more information on
|
||||
writing new skins.
|
||||
|
||||
This technique is used by the more ambitious MediaWiki site operators, to
|
||||
create complex custom skins for their wikis. It should be preferred over
|
||||
editing the core Monobook skin directly.
|
||||
|
||||
See https://www.mediawiki.org/wiki/Manual:Skinning for more information.
|
||||
|
||||
== Extension skins ==
|
||||
|
||||
It is now possible (since MediaWiki 1.12) to write a skin as a standard
|
||||
MediaWiki extension, enabled via LocalSettings.php. This is done by adding
|
||||
it to $wgValidSkinNames, for example:
|
||||
|
||||
$wgValidSkinNames['mycoolskin'] = 'MyCoolSkin';
|
||||
|
||||
and then registering a class in $wgAutoloadClasses called SkinMycoolSkin, which
|
||||
derives from Skin. This technique is apparently not yet used (as of 2008)
|
||||
outside the DumpHTML extension.
|
||||
|
||||
Until MediaWiki 1.25 it used to be possible to just put a <name>.php file in
|
||||
MediaWiki's skins/ directory, which would be loaded and expected to contain the
|
||||
Skin<name> class. This way has always been discouraged because of its limitations
|
||||
(inability to add localisation messages, ResourceLoader modules, etc.) and
|
||||
awkwardness in managing such skins. For information on migrating skins using
|
||||
this old method, see <https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery>.
|
||||
|
|
|
|||
|
|
@ -40,13 +40,6 @@ class SkinFactory {
|
|||
* @var array
|
||||
*/
|
||||
private $displayNames = array();
|
||||
/**
|
||||
* Map of name => class name without "Skin" prefix, for legacy skins using the autodiscovery
|
||||
* mechanism
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $legacySkins = array();
|
||||
|
||||
/**
|
||||
* @var SkinFactory
|
||||
|
|
@ -82,66 +75,6 @@ class SkinFactory {
|
|||
$this->displayNames[$name] = $displayName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function getLegacySkinNames() {
|
||||
static $skinsInitialised = false;
|
||||
|
||||
if ( !$skinsInitialised || !count( $this->legacySkins ) ) {
|
||||
# Get a list of available skins
|
||||
# Build using the regular expression '^(.*).php$'
|
||||
# Array keys are all lower case, array value keep the case used by filename
|
||||
#
|
||||
wfProfileIn( __METHOD__ . '-init' );
|
||||
|
||||
global $wgStyleDirectory;
|
||||
|
||||
$skinDir = dir( $wgStyleDirectory );
|
||||
|
||||
if ( $skinDir !== false && $skinDir !== null ) {
|
||||
# while code from www.php.net
|
||||
while ( false !== ( $file = $skinDir->read() ) ) {
|
||||
// Skip non-PHP files, hidden files, and '.dep' includes
|
||||
$matches = array();
|
||||
|
||||
if ( preg_match( '/^([^.]*)\.php$/', $file, $matches ) ) {
|
||||
$aSkin = $matches[1];
|
||||
|
||||
// Explicitly disallow loading core skins via the autodiscovery mechanism.
|
||||
//
|
||||
// They should be loaded already (in a non-autodicovery way), but old files might still
|
||||
// exist on the server because our MW version upgrade process is widely documented as
|
||||
// requiring just copying over all files, without removing old ones.
|
||||
//
|
||||
// This is one of the reasons we should have never used autodiscovery in the first
|
||||
// place. This hack can be safely removed when autodiscovery is gone.
|
||||
if ( in_array( $aSkin, array( 'CologneBlue', 'Modern', 'MonoBook', 'Vector' ) ) ) {
|
||||
wfLogWarning(
|
||||
"An old copy of the $aSkin skin was found in your skins/ directory. " .
|
||||
"You should remove it to avoid problems in the future." .
|
||||
"See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for details."
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
wfLogWarning(
|
||||
"A skin using autodiscovery mechanism, $aSkin, was found in your skins/ directory. " .
|
||||
"The mechanism will be removed in MediaWiki 1.25 and the skin will no longer be recognized. " .
|
||||
"See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for information how to fix this."
|
||||
);
|
||||
$this->legacySkins[strtolower( $aSkin )] = $aSkin;
|
||||
}
|
||||
}
|
||||
$skinDir->close();
|
||||
}
|
||||
$skinsInitialised = true;
|
||||
wfProfileOut( __METHOD__ . '-init' );
|
||||
}
|
||||
return $this->legacySkins;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an associative array of:
|
||||
* skin name => human readable name
|
||||
|
|
@ -149,43 +82,7 @@ class SkinFactory {
|
|||
* @return array
|
||||
*/
|
||||
public function getSkinNames() {
|
||||
return array_merge(
|
||||
$this->getLegacySkinNames(),
|
||||
$this->displayNames
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a legacy skin which uses the autodiscovery mechanism.
|
||||
*
|
||||
* @param string $name
|
||||
* @return Skin|bool False if the skin couldn't be constructed
|
||||
*/
|
||||
private function getLegacySkin( $name ) {
|
||||
$skinNames = $this->getLegacySkinNames();
|
||||
if ( !isset( $skinNames[$name] ) ) {
|
||||
return false;
|
||||
}
|
||||
$skinName = $skinNames[$name];
|
||||
$className = "Skin{$skinName}";
|
||||
|
||||
# Grab the skin class and initialise it.
|
||||
if ( !class_exists( $className ) ) {
|
||||
global $wgStyleDirectory;
|
||||
require_once "{$wgStyleDirectory}/{$skinName}.php";
|
||||
|
||||
# Check if we got it
|
||||
if ( !class_exists( $className ) ) {
|
||||
# DO NOT die if the class isn't found. This breaks maintenance
|
||||
# scripts and can cause a user account to be unrecoverable
|
||||
# except by SQL manipulation if a previously valid skin name
|
||||
# is no longer valid.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$skin = new $className( $name );
|
||||
return $skin;
|
||||
|
||||
return $this->displayNames;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -197,11 +94,6 @@ class SkinFactory {
|
|||
*/
|
||||
public function makeSkin( $name ) {
|
||||
if ( !isset( $this->factoryFunctions[$name] ) ) {
|
||||
// Check the legacy autodiscovery method of skin loading
|
||||
$legacy = $this->getLegacySkin( $name );
|
||||
if ( $legacy ) {
|
||||
return $legacy;
|
||||
}
|
||||
throw new SkinException( "No registered builder available for $name." );
|
||||
}
|
||||
$skin = call_user_func( $this->factoryFunctions[$name], $name );
|
||||
|
|
|
|||
Loading…
Reference in a new issue