mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Xomw: Change href to use proper File: namespace
This commit is contained in:
parent
704809e5b9
commit
7894c6d6f4
@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.core.lists.hashs; import gplx.*; import gplx.core.*; import gplx.core.lists.*;
|
||||
import gplx.core.primitives.*;
|
||||
public class Hash_adp__int {
|
||||
private final Hash_adp hash = Hash_adp_.New();
|
||||
private final Ordered_hash hash = Ordered_hash_.New();
|
||||
private final Int_obj_ref tmp_key = Int_obj_ref.New_neg1();
|
||||
public void Clear() {hash.Clear();}
|
||||
public int Len() {return hash.Count();}
|
||||
@ -28,4 +28,5 @@ public class Hash_adp__int {
|
||||
public void Add(Int_obj_ref key, Object obj) {hash.Add(key, obj);}
|
||||
public void Add_if_dupe_use_1st(int key, Object obj) {hash.Add_if_dupe_use_1st(Int_obj_ref.New(key), obj);}
|
||||
public void Add_if_dupe_use_nth(Int_obj_ref key, Object obj) {hash.Add_if_dupe_use_nth(key, obj);}
|
||||
public Hash_adp__int Add_as_bry(int key, String val) {hash.Add(Int_obj_ref.New(key), Bry_.new_u8(val)); return this;}
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ public class XomwLinker {
|
||||
// global $wgContLang;
|
||||
//
|
||||
// // First we check whether the namespace exists or not.
|
||||
// if ( MWNamespace::exists( $namespace ) ) {
|
||||
// if ( XomwNamespace::exists( $namespace ) ) {
|
||||
// if ( $namespace == NS_MAIN ) {
|
||||
// $name = $context->msg( 'blanknamespace' )->text();
|
||||
// } else {
|
||||
@ -608,8 +608,8 @@ public class XomwLinker {
|
||||
// ThumbnailImage::toHtml() already adds page= onto the end of DjVu URLs
|
||||
// So we don't need to pass it here in $query. However, the URL for the
|
||||
// zoom icon still needs it, so we make a unique query for it. See bug 14771
|
||||
// byte[] url = $title->getLocalURL($query);
|
||||
byte[] url = Bry_.Empty;
|
||||
byte[] url = title.getLocalURL(query);
|
||||
// byte[] url = Bry_.Empty;
|
||||
// if ($page) {
|
||||
// $url = wfAppendQuery($url, [ 'page' => $page ]);
|
||||
// }
|
||||
@ -1256,7 +1256,7 @@ public class XomwLinker {
|
||||
// function ( $match ) use ( $title, $local, $wikiId ) {
|
||||
// global $wgContLang;
|
||||
//
|
||||
// $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
|
||||
// $medians = '(?:' . preg_quote( XomwNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
|
||||
// $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):';
|
||||
//
|
||||
// $comment = $match[0];
|
||||
|
@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.mediawiki.includes; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*;
|
||||
import gplx.xowa.mediawiki.languages.*;
|
||||
import gplx.xowa.mediawiki.includes.title.*;
|
||||
/**
|
||||
* MediaWikiServices is the service locator for the application scope of MediaWiki.
|
||||
@ -564,14 +565,15 @@ public class XomwMediaWikiServices {
|
||||
// public function getLinkRenderer() {
|
||||
// return $this->getService( 'LinkRenderer' );
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * @since 1.28
|
||||
// * @return TitleFormatter
|
||||
// */
|
||||
// public function getTitleFormatter() {
|
||||
|
||||
/**
|
||||
* @since 1.28
|
||||
* @return TitleFormatter
|
||||
*/
|
||||
public XomwMediaWikiTitleCodec getTitleFormatter() {
|
||||
// return $this->getService( 'TitleFormatter' );
|
||||
// }
|
||||
return titleParser;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.28
|
||||
@ -581,7 +583,7 @@ public class XomwMediaWikiServices {
|
||||
// return $this->getService( 'TitleParser' );
|
||||
return titleParser;
|
||||
}
|
||||
private XomwMediaWikiTitleCodec titleParser = new XomwMediaWikiTitleCodec();
|
||||
private XomwMediaWikiTitleCodec titleParser = new XomwMediaWikiTitleCodec(new XomwLanguage());
|
||||
|
||||
// /**
|
||||
// * @since 1.28
|
||||
|
@ -0,0 +1,502 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.mediawiki.includes; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*;
|
||||
import gplx.core.lists.hashs.*;
|
||||
public class XomwNamespace {
|
||||
//
|
||||
// /**
|
||||
// * These namespaces should always be first-letter capitalized, now and
|
||||
// * forevermore. Historically, they could've probably been lowercased too,
|
||||
// * but some things are just too ingrained now. :)
|
||||
// */
|
||||
// private static $alwaysCapitalizedNamespaces = [ NS_SPECIAL, NS_USER, NS_MEDIAWIKI ];
|
||||
//
|
||||
// /**
|
||||
// * Throw an exception when trying to get the subject or talk page
|
||||
// * for a given namespace where it does not make sense.
|
||||
// * Special namespaces are defined in includes/Defines.php and have
|
||||
// * a value below 0 (ex: NS_SPECIAL = -1 , NS_MEDIA = -2)
|
||||
// *
|
||||
// * @param int $index
|
||||
// * @param String $method
|
||||
// *
|
||||
// * @throws MWException
|
||||
// * @return boolean
|
||||
// */
|
||||
// private static function isMethodValidFor($index, $method) {
|
||||
// if ($index < NS_MAIN) {
|
||||
// throw new MWException("$method does not make any sense for given namespace $index");
|
||||
// }
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Can pages in the given namespace be moved?
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function isMovable($index) {
|
||||
// global $wgAllowImageMoving;
|
||||
//
|
||||
// $result = !($index < NS_MAIN || ($index == NS_FILE && !$wgAllowImageMoving));
|
||||
//
|
||||
// /**
|
||||
// * @since 1.20
|
||||
// */
|
||||
// Hooks::run('NamespaceIsMovable', [ $index, &$result ]);
|
||||
//
|
||||
// return $result;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Is the given namespace is a subject (non-talk) namespace?
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return boolean
|
||||
// * @since 1.19
|
||||
// */
|
||||
// public static function isSubject($index) {
|
||||
// return !self::isTalk($index);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Is the given namespace a talk namespace?
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function isTalk($index) {
|
||||
// return $index > NS_MAIN
|
||||
// && $index % 2;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Get the talk namespace index for a given namespace
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return int
|
||||
// */
|
||||
// public static function getTalk($index) {
|
||||
// self::isMethodValidFor($index, __METHOD__);
|
||||
// return self::isTalk($index)
|
||||
// ? $index
|
||||
// : $index + 1;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Get the subject namespace index for a given namespace
|
||||
// * Special namespaces (NS_MEDIA, NS_SPECIAL) are always the subject.
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return int
|
||||
// */
|
||||
// public static function getSubject($index) {
|
||||
// # Handle special namespaces
|
||||
// if ($index < NS_MAIN) {
|
||||
// return $index;
|
||||
// }
|
||||
//
|
||||
// return self::isTalk($index)
|
||||
// ? $index - 1
|
||||
// : $index;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Get the associated namespace.
|
||||
// * For talk namespaces, returns the subject (non-talk) namespace
|
||||
// * For subject (non-talk) namespaces, returns the talk namespace
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return int|null If no associated namespace could be found
|
||||
// */
|
||||
// public static function getAssociated($index) {
|
||||
// self::isMethodValidFor($index, __METHOD__);
|
||||
//
|
||||
// if (self::isSubject($index)) {
|
||||
// return self::getTalk($index);
|
||||
// } elseif (self::isTalk($index)) {
|
||||
// return self::getSubject($index);
|
||||
// } else {
|
||||
// return null;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns whether the specified namespace exists
|
||||
// *
|
||||
// * @param int $index
|
||||
// *
|
||||
// * @return boolean
|
||||
// * @since 1.19
|
||||
// */
|
||||
// public static function exists($index) {
|
||||
// $nslist = self::getCanonicalNamespaces();
|
||||
// return isset($nslist[$index]);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns whether the specified namespaces are the same namespace
|
||||
// *
|
||||
// * @note It's possible that in the future we may start using something
|
||||
// * other than just namespace indexes. Under that circumstance making use
|
||||
// * of this function rather than directly doing comparison will make
|
||||
// * sure that code will not potentially break.
|
||||
// *
|
||||
// * @param int $ns1 The first namespace index
|
||||
// * @param int $ns2 The second namespace index
|
||||
// *
|
||||
// * @return boolean
|
||||
// * @since 1.19
|
||||
// */
|
||||
// public static function equals($ns1, $ns2) {
|
||||
// return $ns1 == $ns2;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns whether the specified namespaces share the same subject.
|
||||
// * eg: NS_USER and NS_USER wil return true, as well
|
||||
// * NS_USER and NS_USER_TALK will return true.
|
||||
// *
|
||||
// * @param int $ns1 The first namespace index
|
||||
// * @param int $ns2 The second namespace index
|
||||
// *
|
||||
// * @return boolean
|
||||
// * @since 1.19
|
||||
// */
|
||||
// public static function subjectEquals($ns1, $ns2) {
|
||||
// return self::getSubject($ns1) == self::getSubject($ns2);
|
||||
// }
|
||||
|
||||
/**
|
||||
* Returns array of all defined namespaces with their canonical
|
||||
* (English) names.
|
||||
*
|
||||
* @param boolean $rebuild Rebuild namespace list (default = false). Used for testing.
|
||||
*
|
||||
* @return array
|
||||
* @since 1.17
|
||||
*/
|
||||
private static Hash_adp__int namespaces = null;
|
||||
public static Hash_adp__int getCanonicalNamespaces() {return getCanonicalNamespaces(false);}
|
||||
public static Hash_adp__int getCanonicalNamespaces(boolean rebuild) {
|
||||
if (namespaces == null || rebuild) {
|
||||
// global $wgExtraNamespaces, $wgCanonicalNamespaceNames;
|
||||
namespaces = XomwSetup.wgCanonicalNamespaceNames;
|
||||
namespaces.Add_as_bry(XomwDefines.NS_MAIN, "");
|
||||
|
||||
// // Add extension namespaces
|
||||
// $namespaces += ExtensionRegistry::getInstance()->getAttribute('ExtensionNamespaces');
|
||||
// if (is_array($wgExtraNamespaces)) {
|
||||
// $namespaces += $wgExtraNamespaces;
|
||||
// }
|
||||
// Hooks::run('CanonicalNamespaces', [ &$namespaces ]);
|
||||
}
|
||||
return namespaces;
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Returns the canonical (English) name for a given index
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return String|boolean If no canonical definition.
|
||||
// */
|
||||
// public static function getCanonicalName($index) {
|
||||
// $nslist = self::getCanonicalNamespaces();
|
||||
// if (isset($nslist[$index])) {
|
||||
// return $nslist[$index];
|
||||
// } else {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns the index for a given canonical name, or NULL
|
||||
// * The input *must* be converted to lower case first
|
||||
// *
|
||||
// * @param String $name Namespace name
|
||||
// * @return int
|
||||
// */
|
||||
// public static function getCanonicalIndex($name) {
|
||||
// static $xNamespaces = false;
|
||||
// if ($xNamespaces == false) {
|
||||
// $xNamespaces = [];
|
||||
// foreach (self::getCanonicalNamespaces() as $i => $text) {
|
||||
// $xNamespaces[strtolower($text)] = $i;
|
||||
// }
|
||||
// }
|
||||
// if (array_key_exists($name, $xNamespaces)) {
|
||||
// return $xNamespaces[$name];
|
||||
// } else {
|
||||
// return null;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns an array of the namespaces (by integer id) that exist on the
|
||||
// * wiki. Used primarily by the api in help documentation.
|
||||
// * @return array
|
||||
// */
|
||||
// public static function getValidNamespaces() {
|
||||
// static $mValidNamespaces = null;
|
||||
//
|
||||
// if (is_null($mValidNamespaces)) {
|
||||
// foreach (array_keys(self::getCanonicalNamespaces()) as $ns) {
|
||||
// if ($ns >= 0) {
|
||||
// $mValidNamespaces[] = $ns;
|
||||
// }
|
||||
// }
|
||||
// // T109137: sort numerically
|
||||
// sort($mValidNamespaces, SORT_NUMERIC);
|
||||
// }
|
||||
//
|
||||
// return $mValidNamespaces;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Can this namespace ever have a talk namespace?
|
||||
// *
|
||||
// * @param int $index Namespace index
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function canTalk($index) {
|
||||
// return $index >= NS_MAIN;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Does this namespace contain content, for the purposes of calculating
|
||||
// * statistics, etc?
|
||||
// *
|
||||
// * @param int $index Index to check
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function isContent($index) {
|
||||
// global $wgContentNamespaces;
|
||||
// return $index == NS_MAIN || in_array($index, $wgContentNamespaces);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Might pages in this namespace require the use of the Signature button on
|
||||
// * the edit toolbar?
|
||||
// *
|
||||
// * @param int $index Index to check
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function wantSignatures($index) {
|
||||
// global $wgExtraSignatureNamespaces;
|
||||
// return self::isTalk($index) || in_array($index, $wgExtraSignatureNamespaces);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Can pages in a namespace be watched?
|
||||
// *
|
||||
// * @param int $index
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function isWatchable($index) {
|
||||
// return $index >= NS_MAIN;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Does the namespace allow subpages?
|
||||
// *
|
||||
// * @param int $index Index to check
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function hasSubpages($index) {
|
||||
// global $wgNamespacesWithSubpages;
|
||||
// return !empty($wgNamespacesWithSubpages[$index]);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Get a list of all namespace indices which are considered to contain content
|
||||
// * @return array Array of namespace indices
|
||||
// */
|
||||
// public static function getContentNamespaces() {
|
||||
// global $wgContentNamespaces;
|
||||
// if (!is_array($wgContentNamespaces) || $wgContentNamespaces == []) {
|
||||
// return [ NS_MAIN ];
|
||||
// } elseif (!in_array(NS_MAIN, $wgContentNamespaces)) {
|
||||
// // always force NS_MAIN to be part of array (to match the algorithm used by isContent)
|
||||
// return array_merge([ NS_MAIN ], $wgContentNamespaces);
|
||||
// } else {
|
||||
// return $wgContentNamespaces;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * List all namespace indices which are considered subject, aka not a talk
|
||||
// * or special namespace. See also XomwNamespace::isSubject
|
||||
// *
|
||||
// * @return array Array of namespace indices
|
||||
// */
|
||||
// public static function getSubjectNamespaces() {
|
||||
// return array_filter(
|
||||
// XomwNamespace::getValidNamespaces(),
|
||||
// 'XomwNamespace::isSubject'
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * List all namespace indices which are considered talks, aka not a subject
|
||||
// * or special namespace. See also XomwNamespace::isTalk
|
||||
// *
|
||||
// * @return array Array of namespace indices
|
||||
// */
|
||||
// public static function getTalkNamespaces() {
|
||||
// return array_filter(
|
||||
// XomwNamespace::getValidNamespaces(),
|
||||
// 'XomwNamespace::isTalk'
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Is the namespace first-letter capitalized?
|
||||
// *
|
||||
// * @param int $index Index to check
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function isCapitalized($index) {
|
||||
// global $wgCapitalLinks, $wgCapitalLinkOverrides;
|
||||
// // Turn NS_MEDIA into NS_FILE
|
||||
// $index = $index == NS_MEDIA ? NS_FILE : $index;
|
||||
//
|
||||
// // Make sure to get the subject of our namespace
|
||||
// $index = self::getSubject($index);
|
||||
//
|
||||
// // Some namespaces are special and should always be upper case
|
||||
// if (in_array($index, self::$alwaysCapitalizedNamespaces)) {
|
||||
// return true;
|
||||
// }
|
||||
// if (isset($wgCapitalLinkOverrides[$index])) {
|
||||
// // $wgCapitalLinkOverrides is explicitly set
|
||||
// return $wgCapitalLinkOverrides[$index];
|
||||
// }
|
||||
// // Default to the global setting
|
||||
// return $wgCapitalLinks;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Does the namespace (potentially) have different aliases for different
|
||||
// * genders. Not all languages make a distinction here.
|
||||
// *
|
||||
// * @since 1.18
|
||||
// * @param int $index Index to check
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function hasGenderDistinction($index) {
|
||||
// return $index == NS_USER || $index == NS_USER_TALK;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * It is not possible to use pages from this namespace as template?
|
||||
// *
|
||||
// * @since 1.20
|
||||
// * @param int $index Index to check
|
||||
// * @return boolean
|
||||
// */
|
||||
// public static function isNonincludable($index) {
|
||||
// global $wgNonincludableNamespaces;
|
||||
// return $wgNonincludableNamespaces && in_array($index, $wgNonincludableNamespaces);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Get the default content model for a namespace
|
||||
// * This does not mean that all pages in that namespace have the model
|
||||
// *
|
||||
// * @since 1.21
|
||||
// * @param int $index Index to check
|
||||
// * @return null|String Default model name for the given namespace, if set
|
||||
// */
|
||||
// public static function getNamespaceContentModel($index) {
|
||||
// global $wgNamespaceContentModels;
|
||||
// return isset($wgNamespaceContentModels[$index])
|
||||
// ? $wgNamespaceContentModels[$index]
|
||||
// : null;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Determine which restriction levels it makes sense to use in a namespace,
|
||||
// * optionally filtered by a user's rights.
|
||||
// *
|
||||
// * @since 1.23
|
||||
// * @param int $index Index to check
|
||||
// * @param User $user User to check
|
||||
// * @return array
|
||||
// */
|
||||
// public static function getRestrictionLevels($index, User $user = null) {
|
||||
// global $wgNamespaceProtection, $wgRestrictionLevels;
|
||||
//
|
||||
// if (!isset($wgNamespaceProtection[$index])) {
|
||||
// // All levels are valid if there's no namespace restriction.
|
||||
// // But still filter by user, if necessary
|
||||
// $levels = $wgRestrictionLevels;
|
||||
// if ($user) {
|
||||
// $levels = array_values(array_filter($levels, function ($level) use ($user) {
|
||||
// $right = $level;
|
||||
// if ($right == 'sysop') {
|
||||
// $right = 'editprotected'; // BC
|
||||
// }
|
||||
// if ($right == 'autoconfirmed') {
|
||||
// $right = 'editsemiprotected'; // BC
|
||||
// }
|
||||
// return ($right == '' || $user->isAllowed($right));
|
||||
// }));
|
||||
// }
|
||||
// return $levels;
|
||||
// }
|
||||
//
|
||||
// // First, get the list of groups that can edit this namespace.
|
||||
// $namespaceGroups = [];
|
||||
// $combine = 'array_merge';
|
||||
// foreach ((array)$wgNamespaceProtection[$index] as $right) {
|
||||
// if ($right == 'sysop') {
|
||||
// $right = 'editprotected'; // BC
|
||||
// }
|
||||
// if ($right == 'autoconfirmed') {
|
||||
// $right = 'editsemiprotected'; // BC
|
||||
// }
|
||||
// if ($right != '') {
|
||||
// $namespaceGroups = call_user_func($combine, $namespaceGroups,
|
||||
// User::getGroupsWithPermission($right));
|
||||
// $combine = 'array_intersect';
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // Now, keep only those restriction levels where there is at least one
|
||||
// // group that can edit the namespace but would be blocked by the
|
||||
// // restriction.
|
||||
// $usableLevels = [ '' ];
|
||||
// foreach ($wgRestrictionLevels as $level) {
|
||||
// $right = $level;
|
||||
// if ($right == 'sysop') {
|
||||
// $right = 'editprotected'; // BC
|
||||
// }
|
||||
// if ($right == 'autoconfirmed') {
|
||||
// $right = 'editsemiprotected'; // BC
|
||||
// }
|
||||
// if ($right != '' && (!$user || $user->isAllowed($right)) &&
|
||||
// array_diff($namespaceGroups, User::getGroupsWithPermission($right))
|
||||
// ) {
|
||||
// $usableLevels[] = $level;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return $usableLevels;
|
||||
// }
|
||||
}
|
@ -0,0 +1,900 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.mediawiki.includes; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*;
|
||||
import gplx.core.lists.hashs.*;
|
||||
/**
|
||||
* Include most things that are needed to make MediaWiki work.
|
||||
*
|
||||
* This file is included by WebStart.php and doMaintenance.php so that both
|
||||
* web and maintenance scripts share a final set up phase to include necessary
|
||||
* files and create global Object variables.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* @file
|
||||
*/
|
||||
public class XomwSetup {
|
||||
// /**
|
||||
// * This file is not a valid entry point, perform no further processing unless
|
||||
// * MEDIAWIKI is defined
|
||||
// */
|
||||
// if ( !defined( 'MEDIAWIKI' ) ) {
|
||||
// exit( 1 );
|
||||
// }
|
||||
//
|
||||
// $fname = 'Setup.php';
|
||||
// $ps_setup = Profiler::instance()->scopedProfileIn( $fname );
|
||||
//
|
||||
// // Load queued extensions
|
||||
// ExtensionRegistry::getInstance()->loadFromQueue();
|
||||
// // Don't let any other extensions load
|
||||
// ExtensionRegistry::getInstance()->finish();
|
||||
//
|
||||
// // Check to see if we are at the file scope
|
||||
// if ( !isset( $wgVersion ) ) {
|
||||
// echo "Error, Setup.php must be included from the file scope, after DefaultSettings.php\n";
|
||||
// die( 1 );
|
||||
// }
|
||||
//
|
||||
// mb_internal_encoding( 'UTF-8' );
|
||||
//
|
||||
// // Set various default paths sensibly...
|
||||
// $ps_default = Profiler::instance()->scopedProfileIn( $fname . '-defaults' );
|
||||
//
|
||||
// if ( $wgScript === false ) {
|
||||
// $wgScript = "$wgScriptPath/index.php";
|
||||
// }
|
||||
// if ( $wgLoadScript === false ) {
|
||||
// $wgLoadScript = "$wgScriptPath/load.php";
|
||||
// }
|
||||
//
|
||||
// if ( $wgArticlePath === false ) {
|
||||
// if ( $wgUsePathInfo ) {
|
||||
// $wgArticlePath = "$wgScript/$1";
|
||||
// } else {
|
||||
// $wgArticlePath = "$wgScript?title=$1";
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
|
||||
// // 'view' is assumed the default action path everywhere in the code
|
||||
// // but is rarely filled in $wgActionPaths
|
||||
// $wgActionPaths['view'] = $wgArticlePath;
|
||||
// }
|
||||
//
|
||||
// if ( $wgResourceBasePath === null ) {
|
||||
// $wgResourceBasePath = $wgScriptPath;
|
||||
// }
|
||||
// if ( $wgStylePath === false ) {
|
||||
// $wgStylePath = "$wgResourceBasePath/skins";
|
||||
// }
|
||||
// if ( $wgLocalStylePath === false ) {
|
||||
// // Avoid wgResourceBasePath here since that may point to a different domain (e.g. CDN)
|
||||
// $wgLocalStylePath = "$wgScriptPath/skins";
|
||||
// }
|
||||
// if ( $wgExtensionAssetsPath === false ) {
|
||||
// $wgExtensionAssetsPath = "$wgResourceBasePath/extensions";
|
||||
// }
|
||||
//
|
||||
// if ( $wgLogo === false ) {
|
||||
// $wgLogo = "$wgResourceBasePath/resources/assets/wiki.png";
|
||||
// }
|
||||
//
|
||||
// if ( $wgUploadPath === false ) {
|
||||
// $wgUploadPath = "$wgScriptPath/images";
|
||||
// }
|
||||
// if ( $wgUploadDirectory === false ) {
|
||||
// $wgUploadDirectory = "$IP/images";
|
||||
// }
|
||||
// if ( $wgReadOnlyFile === false ) {
|
||||
// $wgReadOnlyFile = "{$wgUploadDirectory}/lock_yBgMBwiR";
|
||||
// }
|
||||
// if ( $wgFileCacheDirectory === false ) {
|
||||
// $wgFileCacheDirectory = "{$wgUploadDirectory}/cache";
|
||||
// }
|
||||
// if ( $wgDeletedDirectory === false ) {
|
||||
// $wgDeletedDirectory = "{$wgUploadDirectory}/deleted";
|
||||
// }
|
||||
//
|
||||
// if ( $wgGitInfoCacheDirectory === false && $wgCacheDirectory !== false ) {
|
||||
// $wgGitInfoCacheDirectory = "{$wgCacheDirectory}/gitinfo";
|
||||
// }
|
||||
//
|
||||
// if ( $wgEnableParserCache === false ) {
|
||||
// $wgParserCacheType = CACHE_NONE;
|
||||
// }
|
||||
//
|
||||
// // Fix path to icon images after they were moved in 1.24
|
||||
// if ( $wgRightsIcon ) {
|
||||
// $wgRightsIcon = str_replace(
|
||||
// "{$wgStylePath}/common/images/",
|
||||
// "{$wgResourceBasePath}/resources/assets/licenses/",
|
||||
// $wgRightsIcon
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// if ( isset( $wgFooterIcons['copyright']['copyright'] )
|
||||
// && $wgFooterIcons['copyright']['copyright'] === []
|
||||
// ) {
|
||||
// if ( $wgRightsIcon || $wgRightsText ) {
|
||||
// $wgFooterIcons['copyright']['copyright'] = [
|
||||
// 'url' => $wgRightsUrl,
|
||||
// 'src' => $wgRightsIcon,
|
||||
// 'alt' => $wgRightsText,
|
||||
// ];
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if ( isset( $wgFooterIcons['poweredby'] )
|
||||
// && isset( $wgFooterIcons['poweredby']['mediawiki'] )
|
||||
// && $wgFooterIcons['poweredby']['mediawiki']['src'] === null
|
||||
// ) {
|
||||
// $wgFooterIcons['poweredby']['mediawiki']['src'] =
|
||||
// "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png";
|
||||
// $wgFooterIcons['poweredby']['mediawiki']['srcset'] =
|
||||
// "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png 1.5x, " .
|
||||
// "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png 2x";
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Unconditional protection for NS_MEDIAWIKI since otherwise it's too easy for a
|
||||
// * sysadmin to set $wgNamespaceProtection incorrectly and leave the wiki insecure.
|
||||
// *
|
||||
// * Note that this is the definition of editinterface and it can be granted to
|
||||
// * all users if desired.
|
||||
// */
|
||||
// $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
|
||||
//
|
||||
// /**
|
||||
// * The canonical names of namespaces 6 and 7 are, as of v1.14, "File"
|
||||
// * and "File_talk". The old names "Image" and "Image_talk" are
|
||||
// * retained as aliases for backwards compatibility.
|
||||
// */
|
||||
// $wgNamespaceAliases['Image'] = NS_FILE;
|
||||
// $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
|
||||
//
|
||||
// /**
|
||||
// * Initialise $wgLockManagers to include basic FS version
|
||||
// */
|
||||
// $wgLockManagers[] = [
|
||||
// 'name' => 'fsLockManager',
|
||||
// 'class' => 'FSLockManager',
|
||||
// 'lockDirectory' => "{$wgUploadDirectory}/lockdir",
|
||||
// ];
|
||||
// $wgLockManagers[] = [
|
||||
// 'name' => 'nullLockManager',
|
||||
// 'class' => 'NullLockManager',
|
||||
// ];
|
||||
//
|
||||
// /**
|
||||
// * Initialise $wgLocalFileRepo from backwards-compatible settings
|
||||
// */
|
||||
// if ( !$wgLocalFileRepo ) {
|
||||
// $wgLocalFileRepo = [
|
||||
// 'class' => 'LocalRepo',
|
||||
// 'name' => 'local',
|
||||
// 'directory' => $wgUploadDirectory,
|
||||
// 'scriptDirUrl' => $wgScriptPath,
|
||||
// 'scriptExtension' => '.php',
|
||||
// 'url' => $wgUploadBaseUrl ? $wgUploadBaseUrl . $wgUploadPath : $wgUploadPath,
|
||||
// 'hashLevels' => $wgHashedUploadDirectory ? 2 : 0,
|
||||
// 'thumbScriptUrl' => $wgThumbnailScriptPath,
|
||||
// 'transformVia404' => !$wgGenerateThumbnailOnParse,
|
||||
// 'deletedDir' => $wgDeletedDirectory,
|
||||
// 'deletedHashLevels' => $wgHashedUploadDirectory ? 3 : 0
|
||||
// ];
|
||||
// }
|
||||
// /**
|
||||
// * Initialise shared repo from backwards-compatible settings
|
||||
// */
|
||||
// if ( $wgUseSharedUploads ) {
|
||||
// if ( $wgSharedUploadDBname ) {
|
||||
// $wgForeignFileRepos[] = [
|
||||
// 'class' => 'ForeignDBRepo',
|
||||
// 'name' => 'shared',
|
||||
// 'directory' => $wgSharedUploadDirectory,
|
||||
// 'url' => $wgSharedUploadPath,
|
||||
// 'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
|
||||
// 'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
|
||||
// 'transformVia404' => !$wgGenerateThumbnailOnParse,
|
||||
// 'dbType' => $wgDBtype,
|
||||
// 'dbServer' => $wgDBserver,
|
||||
// 'dbUser' => $wgDBuser,
|
||||
// 'dbPassword' => $wgDBpassword,
|
||||
// 'dbName' => $wgSharedUploadDBname,
|
||||
// 'dbFlags' => ( $wgDebugDumpSql ? DBO_DEBUG : 0 ) | DBO_DEFAULT,
|
||||
// 'tablePrefix' => $wgSharedUploadDBprefix,
|
||||
// 'hasSharedCache' => $wgCacheSharedUploads,
|
||||
// 'descBaseUrl' => $wgRepositoryBaseUrl,
|
||||
// 'fetchDescription' => $wgFetchCommonsDescriptions,
|
||||
// ];
|
||||
// } else {
|
||||
// $wgForeignFileRepos[] = [
|
||||
// 'class' => 'FileRepo',
|
||||
// 'name' => 'shared',
|
||||
// 'directory' => $wgSharedUploadDirectory,
|
||||
// 'url' => $wgSharedUploadPath,
|
||||
// 'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
|
||||
// 'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
|
||||
// 'transformVia404' => !$wgGenerateThumbnailOnParse,
|
||||
// 'descBaseUrl' => $wgRepositoryBaseUrl,
|
||||
// 'fetchDescription' => $wgFetchCommonsDescriptions,
|
||||
// ];
|
||||
// }
|
||||
// }
|
||||
// if ( $wgUseInstantCommons ) {
|
||||
// $wgForeignFileRepos[] = [
|
||||
// 'class' => 'ForeignAPIRepo',
|
||||
// 'name' => 'wikimediacommons',
|
||||
// 'apibase' => 'https://commons.wikimedia.org/w/api.php',
|
||||
// 'url' => 'https://upload.wikimedia.org/wikipedia/commons',
|
||||
// 'thumbUrl' => 'https://upload.wikimedia.org/wikipedia/commons/thumb',
|
||||
// 'hashLevels' => 2,
|
||||
// 'transformVia404' => true,
|
||||
// 'fetchDescription' => true,
|
||||
// 'descriptionCacheExpiry' => 43200,
|
||||
// 'apiThumbCacheExpiry' => 0,
|
||||
// ];
|
||||
// }
|
||||
// /*
|
||||
// * Add on default file backend config for file repos.
|
||||
// * FileBackendGroup will handle initializing the backends.
|
||||
// */
|
||||
// if ( !isset( $wgLocalFileRepo['backend'] ) ) {
|
||||
// $wgLocalFileRepo['backend'] = $wgLocalFileRepo['name'] . '-backend';
|
||||
// }
|
||||
// foreach ( $wgForeignFileRepos as &$repo ) {
|
||||
// if ( !isset( $repo['directory'] ) && $repo['class'] === 'ForeignAPIRepo' ) {
|
||||
// $repo['directory'] = $wgUploadDirectory; // b/c
|
||||
// }
|
||||
// if ( !isset( $repo['backend'] ) ) {
|
||||
// $repo['backend'] = $repo['name'] . '-backend';
|
||||
// }
|
||||
// }
|
||||
// unset( $repo ); // no global pollution; destroy reference
|
||||
//
|
||||
// $rcMaxAgeDays = $wgRCMaxAge / ( 3600 * 24 );
|
||||
// if ( $wgRCFilterByAge ) {
|
||||
// // Trim down $wgRCLinkDays so that it only lists links which are valid
|
||||
// // as determined by $wgRCMaxAge.
|
||||
// // Note that we allow 1 link higher than the max for things like 56 days but a 60 day link.
|
||||
// sort( $wgRCLinkDays );
|
||||
//
|
||||
// // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
|
||||
// for ( $i = 0; $i < count( $wgRCLinkDays ); $i++ ) {
|
||||
// // @codingStandardsIgnoreEnd
|
||||
// if ( $wgRCLinkDays[$i] >= $rcMaxAgeDays ) {
|
||||
// $wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i + 1, false );
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// // Ensure that default user options are not invalid, since that breaks Special:Preferences
|
||||
// $wgDefaultUserOptions['rcdays'] = min(
|
||||
// $wgDefaultUserOptions['rcdays'],
|
||||
// ceil( $rcMaxAgeDays )
|
||||
// );
|
||||
// $wgDefaultUserOptions['watchlistdays'] = min(
|
||||
// $wgDefaultUserOptions['watchlistdays'],
|
||||
// ceil( $rcMaxAgeDays )
|
||||
// );
|
||||
// unset( $rcMaxAgeDays );
|
||||
//
|
||||
// if ( $wgSkipSkin ) {
|
||||
// $wgSkipSkins[] = $wgSkipSkin;
|
||||
// }
|
||||
//
|
||||
// $wgSkipSkins[] = 'fallback';
|
||||
// $wgSkipSkins[] = 'apioutput';
|
||||
//
|
||||
// if ( $wgLocalInterwiki ) {
|
||||
// array_unshift( $wgLocalInterwikis, $wgLocalInterwiki );
|
||||
// }
|
||||
//
|
||||
// // Set default shared prefix
|
||||
// if ( $wgSharedPrefix === false ) {
|
||||
// $wgSharedPrefix = $wgDBprefix;
|
||||
// }
|
||||
//
|
||||
// // Set default shared schema
|
||||
// if ( $wgSharedSchema === false ) {
|
||||
// $wgSharedSchema = $wgDBmwschema;
|
||||
// }
|
||||
//
|
||||
// if ( !$wgCookiePrefix ) {
|
||||
// if ( $wgSharedDB && $wgSharedPrefix && in_array( 'user', $wgSharedTables ) ) {
|
||||
// $wgCookiePrefix = $wgSharedDB . '_' . $wgSharedPrefix;
|
||||
// } elseif ( $wgSharedDB && in_array( 'user', $wgSharedTables ) ) {
|
||||
// $wgCookiePrefix = $wgSharedDB;
|
||||
// } elseif ( $wgDBprefix ) {
|
||||
// $wgCookiePrefix = $wgDBname . '_' . $wgDBprefix;
|
||||
// } else {
|
||||
// $wgCookiePrefix = $wgDBname;
|
||||
// }
|
||||
// }
|
||||
// $wgCookiePrefix = strtr( $wgCookiePrefix, '=,; +."\'\\[', '__________' );
|
||||
//
|
||||
// if ( $wgEnableEmail ) {
|
||||
// $wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
|
||||
// } else {
|
||||
// // Disable all other email settings automatically if $wgEnableEmail
|
||||
// // is set to false. - bug 63678
|
||||
// $wgAllowHTMLEmail = false;
|
||||
// $wgEmailAuthentication = false; // do not require auth if you're not sending email anyway
|
||||
// $wgEnableUserEmail = false;
|
||||
// $wgEnotifFromEditor = false;
|
||||
// $wgEnotifImpersonal = false;
|
||||
// $wgEnotifMaxRecips = 0;
|
||||
// $wgEnotifMinorEdits = false;
|
||||
// $wgEnotifRevealEditorAddress = false;
|
||||
// $wgEnotifUseRealName = false;
|
||||
// $wgEnotifUserTalk = false;
|
||||
// $wgEnotifWatchlist = false;
|
||||
// unset( $wgGroupPermissions['user']['sendemail'] );
|
||||
// $wgUseEnotif = false;
|
||||
// $wgUserEmailUseReplyTo = false;
|
||||
// $wgUsersNotifiedOnAllChanges = [];
|
||||
// }
|
||||
//
|
||||
// if ( $wgMetaNamespace === false ) {
|
||||
// $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
|
||||
// }
|
||||
//
|
||||
// // Default value is 2000 or the suhosin limit if it is between 1 and 2000
|
||||
// if ( $wgResourceLoaderMaxQueryLength === false ) {
|
||||
// $suhosinMaxValueLength = (int)ini_get( 'suhosin.get.max_value_length' );
|
||||
// if ( $suhosinMaxValueLength > 0 && $suhosinMaxValueLength < 2000 ) {
|
||||
// $wgResourceLoaderMaxQueryLength = $suhosinMaxValueLength;
|
||||
// } else {
|
||||
// $wgResourceLoaderMaxQueryLength = 2000;
|
||||
// }
|
||||
// unset( $suhosinMaxValueLength );
|
||||
// }
|
||||
//
|
||||
// // Ensure the minimum chunk size is less than PHP upload limits or the maximum
|
||||
// // upload size.
|
||||
// $wgMinUploadChunkSize = min(
|
||||
// $wgMinUploadChunkSize,
|
||||
// UploadBase::getMaxUploadSize( 'file' ),
|
||||
// UploadBase::getMaxPhpUploadSize(),
|
||||
// ( wfShorthandToInteger(
|
||||
// ini_get( 'post_max_size' ) ?: ini_get( 'hhvm.server.max_post_size' ),
|
||||
// PHP_INT_MAX
|
||||
// ) ?: PHP_INT_MAX ) - 1024 // Leave some room for other POST parameters
|
||||
// );
|
||||
|
||||
/**
|
||||
* Definitions of the NS_ constants are in Defines.php
|
||||
* @private
|
||||
*/
|
||||
public static Hash_adp__int wgCanonicalNamespaceNames = new Hash_adp__int()
|
||||
.Add_as_bry(XomwDefines.NS_MEDIA , "Media")
|
||||
.Add_as_bry(XomwDefines.NS_SPECIAL , "Special")
|
||||
.Add_as_bry(XomwDefines.NS_TALK , "Talk")
|
||||
.Add_as_bry(XomwDefines.NS_USER , "User")
|
||||
.Add_as_bry(XomwDefines.NS_USER_TALK , "User_talk")
|
||||
.Add_as_bry(XomwDefines.NS_PROJECT , "Project")
|
||||
.Add_as_bry(XomwDefines.NS_PROJECT_TALK , "Project_talk")
|
||||
.Add_as_bry(XomwDefines.NS_FILE , "File")
|
||||
.Add_as_bry(XomwDefines.NS_FILE_TALK , "File_talk")
|
||||
.Add_as_bry(XomwDefines.NS_MEDIAWIKI , "MediaWiki")
|
||||
.Add_as_bry(XomwDefines.NS_MEDIAWIKI_TALK , "MediaWiki_talk")
|
||||
.Add_as_bry(XomwDefines.NS_TEMPLATE , "Template")
|
||||
.Add_as_bry(XomwDefines.NS_TEMPLATE_TALK , "Template_talk")
|
||||
.Add_as_bry(XomwDefines.NS_HELP , "Help")
|
||||
.Add_as_bry(XomwDefines.NS_HELP_TALK , "Help_talk")
|
||||
.Add_as_bry(XomwDefines.NS_CATEGORY , "Category")
|
||||
.Add_as_bry(XomwDefines.NS_CATEGORY_TALK , "Category_talk")
|
||||
;
|
||||
|
||||
// /// @todo UGLY UGLY
|
||||
// if ( is_array( $wgExtraNamespaces ) ) {
|
||||
// $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
|
||||
// }
|
||||
//
|
||||
// // These are now the same, always
|
||||
// // To determine the user language, use $wgLang->getCode()
|
||||
// $wgContLanguageCode = $wgLanguageCode;
|
||||
//
|
||||
// // Easy to forget to falsify $wgDebugToolbar for static caches.
|
||||
// // If file cache or CDN cache is on, just disable this (DWIMD).
|
||||
// if ( $wgUseFileCache || $wgUseSquid ) {
|
||||
// $wgDebugToolbar = false;
|
||||
// }
|
||||
//
|
||||
// // We always output HTML5 since 1.22, overriding these is no longer supported
|
||||
// // we set them here for extensions that depend on its value.
|
||||
// $wgHtml5 = true;
|
||||
// $wgXhtmlDefaultNamespace = 'http://www.w3.org/1999/xhtml';
|
||||
// $wgJsMimeType = 'text/javascript';
|
||||
//
|
||||
// // Blacklisted file extensions shouldn't appear on the "allowed" list
|
||||
// $wgFileExtensions = array_values( array_diff( $wgFileExtensions, $wgFileBlacklist ) );
|
||||
//
|
||||
// if ( $wgInvalidateCacheOnLocalSettingsChange ) {
|
||||
// MediaWiki\suppressWarnings();
|
||||
// $wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', filemtime( "$IP/LocalSettings.php" ) ) );
|
||||
// MediaWiki\restoreWarnings();
|
||||
// }
|
||||
//
|
||||
// if ( $wgNewUserLog ) {
|
||||
// // Add a new log type
|
||||
// $wgLogTypes[] = 'newusers';
|
||||
// $wgLogNames['newusers'] = 'newuserlogpage';
|
||||
// $wgLogHeaders['newusers'] = 'newuserlogpagetext';
|
||||
// $wgLogActionsHandlers['newusers/newusers'] = 'NewUsersLogFormatter';
|
||||
// $wgLogActionsHandlers['newusers/create'] = 'NewUsersLogFormatter';
|
||||
// $wgLogActionsHandlers['newusers/create2'] = 'NewUsersLogFormatter';
|
||||
// $wgLogActionsHandlers['newusers/byemail'] = 'NewUsersLogFormatter';
|
||||
// $wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
|
||||
// }
|
||||
//
|
||||
// if ( $wgPageLanguageUseDB ) {
|
||||
// $wgLogTypes[] = 'pagelang';
|
||||
// $wgLogActionsHandlers['pagelang/pagelang'] = 'PageLangLogFormatter';
|
||||
// }
|
||||
//
|
||||
// if ( $wgCookieSecure === 'detect' ) {
|
||||
// $wgCookieSecure = ( WebRequest::detectProtocol() === 'https' );
|
||||
// }
|
||||
//
|
||||
// if ( $wgProfileOnly ) {
|
||||
// $wgDebugLogGroups['profileoutput'] = $wgDebugLogFile;
|
||||
// $wgDebugLogFile = '';
|
||||
// }
|
||||
//
|
||||
// // Backwards compatibility with old password limits
|
||||
// if ( $wgMinimalPasswordLength !== false ) {
|
||||
// $wgPasswordPolicy['policies']['default']['MinimalPasswordLength'] = $wgMinimalPasswordLength;
|
||||
// }
|
||||
//
|
||||
// if ( $wgMaximalPasswordLength !== false ) {
|
||||
// $wgPasswordPolicy['policies']['default']['MaximalPasswordLength'] = $wgMaximalPasswordLength;
|
||||
// }
|
||||
//
|
||||
// // Backwards compatibility warning
|
||||
// if ( !$wgSessionsInObjectCache ) {
|
||||
// wfDeprecated( '$wgSessionsInObjectCache = false', '1.27' );
|
||||
// if ( $wgSessionHandler ) {
|
||||
// wfDeprecated( '$wgSessionsHandler', '1.27' );
|
||||
// }
|
||||
// $cacheType = get_class( ObjectCache::getInstance( $wgSessionCacheType ) );
|
||||
// wfDebugLog(
|
||||
// 'caches',
|
||||
// "Session data will be stored in \"$cacheType\" cache with " .
|
||||
// "expiry $wgObjectCacheSessionExpiry seconds"
|
||||
// );
|
||||
// }
|
||||
// $wgSessionsInObjectCache = true;
|
||||
//
|
||||
// if ( $wgPHPSessionHandling !== 'enable' &&
|
||||
// $wgPHPSessionHandling !== 'warn' &&
|
||||
// $wgPHPSessionHandling !== 'disable'
|
||||
// ) {
|
||||
// $wgPHPSessionHandling = 'warn';
|
||||
// }
|
||||
// if ( defined( 'MW_NO_SESSION' ) ) {
|
||||
// // If the entry point wants no session, force 'disable' here unless they
|
||||
// // specifically set it to the (undocumented) 'warn'.
|
||||
// $wgPHPSessionHandling = MW_NO_SESSION === 'warn' ? 'warn' : 'disable';
|
||||
// }
|
||||
//
|
||||
// Profiler::instance()->scopedProfileOut( $ps_default );
|
||||
//
|
||||
// // Disable MWDebug for command line mode, this prevents MWDebug from eating up
|
||||
// // all the memory from logging SQL queries on maintenance scripts
|
||||
// global $wgCommandLineMode;
|
||||
// if ( $wgDebugToolbar && !$wgCommandLineMode ) {
|
||||
// MWDebug::init();
|
||||
// }
|
||||
//
|
||||
// // Reset the global service locator, so any services that have already been created will be
|
||||
// // re-created while taking into account any custom settings and extensions.
|
||||
// MediaWikiServices::resetGlobalInstance( new GlobalVarConfig(), 'quick' );
|
||||
//
|
||||
// if ( $wgSharedDB && $wgSharedTables ) {
|
||||
// // Apply $wgSharedDB table aliases for the local LB (all non-foreign DB connections)
|
||||
// MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
|
||||
// array_fill_keys(
|
||||
// $wgSharedTables,
|
||||
// [
|
||||
// 'dbname' => $wgSharedDB,
|
||||
// 'schema' => $wgSharedSchema,
|
||||
// 'prefix' => $wgSharedPrefix
|
||||
// ]
|
||||
// )
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// // Define a constant that indicates that the bootstrapping of the service locator
|
||||
// // is complete.
|
||||
// define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
|
||||
//
|
||||
// // Install a header callback to prevent caching of responses with cookies (T127993)
|
||||
// if ( !$wgCommandLineMode ) {
|
||||
// header_register_callback( function () {
|
||||
// $headers = [];
|
||||
// foreach ( headers_list() as $header ) {
|
||||
// list( $name, $value ) = explode( ':', $header, 2 );
|
||||
// $headers[strtolower( trim( $name ) )][] = trim( $value );
|
||||
// }
|
||||
//
|
||||
// if ( isset( $headers['set-cookie'] ) ) {
|
||||
// $cacheControl = isset( $headers['cache-control'] )
|
||||
// ? implode( ', ', $headers['cache-control'] )
|
||||
// : '';
|
||||
//
|
||||
// if ( !preg_match( '/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i', $cacheControl ) ) {
|
||||
// header( 'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
|
||||
// header( 'Cache-Control: private, max-age=0, s-maxage=0' );
|
||||
// MediaWiki\Logger\LoggerFactory::getInstance( 'cache-cookies' )->warning(
|
||||
// 'Cookies set on {url} with Cache-Control "{cache-control}"', [
|
||||
// 'url' => WebRequest::getGlobalRequestURL(),
|
||||
// 'cookies' => $headers['set-cookie'],
|
||||
// 'cache-control' => $cacheControl ?: '<not set>',
|
||||
// ]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// } );
|
||||
// }
|
||||
//
|
||||
// MWExceptionHandler::installHandler();
|
||||
//
|
||||
// require_once "$IP/includes/compat/normal/UtfNormalUtil.php";
|
||||
//
|
||||
// $ps_validation = Profiler::instance()->scopedProfileIn( $fname . '-validation' );
|
||||
//
|
||||
// // T48998: Bail out early if $wgArticlePath is non-absolute
|
||||
// foreach ( [ 'wgArticlePath', 'wgVariantArticlePath' ] as $varName ) {
|
||||
// if ( $$varName && !preg_match( '/^(https?:\/\/|\/)/', $$varName ) ) {
|
||||
// throw new FatalError(
|
||||
// "If you use a relative URL for \$$varName, it must start " .
|
||||
// 'with a slash (<code>/</code>).<br><br>See ' .
|
||||
// "<a href=\"https://www.mediawiki.org/wiki/Manual:\$$varName\">" .
|
||||
// "https://www.mediawiki.org/wiki/Manual:\$$varName</a>."
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// Profiler::instance()->scopedProfileOut( $ps_validation );
|
||||
//
|
||||
// $ps_default2 = Profiler::instance()->scopedProfileIn( $fname . '-defaults2' );
|
||||
//
|
||||
// if ( $wgCanonicalServer === false ) {
|
||||
// $wgCanonicalServer = wfExpandUrl( $wgServer, PROTO_HTTP );
|
||||
// }
|
||||
//
|
||||
// // Set server name
|
||||
// $serverParts = wfParseUrl( $wgCanonicalServer );
|
||||
// if ( $wgServerName !== false ) {
|
||||
// wfWarn( '$wgServerName should be derived from $wgCanonicalServer, '
|
||||
// . 'not customized. Overwriting $wgServerName.' );
|
||||
// }
|
||||
// $wgServerName = $serverParts['host'];
|
||||
// unset( $serverParts );
|
||||
//
|
||||
// // Set defaults for configuration variables
|
||||
// // that are derived from the server name by default
|
||||
// // Note: $wgEmergencyContact and $wgPasswordSender may be false or empty String (T104142)
|
||||
// if ( !$wgEmergencyContact ) {
|
||||
// $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
|
||||
// }
|
||||
// if ( !$wgPasswordSender ) {
|
||||
// $wgPasswordSender = 'apache@' . $wgServerName;
|
||||
// }
|
||||
// if ( !$wgNoReplyAddress ) {
|
||||
// $wgNoReplyAddress = $wgPasswordSender;
|
||||
// }
|
||||
//
|
||||
// if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
|
||||
// $wgSecureLogin = false;
|
||||
// wfWarn( 'Secure login was enabled on a server that only supports '
|
||||
// . 'HTTP or HTTPS. Disabling secure login.' );
|
||||
// }
|
||||
//
|
||||
// $wgVirtualRestConfig['global']['domain'] = $wgCanonicalServer;
|
||||
//
|
||||
// // Now that GlobalFunctions is loaded, set defaults that depend on it.
|
||||
// if ( $wgTmpDirectory === false ) {
|
||||
// $wgTmpDirectory = wfTempDir();
|
||||
// }
|
||||
//
|
||||
// // We don't use counters anymore. Left here for extensions still
|
||||
// // expecting this to exist. Should be removed sometime 1.26 or later.
|
||||
// if ( !isset( $wgDisableCounters ) ) {
|
||||
// $wgDisableCounters = true;
|
||||
// }
|
||||
//
|
||||
// if ( $wgMainWANCache === false ) {
|
||||
// // Setup a WAN cache from $wgMainCacheType with no relayer.
|
||||
// // Sites using multiple datacenters can configure a relayer.
|
||||
// $wgMainWANCache = 'mediawiki-main-default';
|
||||
// $wgWANObjectCaches[$wgMainWANCache] = [
|
||||
// 'class' => 'WANObjectCache',
|
||||
// 'cacheId' => $wgMainCacheType,
|
||||
// 'channels' => [ 'purge' => 'wancache-main-default-purge' ]
|
||||
// ];
|
||||
// }
|
||||
//
|
||||
// Profiler::instance()->scopedProfileOut( $ps_default2 );
|
||||
//
|
||||
// $ps_misc = Profiler::instance()->scopedProfileIn( $fname . '-misc1' );
|
||||
//
|
||||
// // Raise the memory limit if it's too low
|
||||
// wfMemoryLimit();
|
||||
//
|
||||
// /**
|
||||
// * Set up the timezone, suppressing the pseudo-security warning in PHP 5.1+
|
||||
// * that happens whenever you use a date function without the timezone being
|
||||
// * explicitly set. Inspired by phpMyAdmin's treatment of the problem.
|
||||
// */
|
||||
// if ( is_null( $wgLocaltimezone ) ) {
|
||||
// MediaWiki\suppressWarnings();
|
||||
// $wgLocaltimezone = date_default_timezone_get();
|
||||
// MediaWiki\restoreWarnings();
|
||||
// }
|
||||
//
|
||||
// date_default_timezone_set( $wgLocaltimezone );
|
||||
// if ( is_null( $wgLocalTZoffset ) ) {
|
||||
// $wgLocalTZoffset = date( 'Z' ) / 60;
|
||||
// }
|
||||
// // The part after the System| is ignored, but rest of MW fills it
|
||||
// // out as the local offset.
|
||||
// $wgDefaultUserOptions['timecorrection'] = "System|$wgLocalTZoffset";
|
||||
//
|
||||
// if ( !$wgDBerrorLogTZ ) {
|
||||
// $wgDBerrorLogTZ = $wgLocaltimezone;
|
||||
// }
|
||||
//
|
||||
// // initialize the request Object in $wgRequest
|
||||
// $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat
|
||||
// // Set user IP/agent information for causal consistency purposes
|
||||
// MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->setRequestInfo( [
|
||||
// 'IPAddress' => $wgRequest->getIP(),
|
||||
// 'UserAgent' => $wgRequest->getHeader( 'User-Agent' ),
|
||||
// 'ChronologyProtection' => $wgRequest->getHeader( 'ChronologyProtection' )
|
||||
// ] );
|
||||
//
|
||||
// // Useful debug output
|
||||
// if ( $wgCommandLineMode ) {
|
||||
// wfDebug( "\n\nStart command line script $self\n" );
|
||||
// } else {
|
||||
// $debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
|
||||
//
|
||||
// if ( $wgDebugPrintHttpHeaders ) {
|
||||
// $debug .= "HTTP HEADERS:\n";
|
||||
//
|
||||
// foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
|
||||
// $debug .= "$name: $value\n";
|
||||
// }
|
||||
// }
|
||||
// wfDebug( $debug );
|
||||
// }
|
||||
//
|
||||
// Profiler::instance()->scopedProfileOut( $ps_misc );
|
||||
// $ps_memcached = Profiler::instance()->scopedProfileIn( $fname . '-memcached' );
|
||||
//
|
||||
// $wgMemc = wfGetMainCache();
|
||||
// $messageMemc = wfGetMessageCacheStorage();
|
||||
// $parserMemc = wfGetParserCacheStorage();
|
||||
//
|
||||
// wfDebugLog( 'caches',
|
||||
// 'cluster: ' . get_class( $wgMemc ) .
|
||||
// ', WAN: ' . ( $wgMainWANCache === CACHE_NONE ? 'CACHE_NONE' : $wgMainWANCache ) .
|
||||
// ', stash: ' . $wgMainStash .
|
||||
// ', message: ' . get_class( $messageMemc ) .
|
||||
// ', parser: ' . get_class( $parserMemc ) .
|
||||
// ', session: ' . get_class( ObjectCache::getInstance( $wgSessionCacheType ) )
|
||||
// );
|
||||
//
|
||||
// Profiler::instance()->scopedProfileOut( $ps_memcached );
|
||||
//
|
||||
// // Most of the config is out, some might want to run hooks here.
|
||||
// Hooks::run( 'SetupAfterCache' );
|
||||
//
|
||||
// $ps_globals = Profiler::instance()->scopedProfileIn( $fname . '-globals' );
|
||||
//
|
||||
// /**
|
||||
// * @var Language $wgContLang
|
||||
// */
|
||||
// $wgContLang = Language::factory( $wgLanguageCode );
|
||||
// $wgContLang->initContLang();
|
||||
//
|
||||
// // Now that variant lists may be available...
|
||||
// $wgRequest->interpolateTitle();
|
||||
//
|
||||
// if ( !is_object( $wgAuth ) ) {
|
||||
// $wgAuth = new MediaWiki\Auth\AuthManagerAuthPlugin;
|
||||
// Hooks::run( 'AuthPluginSetup', [ &$wgAuth ] );
|
||||
// }
|
||||
// if ( $wgAuth && !$wgAuth instanceof MediaWiki\Auth\AuthManagerAuthPlugin ) {
|
||||
// MediaWiki\Auth\AuthManager::singleton()->forcePrimaryAuthenticationProviders( [
|
||||
// new MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider( [
|
||||
// 'authoritative' => false,
|
||||
// ] ),
|
||||
// new MediaWiki\Auth\AuthPluginPrimaryAuthenticationProvider( $wgAuth ),
|
||||
// new MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider( [
|
||||
// 'authoritative' => true,
|
||||
// ] ),
|
||||
// ], '$wgAuth is ' . get_class( $wgAuth ) );
|
||||
// }
|
||||
//
|
||||
// // Set up the session
|
||||
// $ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
|
||||
// /**
|
||||
// * @var MediaWiki\Session\SessionId|null $wgInitialSessionId The persistent
|
||||
// * session ID (if any) loaded at startup
|
||||
// */
|
||||
// $wgInitialSessionId = null;
|
||||
// if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
|
||||
// // If session.auto_start is there, we can't touch session name
|
||||
// if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
|
||||
// session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
|
||||
// }
|
||||
//
|
||||
// // Create the SessionManager singleton and set up our session handler,
|
||||
// // unless we're specifically asked not to.
|
||||
// if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
|
||||
// MediaWiki\Session\PHPSessionHandler::install(
|
||||
// MediaWiki\Session\SessionManager::singleton()
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// // Initialize the session
|
||||
// try {
|
||||
// $session = MediaWiki\Session\SessionManager::getGlobalSession();
|
||||
// } catch ( OverflowException $ex ) {
|
||||
// if ( isset( $ex->sessionInfos ) && count( $ex->sessionInfos ) >= 2 ) {
|
||||
// // The exception is because the request had multiple possible
|
||||
// // sessions tied for top priority. Report this to the user.
|
||||
// $list = [];
|
||||
// foreach ( $ex->sessionInfos as $info ) {
|
||||
// $list[] = $info->getProvider()->describe( $wgContLang );
|
||||
// }
|
||||
// $list = $wgContLang->listToText( $list );
|
||||
// throw new HttpError( 400,
|
||||
// Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $wgContLang )->plain()
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// // Not the one we want, rethrow
|
||||
// throw $ex;
|
||||
// }
|
||||
//
|
||||
// if ( $session->isPersistent() ) {
|
||||
// $wgInitialSessionId = $session->getSessionId();
|
||||
// }
|
||||
//
|
||||
// $session->renew();
|
||||
// if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
|
||||
// ( $session->isPersistent() || $session->shouldRememberUser() )
|
||||
// ) {
|
||||
// // Start the PHP-session for backwards compatibility
|
||||
// session_id( $session->getId() );
|
||||
// MediaWiki\quietCall( 'session_start' );
|
||||
// }
|
||||
//
|
||||
// unset( $session );
|
||||
// } else {
|
||||
// // Even if we didn't set up a global Session, still install our session
|
||||
// // handler unless specifically requested not to.
|
||||
// if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
|
||||
// MediaWiki\Session\PHPSessionHandler::install(
|
||||
// MediaWiki\Session\SessionManager::singleton()
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// Profiler::instance()->scopedProfileOut( $ps_session );
|
||||
//
|
||||
// /**
|
||||
// * @var User $wgUser
|
||||
// */
|
||||
// $wgUser = RequestContext::getMain()->getUser(); // BackCompat
|
||||
//
|
||||
// /**
|
||||
// * @var Language $wgLang
|
||||
// */
|
||||
// $wgLang = new StubUserLang;
|
||||
//
|
||||
// /**
|
||||
// * @var OutputPage $wgOut
|
||||
// */
|
||||
// $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
|
||||
//
|
||||
// /**
|
||||
// * @var Parser $wgParser
|
||||
// */
|
||||
// $wgParser = new StubObject( 'wgParser', function () {
|
||||
// return MediaWikiServices::getInstance()->getParser();
|
||||
// } );
|
||||
//
|
||||
// /**
|
||||
// * @var Title $wgTitle
|
||||
// */
|
||||
// $wgTitle = null;
|
||||
//
|
||||
// Profiler::instance()->scopedProfileOut( $ps_globals );
|
||||
// $ps_extensions = Profiler::instance()->scopedProfileIn( $fname . '-extensions' );
|
||||
//
|
||||
// // Extension setup functions
|
||||
// // Entries should be added to this variable during the inclusion
|
||||
// // of the extension file. This allows the extension to perform
|
||||
// // any necessary initialisation in the fully initialised environment
|
||||
// foreach ( $wgExtensionFunctions as $func ) {
|
||||
// // Allow closures in PHP 5.3+
|
||||
// if ( is_object( $func ) && $func instanceof Closure ) {
|
||||
// $profName = $fname . '-extensions-closure';
|
||||
// } elseif ( is_array( $func ) ) {
|
||||
// if ( is_object( $func[0] ) ) {
|
||||
// $profName = $fname . '-extensions-' . get_class( $func[0] ) . '::' . $func[1];
|
||||
// } else {
|
||||
// $profName = $fname . '-extensions-' . implode( '::', $func );
|
||||
// }
|
||||
// } else {
|
||||
// $profName = $fname . '-extensions-' . strval( $func );
|
||||
// }
|
||||
//
|
||||
// $ps_ext_func = Profiler::instance()->scopedProfileIn( $profName );
|
||||
// call_user_func( $func );
|
||||
// Profiler::instance()->scopedProfileOut( $ps_ext_func );
|
||||
// }
|
||||
//
|
||||
// // If the session user has a 0 id but a valid name, that means we need to
|
||||
// // autocreate it.
|
||||
// if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
|
||||
// $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
|
||||
// if ( $sessionUser->getId() === 0 && User::isValidUserName( $sessionUser->getName() ) ) {
|
||||
// $ps_autocreate = Profiler::instance()->scopedProfileIn( $fname . '-autocreate' );
|
||||
// $res = MediaWiki\Auth\AuthManager::singleton()->autoCreateUser(
|
||||
// $sessionUser,
|
||||
// MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
|
||||
// true
|
||||
// );
|
||||
// Profiler::instance()->scopedProfileOut( $ps_autocreate );
|
||||
// \MediaWiki\Logger\LoggerFactory::getInstance( 'authevents' )->info( 'Autocreation attempt', [
|
||||
// 'event' => 'autocreate',
|
||||
// 'status' => $res,
|
||||
// ] );
|
||||
// unset( $res );
|
||||
// }
|
||||
// unset( $sessionUser );
|
||||
// }
|
||||
//
|
||||
// if ( !$wgCommandLineMode ) {
|
||||
// Pingback::schedulePingback();
|
||||
// }
|
||||
//
|
||||
// $wgFullyInitialised = true;
|
||||
//
|
||||
// Profiler::instance()->scopedProfileOut( $ps_extensions );
|
||||
// Profiler::instance()->scopedProfileOut( $ps_setup );
|
||||
}
|
@ -158,19 +158,19 @@ public class XomwTitle {
|
||||
// /** @var boolean Would deleting this page be a big deletion? */
|
||||
// private $mIsBigDeletion = null;
|
||||
// // @}
|
||||
//
|
||||
// /**
|
||||
// * B/C kludge: provide a TitleParser for use by Title.
|
||||
// * Ideally, Title would have no methods that need this.
|
||||
// * Avoid usage of this singleton by using TitleValue
|
||||
// * and the associated services when possible.
|
||||
// *
|
||||
// * @return TitleFormatter
|
||||
// */
|
||||
// private static function getTitleFormatter() {
|
||||
// return MediaWikiServices::getInstance().getTitleFormatter();
|
||||
// }
|
||||
//
|
||||
|
||||
/**
|
||||
* B/C kludge: provide a TitleParser for use by Title.
|
||||
* Ideally, Title would have no methods that need this.
|
||||
* Avoid usage of this singleton by using TitleValue
|
||||
* and the associated services when possible.
|
||||
*
|
||||
* @return TitleFormatter
|
||||
*/
|
||||
private static XomwMediaWikiTitleCodec getTitleFormatter() {
|
||||
return XomwMediaWikiServices.getInstance().getTitleFormatter();
|
||||
}
|
||||
|
||||
// /**
|
||||
// * B/C kludge: provide an InterwikiLookup for use by Title.
|
||||
// * Ideally, Title would have no methods that need this.
|
||||
@ -533,7 +533,7 @@ public class XomwTitle {
|
||||
// * @return Title|null The new Object, or null on an error
|
||||
// */
|
||||
// public static function makeTitleSafe($ns, $title, $fragment = Bry_.Empty, $interwiki = Bry_.Empty) {
|
||||
// if (!MWNamespace::exists($ns)) {
|
||||
// if (!XomwNamespace::exists($ns)) {
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
@ -728,7 +728,7 @@ public class XomwTitle {
|
||||
// global $wgContLang;
|
||||
//
|
||||
// if ($canonicalNamespace) {
|
||||
// $namespace = MWNamespace::getCanonicalName($ns);
|
||||
// $namespace = XomwNamespace::getCanonicalName($ns);
|
||||
// } else {
|
||||
// $namespace = $wgContLang.getNsText($ns);
|
||||
// }
|
||||
@ -970,32 +970,32 @@ public class XomwTitle {
|
||||
// this.mContentModel = $model;
|
||||
// this.mForcedContentModel = true;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Get the namespace text
|
||||
// *
|
||||
// * @return String|false Namespace text
|
||||
// */
|
||||
// public function getNsText() {
|
||||
// if (this.isExternal()) {
|
||||
|
||||
/**
|
||||
* Get the namespace text
|
||||
*
|
||||
* @return String|false Namespace text
|
||||
*/
|
||||
public byte[] getNsText() {
|
||||
if (this.isExternal()) {
|
||||
// // This probably shouldn't even happen,
|
||||
// // but for interwiki transclusion it sometimes does.
|
||||
// // Use the canonical namespaces if possible to try to
|
||||
// // resolve a foreign namespace.
|
||||
// if (MWNamespace::exists(this.mNamespace)) {
|
||||
// return MWNamespace::getCanonicalName(this.mNamespace);
|
||||
// if (XomwNamespace::exists(this.mNamespace)) {
|
||||
// return XomwNamespace::getCanonicalName(this.mNamespace);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
}
|
||||
|
||||
// try {
|
||||
// $formatter = self::getTitleFormatter();
|
||||
// return $formatter.getNamespaceName(this.mNamespace, this.mDbkeyform);
|
||||
XomwMediaWikiTitleCodec formatter = getTitleFormatter();
|
||||
return formatter.getNamespaceName(this.mNamespace, this.mDbkeyform);
|
||||
// } catch (InvalidArgumentException $ex) {
|
||||
// wfDebug(__METHOD__ . ': ' . $ex.getMessage() . "\n");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Get the namespace text of the subject (rather than talk) page
|
||||
// *
|
||||
@ -1003,7 +1003,7 @@ public class XomwTitle {
|
||||
// */
|
||||
// public function getSubjectNsText() {
|
||||
// global $wgContLang;
|
||||
// return $wgContLang.getNsText(MWNamespace::getSubject(this.mNamespace));
|
||||
// return $wgContLang.getNsText(XomwNamespace::getSubject(this.mNamespace));
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1013,7 +1013,7 @@ public class XomwTitle {
|
||||
// */
|
||||
// public function getTalkNsText() {
|
||||
// global $wgContLang;
|
||||
// return $wgContLang.getNsText(MWNamespace::getTalk(this.mNamespace));
|
||||
// return $wgContLang.getNsText(XomwNamespace::getTalk(this.mNamespace));
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1022,7 +1022,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function canTalk() {
|
||||
// return MWNamespace::canTalk(this.mNamespace);
|
||||
// return XomwNamespace::canTalk(this.mNamespace);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1040,7 +1040,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function isWatchable() {
|
||||
// return !this.isExternal() && MWNamespace::isWatchable(this.getNamespace());
|
||||
// return !this.isExternal() && XomwNamespace::isWatchable(this.getNamespace());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1098,7 +1098,7 @@ public class XomwTitle {
|
||||
// * @since 1.19
|
||||
// */
|
||||
// public function inNamespace($ns) {
|
||||
// return MWNamespace::equals(this.getNamespace(), $ns);
|
||||
// return XomwNamespace::equals(this.getNamespace(), $ns);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1137,7 +1137,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function hasSubjectNamespace($ns) {
|
||||
// return MWNamespace::subjectEquals(this.getNamespace(), $ns);
|
||||
// return XomwNamespace::subjectEquals(this.getNamespace(), $ns);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1148,7 +1148,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function isContentPage() {
|
||||
// return MWNamespace::isContent(this.getNamespace());
|
||||
// return XomwNamespace::isContent(this.getNamespace());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1158,7 +1158,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function isMovable() {
|
||||
// if (!MWNamespace::isMovable(this.getNamespace()) || this.isExternal()) {
|
||||
// if (!XomwNamespace::isMovable(this.getNamespace()) || this.isExternal()) {
|
||||
// // Interwiki title or immovable namespace. Hooks don't get to override here
|
||||
// return false;
|
||||
// }
|
||||
@ -1188,7 +1188,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function isSubpage() {
|
||||
// return MWNamespace::hasSubpages(this.mNamespace)
|
||||
// return XomwNamespace::hasSubpages(this.mNamespace)
|
||||
// ? strpos(this.getText(), '/') != false
|
||||
// : false;
|
||||
// }
|
||||
@ -1288,7 +1288,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function isTalkPage() {
|
||||
// return MWNamespace::isTalk(this.getNamespace());
|
||||
// return XomwNamespace::isTalk(this.getNamespace());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1297,7 +1297,7 @@ public class XomwTitle {
|
||||
// * @return Title The Object for the talk page
|
||||
// */
|
||||
// public function getTalkPage() {
|
||||
// return Title::makeTitle(MWNamespace::getTalk(this.getNamespace()), this.getDBkey());
|
||||
// return Title::makeTitle(XomwNamespace::getTalk(this.getNamespace()), this.getDBkey());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
@ -1308,7 +1308,7 @@ public class XomwTitle {
|
||||
// */
|
||||
// public function getSubjectPage() {
|
||||
// // Is this the same title?
|
||||
// $subjectNS = MWNamespace::getSubject(this.getNamespace());
|
||||
// $subjectNS = XomwNamespace::getSubject(this.getNamespace());
|
||||
// if (this.getNamespace() == $subjectNS) {
|
||||
// return this;
|
||||
// }
|
||||
@ -1422,9 +1422,9 @@ public class XomwTitle {
|
||||
// p = this.mInterwiki . ':';
|
||||
// }
|
||||
|
||||
// if (0 != this.mNamespace) {
|
||||
// p .= this.getNsText() . ':';
|
||||
// }
|
||||
if (0 != this.mNamespace) {
|
||||
p = Bry_.Add(p, this.getNsText(), Byte_ascii.Colon_bry);
|
||||
}
|
||||
return Bry_.Add(p, name);
|
||||
}
|
||||
|
||||
@ -1491,7 +1491,7 @@ public class XomwTitle {
|
||||
// * @since 1.20
|
||||
// */
|
||||
// public function getRootText() {
|
||||
// if (!MWNamespace::hasSubpages(this.mNamespace)) {
|
||||
// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
|
||||
// return this.getText();
|
||||
// }
|
||||
//
|
||||
@ -1526,7 +1526,7 @@ public class XomwTitle {
|
||||
// * @return String Base name
|
||||
// */
|
||||
// public function getBaseText() {
|
||||
// if (!MWNamespace::hasSubpages(this.mNamespace)) {
|
||||
// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
|
||||
// return this.getText();
|
||||
// }
|
||||
//
|
||||
@ -1566,7 +1566,7 @@ public class XomwTitle {
|
||||
// * @return String Subpage name
|
||||
// */
|
||||
// public function getSubpageText() {
|
||||
// if (!MWNamespace::hasSubpages(this.mNamespace)) {
|
||||
// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
|
||||
// return this.mTextform;
|
||||
// }
|
||||
// $parts = explode('/', this.mTextform);
|
||||
@ -2259,7 +2259,7 @@ public class XomwTitle {
|
||||
// }
|
||||
// } elseif ($action == 'move') {
|
||||
// // Check for immobile pages
|
||||
// if (!MWNamespace::isMovable(this.mNamespace)) {
|
||||
// if (!XomwNamespace::isMovable(this.mNamespace)) {
|
||||
// // Specific message for this case
|
||||
// $errors[] = [ 'immobile-source-namespace', this.getNsText() ];
|
||||
// } elseif (!this.isMovable()) {
|
||||
@ -2267,7 +2267,7 @@ public class XomwTitle {
|
||||
// $errors[] = [ 'immobile-source-page' ];
|
||||
// }
|
||||
// } elseif ($action == 'move-target') {
|
||||
// if (!MWNamespace::isMovable(this.mNamespace)) {
|
||||
// if (!XomwNamespace::isMovable(this.mNamespace)) {
|
||||
// $errors[] = [ 'immobile-target-namespace', this.getNsText() ];
|
||||
// } elseif (!this.isMovable()) {
|
||||
// $errors[] = [ 'immobile-target-page' ];
|
||||
@ -3068,7 +3068,7 @@ public class XomwTitle {
|
||||
// * @return boolean
|
||||
// */
|
||||
// public function hasSubpages() {
|
||||
// if (!MWNamespace::hasSubpages(this.mNamespace)) {
|
||||
// if (!XomwNamespace::hasSubpages(this.mNamespace)) {
|
||||
// // Duh
|
||||
// return false;
|
||||
// }
|
||||
@ -3096,7 +3096,7 @@ public class XomwTitle {
|
||||
// * doesn't allow subpages
|
||||
// */
|
||||
// public function getSubpages($limit = -1) {
|
||||
// if (!MWNamespace::hasSubpages(this.getNamespace())) {
|
||||
// if (!XomwNamespace::hasSubpages(this.getNamespace())) {
|
||||
// return [];
|
||||
// }
|
||||
//
|
||||
@ -3335,7 +3335,7 @@ public class XomwTitle {
|
||||
// public static function capitalize($text, $ns = NS_MAIN) {
|
||||
// global $wgContLang;
|
||||
//
|
||||
// if (MWNamespace::isCapitalized($ns)) {
|
||||
// if (XomwNamespace::isCapitalized($ns)) {
|
||||
// return $wgContLang.ucfirst($text);
|
||||
// } else {
|
||||
// return $text;
|
||||
@ -3718,14 +3718,14 @@ public class XomwTitle {
|
||||
// ];
|
||||
// }
|
||||
// // Do the source and target namespaces support subpages?
|
||||
// if (!MWNamespace::hasSubpages(this.getNamespace())) {
|
||||
// if (!XomwNamespace::hasSubpages(this.getNamespace())) {
|
||||
// return [
|
||||
// [ 'namespace-nosubpages', MWNamespace::getCanonicalName(this.getNamespace()) ],
|
||||
// [ 'namespace-nosubpages', XomwNamespace::getCanonicalName(this.getNamespace()) ],
|
||||
// ];
|
||||
// }
|
||||
// if (!MWNamespace::hasSubpages($nt.getNamespace())) {
|
||||
// if (!XomwNamespace::hasSubpages($nt.getNamespace())) {
|
||||
// return [
|
||||
// [ 'namespace-nosubpages', MWNamespace::getCanonicalName($nt.getNamespace()) ],
|
||||
// [ 'namespace-nosubpages', XomwNamespace::getCanonicalName($nt.getNamespace()) ],
|
||||
// ];
|
||||
// }
|
||||
//
|
||||
@ -4502,11 +4502,11 @@ public class XomwTitle {
|
||||
// public function getNamespaceKey($prepend = 'nstab-') {
|
||||
// global $wgContLang;
|
||||
// // Gets the subject namespace if this title
|
||||
// $namespace = MWNamespace::getSubject(this.getNamespace());
|
||||
// $namespace = XomwNamespace::getSubject(this.getNamespace());
|
||||
// // Checks if canonical namespace name exists for namespace
|
||||
// if (MWNamespace::exists(this.getNamespace())) {
|
||||
// if (XomwNamespace::exists(this.getNamespace())) {
|
||||
// // Uses canonical namespace name
|
||||
// $namespaceKey = MWNamespace::getCanonicalName($namespace);
|
||||
// $namespaceKey = XomwNamespace::getCanonicalName($namespace);
|
||||
// } else {
|
||||
// // Uses text of namespace
|
||||
// $namespaceKey = this.getSubjectNsText();
|
||||
@ -4603,7 +4603,7 @@ public class XomwTitle {
|
||||
// global $wgExemptFromUserRobotsControl;
|
||||
//
|
||||
// $bannedNamespaces = is_null($wgExemptFromUserRobotsControl)
|
||||
// ? MWNamespace::getContentNamespaces()
|
||||
// ? XomwNamespace::getContentNamespaces()
|
||||
// : $wgExemptFromUserRobotsControl;
|
||||
//
|
||||
// return !in_array(this.mNamespace, $bannedNamespaces);
|
||||
@ -4771,7 +4771,7 @@ public class XomwTitle {
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (MWNamespace::hasSubpages(this.getNamespace())) {
|
||||
// if (XomwNamespace::hasSubpages(this.getNamespace())) {
|
||||
// // Optional notice for page itself and any parent page
|
||||
// $parts = explode('/', this.getDBkey());
|
||||
// $editnotice_base = $editnotice_ns;
|
||||
|
@ -161,7 +161,7 @@ public class XomwFileRepo {
|
||||
// // Optional settings that have a default
|
||||
// this.initialCapital = isset(info['initialCapital'])
|
||||
// ? info['initialCapital']
|
||||
// : MWNamespace::isCapitalized(NS_FILE);
|
||||
// : XomwNamespace::isCapitalized(NS_FILE);
|
||||
// this.url = isset(info['url'])
|
||||
// ? info['url']
|
||||
// : false; // a subclass may set the URL (e.g. ForeignAPIRepo)
|
||||
@ -622,7 +622,7 @@ public class XomwFileRepo {
|
||||
*/
|
||||
public byte[] getNameFromTitle(XomwTitle title) {
|
||||
// global wgContLang;
|
||||
// if (this.initialCapital != MWNamespace::isCapitalized(NS_FILE)) {
|
||||
// if (this.initialCapital != XomwNamespace::isCapitalized(NS_FILE)) {
|
||||
// name = title.getUserCaseDBKey();
|
||||
// if (this.initialCapital) {
|
||||
// name = wgContLang.ucfirst(name);
|
||||
|
@ -200,7 +200,7 @@ public class Xomw_link_renderer {
|
||||
// Page is a redirect
|
||||
// return 'mw-redirect';
|
||||
// }
|
||||
// elseif ($this->stubThreshold > 0 && MWNamespace::isContent($target->getNamespace())
|
||||
// elseif ($this->stubThreshold > 0 && XomwNamespace::isContent($target->getNamespace())
|
||||
// && $this->linkCache->getGoodLinkFieldObj($target, 'length') < $this->stubThreshold
|
||||
// ) {
|
||||
// Page is a stub
|
||||
|
@ -260,7 +260,6 @@ public abstract class XomwMediaTransformOutput {
|
||||
// }
|
||||
|
||||
attribs.Clear();
|
||||
// 'href' => $this->file->getTitle()->getLocalURL( $query ),
|
||||
attribs.Add_many(Gfh_atr_.Bry__href, this.file.getTitle().getLocalURL(query));
|
||||
attribs.Add_many(Gfh_atr_.Bry__class, Bry__class__image);
|
||||
if (title != null) {
|
||||
|
@ -182,7 +182,7 @@ public class XomwThumbnailImage extends XomwMediaTransformOutput { private final
|
||||
}
|
||||
}
|
||||
|
||||
if (!Php_utl_.empty(options.no_dimensions)) {
|
||||
if (Php_utl_.empty(options.no_dimensions)) {
|
||||
attribs.Add_many(Gfh_atr_.Bry__width, Int_.To_bry(width));
|
||||
attribs.Add_many(Gfh_atr_.Bry__height, Int_.To_bry(height));
|
||||
}
|
||||
|
@ -23,16 +23,17 @@ public class Xomw_lnki_wkr__file__tst {
|
||||
private final Xomw_lnki_wkr__fxt fxt = new Xomw_lnki_wkr__fxt();
|
||||
@Before public void init() {
|
||||
fxt.Clear();
|
||||
fxt.Init__file("A.png", 300, 200);
|
||||
fxt.Init__file("File:A.png", 300, 200);
|
||||
}
|
||||
@Test public void Plain() {
|
||||
fxt.Test__to_html("[[File:A.png]]", "<a href='/wiki/A.png' class='image'><img alt='A.png' src='/orig/7/70/A.png' /></a>");
|
||||
fxt.Test__to_html("[[File:A.png]]", "<a href='/wiki/File:A.png' class='image'><img alt='A.png' src='/orig/7/70/A.png' width='300' height='200' /></a>");
|
||||
}
|
||||
@Test public void Thumb() {
|
||||
fxt.Test__to_html("[[File:A.png|thumb]]", "<div class='thumb tright'><div class='thumbinner' style='width:222px;'><a href='/wiki/A.png' class='image'><img alt='A.png' src='/thumb/7/70/A.png/220px-A.png' class='thumbimage' /></a> <div class='thumbcaption'><div class='magnify'><a href='' class='internal'></a></div></div></div></div>");
|
||||
// TODO.XO:message=enlarge
|
||||
fxt.Test__to_html("[[File:A.png|thumb]]", "<div class='thumb tright'><div class='thumbinner' style='width:222px;'><a href='/wiki/File:A.png' class='image'><img alt='A.png' src='/thumb/7/70/A.png/220px-A.png' width='220' height='146' class='thumbimage' /></a> <div class='thumbcaption'><div class='magnify'><a href='/wiki/File:A.png' class='internal'></a></div></div></div></div>");
|
||||
}
|
||||
@Test public void Size() {
|
||||
fxt.Test__to_html("[[File:A.png|123x456px]]", "<a href='/wiki/A.png' class='image'><img alt='A.png' src='/thumb/7/70/A.png/123px-A.png' /></a>");
|
||||
fxt.Test__to_html("[[File:A.png|123x456px]]", "<a href='/wiki/File:A.png' class='image'><img alt='A.png' src='/thumb/7/70/A.png/123px-A.png' width='123' height='82' /></a>");
|
||||
}
|
||||
@Test public void fitBoxWidth() {
|
||||
// COMMENT:"Height is the relative smaller dimension, so scale width accordingly"
|
||||
@ -43,7 +44,7 @@ public class Xomw_lnki_wkr__file__tst {
|
||||
// EX_2: view is 120,80 (1.5:1)
|
||||
// - dimensions are either (a) 120,60 or (b) 160,80
|
||||
// - use (a) 120,60
|
||||
fxt.Init__file("A.png", 200, 100);
|
||||
fxt.Init__file("File:A.png", 200, 100);
|
||||
fxt.Test__to_html__has("[[File:A.png|120x40px]]", "/80px-A.png");
|
||||
fxt.Test__to_html__has("[[File:A.png|120x80px]]", "/120px-A.png");
|
||||
}
|
||||
|
@ -292,7 +292,7 @@ package gplx.xowa.mediawiki.includes.parsers.prepros; import gplx.*; import gplx
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// } elseif (MWNamespace::isNonincludable(title->getNamespace())) {
|
||||
// } elseif (XomwNamespace::isNonincludable(title->getNamespace())) {
|
||||
// found = false; // access denied
|
||||
// wfDebug(__METHOD__ . ": template inclusion denied for " .
|
||||
// title->getPrefixedDBkey() . "\n");
|
||||
|
@ -16,13 +16,14 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.mediawiki.includes.title; import gplx.*; import gplx.xowa.*; import gplx.xowa.mediawiki.*; import gplx.xowa.mediawiki.includes.*;
|
||||
import gplx.xowa.mediawiki.languages.*;
|
||||
import gplx.xowa.mediawiki.includes.utls.*;
|
||||
public class XomwMediaWikiTitleCodec {
|
||||
// /**
|
||||
// * @var Language
|
||||
// */
|
||||
// protected $language;
|
||||
//
|
||||
/**
|
||||
* @var Language
|
||||
*/
|
||||
private XomwLanguage language;
|
||||
|
||||
// /**
|
||||
// * @var GenderCache
|
||||
// */
|
||||
@ -34,46 +35,50 @@ public class XomwMediaWikiTitleCodec {
|
||||
// protected $localInterwikis;
|
||||
//
|
||||
// /**
|
||||
// * @param Language $language The language Object to use for localizing namespace names.
|
||||
// * @param Language language The language Object to use for localizing namespace names.
|
||||
// * @param GenderCache $genderCache The gender cache for generating gendered namespace names
|
||||
// * @param String[]|String $localInterwikis
|
||||
// */
|
||||
// public function __construct(Language $language, GenderCache $genderCache,
|
||||
// public function __construct(Language language, GenderCache $genderCache,
|
||||
// $localInterwikis = []
|
||||
// ) {
|
||||
// $this->language = $language;
|
||||
// $this->language = language;
|
||||
// $this->genderCache = $genderCache;
|
||||
// $this->localInterwikis = (array)$localInterwikis;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * @see TitleFormatter::getNamespaceName()
|
||||
// *
|
||||
// * @param int $namespace
|
||||
// * @param String $text
|
||||
// *
|
||||
// * @throws InvalidArgumentException If the namespace is invalid
|
||||
// * @return String
|
||||
// */
|
||||
// public function getNamespaceName($namespace, $text) {
|
||||
public XomwMediaWikiTitleCodec(XomwLanguage language) {
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see TitleFormatter::getNamespaceName()
|
||||
*
|
||||
* @param int $namespace
|
||||
* @param String $text
|
||||
*
|
||||
* @throws InvalidArgumentException If the namespace is invalid
|
||||
* @return String
|
||||
*/
|
||||
public byte[] getNamespaceName(int ns, byte[] text) {
|
||||
byte[] name = null;
|
||||
// if ($this->language->needsGenderDistinction() &&
|
||||
// MWNamespace::hasGenderDistinction($namespace)
|
||||
// XomwNamespace::hasGenderDistinction($namespace)
|
||||
// ) {
|
||||
//
|
||||
// // NOTE: we are assuming here that the title text is a user name!
|
||||
// $gender = $this->genderCache->getGenderOf($text, __METHOD__);
|
||||
// $name = $this->language->getGenderNsText($namespace, $gender);
|
||||
// } else {
|
||||
// $name = $this->language->getNsText($namespace);
|
||||
name = language.getNsText(ns);
|
||||
// }
|
||||
//
|
||||
// if ($name === false) {
|
||||
// throw new InvalidArgumentException('Unknown namespace ID: ' . $namespace);
|
||||
// }
|
||||
//
|
||||
// return $name;
|
||||
// }
|
||||
//
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
// /**
|
||||
// * @see TitleFormatter::formatTitle()
|
||||
// *
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user