1
0
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:
gnosygnu 2017-02-19 11:11:26 -05:00
parent 704809e5b9
commit 7894c6d6f4
14 changed files with 6443 additions and 113 deletions

View File

@ -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.*; package gplx.core.lists.hashs; import gplx.*; import gplx.core.*; import gplx.core.lists.*;
import gplx.core.primitives.*; import gplx.core.primitives.*;
public class Hash_adp__int { 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(); private final Int_obj_ref tmp_key = Int_obj_ref.New_neg1();
public void Clear() {hash.Clear();} public void Clear() {hash.Clear();}
public int Len() {return hash.Count();} 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(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_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 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;}
} }

View File

@ -222,7 +222,7 @@ public class XomwLinker {
// global $wgContLang; // global $wgContLang;
// //
// // First we check whether the namespace exists or not. // // First we check whether the namespace exists or not.
// if ( MWNamespace::exists( $namespace ) ) { // if ( XomwNamespace::exists( $namespace ) ) {
// if ( $namespace == NS_MAIN ) { // if ( $namespace == NS_MAIN ) {
// $name = $context->msg( 'blanknamespace' )->text(); // $name = $context->msg( 'blanknamespace' )->text();
// } else { // } else {
@ -608,8 +608,8 @@ public class XomwLinker {
// ThumbnailImage::toHtml() already adds page= onto the end of DjVu URLs // 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 // 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 // zoom icon still needs it, so we make a unique query for it. See bug 14771
// byte[] url = $title->getLocalURL($query); byte[] url = title.getLocalURL(query);
byte[] url = Bry_.Empty; // byte[] url = Bry_.Empty;
// if ($page) { // if ($page) {
// $url = wfAppendQuery($url, [ 'page' => $page ]); // $url = wfAppendQuery($url, [ 'page' => $page ]);
// } // }
@ -1256,7 +1256,7 @@ public class XomwLinker {
// function ( $match ) use ( $title, $local, $wikiId ) { // function ( $match ) use ( $title, $local, $wikiId ) {
// global $wgContLang; // global $wgContLang;
// //
// $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|'; // $medians = '(?:' . preg_quote( XomwNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
// $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):'; // $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):';
// //
// $comment = $match[0]; // $comment = $match[0];

View File

@ -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/>. 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.*; 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.*; import gplx.xowa.mediawiki.includes.title.*;
/** /**
* MediaWikiServices is the service locator for the application scope of MediaWiki. * MediaWikiServices is the service locator for the application scope of MediaWiki.
@ -564,14 +565,15 @@ public class XomwMediaWikiServices {
// public function getLinkRenderer() { // public function getLinkRenderer() {
// return $this->getService( 'LinkRenderer' ); // return $this->getService( 'LinkRenderer' );
// } // }
//
// /** /**
// * @since 1.28 * @since 1.28
// * @return TitleFormatter * @return TitleFormatter
// */ */
// public function getTitleFormatter() { public XomwMediaWikiTitleCodec getTitleFormatter() {
// return $this->getService( 'TitleFormatter' ); // return $this->getService( 'TitleFormatter' );
// } return titleParser;
}
/** /**
* @since 1.28 * @since 1.28
@ -581,7 +583,7 @@ public class XomwMediaWikiServices {
// return $this->getService( 'TitleParser' ); // return $this->getService( 'TitleParser' );
return titleParser; return titleParser;
} }
private XomwMediaWikiTitleCodec titleParser = new XomwMediaWikiTitleCodec(); private XomwMediaWikiTitleCodec titleParser = new XomwMediaWikiTitleCodec(new XomwLanguage());
// /** // /**
// * @since 1.28 // * @since 1.28

View File

@ -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;
// }
}

View File

@ -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 );
}

View File

@ -158,19 +158,19 @@ public class XomwTitle {
// /** @var boolean Would deleting this page be a big deletion? */ // /** @var boolean Would deleting this page be a big deletion? */
// private $mIsBigDeletion = null; // private $mIsBigDeletion = null;
// // @} // // @}
//
// /** /**
// * B/C kludge: provide a TitleParser for use by Title. * B/C kludge: provide a TitleParser for use by Title.
// * Ideally, Title would have no methods that need this. * Ideally, Title would have no methods that need this.
// * Avoid usage of this singleton by using TitleValue * Avoid usage of this singleton by using TitleValue
// * and the associated services when possible. * and the associated services when possible.
// * *
// * @return TitleFormatter * @return TitleFormatter
// */ */
// private static function getTitleFormatter() { private static XomwMediaWikiTitleCodec getTitleFormatter() {
// return MediaWikiServices::getInstance().getTitleFormatter(); return XomwMediaWikiServices.getInstance().getTitleFormatter();
// } }
//
// /** // /**
// * B/C kludge: provide an InterwikiLookup for use by Title. // * B/C kludge: provide an InterwikiLookup for use by Title.
// * Ideally, Title would have no methods that need this. // * 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 // * @return Title|null The new Object, or null on an error
// */ // */
// public static function makeTitleSafe($ns, $title, $fragment = Bry_.Empty, $interwiki = Bry_.Empty) { // public static function makeTitleSafe($ns, $title, $fragment = Bry_.Empty, $interwiki = Bry_.Empty) {
// if (!MWNamespace::exists($ns)) { // if (!XomwNamespace::exists($ns)) {
// return null; // return null;
// } // }
// //
@ -728,7 +728,7 @@ public class XomwTitle {
// global $wgContLang; // global $wgContLang;
// //
// if ($canonicalNamespace) { // if ($canonicalNamespace) {
// $namespace = MWNamespace::getCanonicalName($ns); // $namespace = XomwNamespace::getCanonicalName($ns);
// } else { // } else {
// $namespace = $wgContLang.getNsText($ns); // $namespace = $wgContLang.getNsText($ns);
// } // }
@ -970,32 +970,32 @@ public class XomwTitle {
// this.mContentModel = $model; // this.mContentModel = $model;
// this.mForcedContentModel = true; // this.mForcedContentModel = true;
// } // }
//
// /** /**
// * Get the namespace text * Get the namespace text
// * *
// * @return String|false Namespace text * @return String|false Namespace text
// */ */
// public function getNsText() { public byte[] getNsText() {
// if (this.isExternal()) { if (this.isExternal()) {
// // This probably shouldn't even happen, // // This probably shouldn't even happen,
// // but for interwiki transclusion it sometimes does. // // but for interwiki transclusion it sometimes does.
// // Use the canonical namespaces if possible to try to // // Use the canonical namespaces if possible to try to
// // resolve a foreign namespace. // // resolve a foreign namespace.
// if (MWNamespace::exists(this.mNamespace)) { // if (XomwNamespace::exists(this.mNamespace)) {
// return MWNamespace::getCanonicalName(this.mNamespace); // return XomwNamespace::getCanonicalName(this.mNamespace);
// } // }
// } }
//
// try { // try {
// $formatter = self::getTitleFormatter(); XomwMediaWikiTitleCodec formatter = getTitleFormatter();
// return $formatter.getNamespaceName(this.mNamespace, this.mDbkeyform); return formatter.getNamespaceName(this.mNamespace, this.mDbkeyform);
// } catch (InvalidArgumentException $ex) { // } catch (InvalidArgumentException $ex) {
// wfDebug(__METHOD__ . ': ' . $ex.getMessage() . "\n"); // wfDebug(__METHOD__ . ': ' . $ex.getMessage() . "\n");
// return false; // return false;
// } // }
// } }
//
// /** // /**
// * Get the namespace text of the subject (rather than talk) page // * Get the namespace text of the subject (rather than talk) page
// * // *
@ -1003,7 +1003,7 @@ public class XomwTitle {
// */ // */
// public function getSubjectNsText() { // public function getSubjectNsText() {
// global $wgContLang; // 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() { // public function getTalkNsText() {
// global $wgContLang; // 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 // * @return boolean
// */ // */
// public function canTalk() { // public function canTalk() {
// return MWNamespace::canTalk(this.mNamespace); // return XomwNamespace::canTalk(this.mNamespace);
// } // }
// //
// /** // /**
@ -1040,7 +1040,7 @@ public class XomwTitle {
// * @return boolean // * @return boolean
// */ // */
// public function isWatchable() { // 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 // * @since 1.19
// */ // */
// public function inNamespace($ns) { // 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 // * @return boolean
// */ // */
// public function hasSubjectNamespace($ns) { // 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 // * @return boolean
// */ // */
// public function isContentPage() { // public function isContentPage() {
// return MWNamespace::isContent(this.getNamespace()); // return XomwNamespace::isContent(this.getNamespace());
// } // }
// //
// /** // /**
@ -1158,7 +1158,7 @@ public class XomwTitle {
// * @return boolean // * @return boolean
// */ // */
// public function isMovable() { // 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 // // Interwiki title or immovable namespace. Hooks don't get to override here
// return false; // return false;
// } // }
@ -1188,7 +1188,7 @@ public class XomwTitle {
// * @return boolean // * @return boolean
// */ // */
// public function isSubpage() { // public function isSubpage() {
// return MWNamespace::hasSubpages(this.mNamespace) // return XomwNamespace::hasSubpages(this.mNamespace)
// ? strpos(this.getText(), '/') != false // ? strpos(this.getText(), '/') != false
// : false; // : false;
// } // }
@ -1288,7 +1288,7 @@ public class XomwTitle {
// * @return boolean // * @return boolean
// */ // */
// public function isTalkPage() { // 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 // * @return Title The Object for the talk page
// */ // */
// public function getTalkPage() { // 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() { // public function getSubjectPage() {
// // Is this the same title? // // Is this the same title?
// $subjectNS = MWNamespace::getSubject(this.getNamespace()); // $subjectNS = XomwNamespace::getSubject(this.getNamespace());
// if (this.getNamespace() == $subjectNS) { // if (this.getNamespace() == $subjectNS) {
// return this; // return this;
// } // }
@ -1422,9 +1422,9 @@ public class XomwTitle {
// p = this.mInterwiki . ':'; // p = this.mInterwiki . ':';
// } // }
// if (0 != this.mNamespace) { if (0 != this.mNamespace) {
// p .= this.getNsText() . ':'; p = Bry_.Add(p, this.getNsText(), Byte_ascii.Colon_bry);
// } }
return Bry_.Add(p, name); return Bry_.Add(p, name);
} }
@ -1491,7 +1491,7 @@ public class XomwTitle {
// * @since 1.20 // * @since 1.20
// */ // */
// public function getRootText() { // public function getRootText() {
// if (!MWNamespace::hasSubpages(this.mNamespace)) { // if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// return this.getText(); // return this.getText();
// } // }
// //
@ -1526,7 +1526,7 @@ public class XomwTitle {
// * @return String Base name // * @return String Base name
// */ // */
// public function getBaseText() { // public function getBaseText() {
// if (!MWNamespace::hasSubpages(this.mNamespace)) { // if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// return this.getText(); // return this.getText();
// } // }
// //
@ -1566,7 +1566,7 @@ public class XomwTitle {
// * @return String Subpage name // * @return String Subpage name
// */ // */
// public function getSubpageText() { // public function getSubpageText() {
// if (!MWNamespace::hasSubpages(this.mNamespace)) { // if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// return this.mTextform; // return this.mTextform;
// } // }
// $parts = explode('/', this.mTextform); // $parts = explode('/', this.mTextform);
@ -2259,7 +2259,7 @@ public class XomwTitle {
// } // }
// } elseif ($action == 'move') { // } elseif ($action == 'move') {
// // Check for immobile pages // // Check for immobile pages
// if (!MWNamespace::isMovable(this.mNamespace)) { // if (!XomwNamespace::isMovable(this.mNamespace)) {
// // Specific message for this case // // Specific message for this case
// $errors[] = [ 'immobile-source-namespace', this.getNsText() ]; // $errors[] = [ 'immobile-source-namespace', this.getNsText() ];
// } elseif (!this.isMovable()) { // } elseif (!this.isMovable()) {
@ -2267,7 +2267,7 @@ public class XomwTitle {
// $errors[] = [ 'immobile-source-page' ]; // $errors[] = [ 'immobile-source-page' ];
// } // }
// } elseif ($action == 'move-target') { // } elseif ($action == 'move-target') {
// if (!MWNamespace::isMovable(this.mNamespace)) { // if (!XomwNamespace::isMovable(this.mNamespace)) {
// $errors[] = [ 'immobile-target-namespace', this.getNsText() ]; // $errors[] = [ 'immobile-target-namespace', this.getNsText() ];
// } elseif (!this.isMovable()) { // } elseif (!this.isMovable()) {
// $errors[] = [ 'immobile-target-page' ]; // $errors[] = [ 'immobile-target-page' ];
@ -3068,7 +3068,7 @@ public class XomwTitle {
// * @return boolean // * @return boolean
// */ // */
// public function hasSubpages() { // public function hasSubpages() {
// if (!MWNamespace::hasSubpages(this.mNamespace)) { // if (!XomwNamespace::hasSubpages(this.mNamespace)) {
// // Duh // // Duh
// return false; // return false;
// } // }
@ -3096,7 +3096,7 @@ public class XomwTitle {
// * doesn't allow subpages // * doesn't allow subpages
// */ // */
// public function getSubpages($limit = -1) { // public function getSubpages($limit = -1) {
// if (!MWNamespace::hasSubpages(this.getNamespace())) { // if (!XomwNamespace::hasSubpages(this.getNamespace())) {
// return []; // return [];
// } // }
// //
@ -3335,7 +3335,7 @@ public class XomwTitle {
// public static function capitalize($text, $ns = NS_MAIN) { // public static function capitalize($text, $ns = NS_MAIN) {
// global $wgContLang; // global $wgContLang;
// //
// if (MWNamespace::isCapitalized($ns)) { // if (XomwNamespace::isCapitalized($ns)) {
// return $wgContLang.ucfirst($text); // return $wgContLang.ucfirst($text);
// } else { // } else {
// return $text; // return $text;
@ -3718,14 +3718,14 @@ public class XomwTitle {
// ]; // ];
// } // }
// // Do the source and target namespaces support subpages? // // Do the source and target namespaces support subpages?
// if (!MWNamespace::hasSubpages(this.getNamespace())) { // if (!XomwNamespace::hasSubpages(this.getNamespace())) {
// return [ // return [
// [ 'namespace-nosubpages', MWNamespace::getCanonicalName(this.getNamespace()) ], // [ 'namespace-nosubpages', XomwNamespace::getCanonicalName(this.getNamespace()) ],
// ]; // ];
// } // }
// if (!MWNamespace::hasSubpages($nt.getNamespace())) { // if (!XomwNamespace::hasSubpages($nt.getNamespace())) {
// return [ // 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-') { // public function getNamespaceKey($prepend = 'nstab-') {
// global $wgContLang; // global $wgContLang;
// // Gets the subject namespace if this title // // 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 // // Checks if canonical namespace name exists for namespace
// if (MWNamespace::exists(this.getNamespace())) { // if (XomwNamespace::exists(this.getNamespace())) {
// // Uses canonical namespace name // // Uses canonical namespace name
// $namespaceKey = MWNamespace::getCanonicalName($namespace); // $namespaceKey = XomwNamespace::getCanonicalName($namespace);
// } else { // } else {
// // Uses text of namespace // // Uses text of namespace
// $namespaceKey = this.getSubjectNsText(); // $namespaceKey = this.getSubjectNsText();
@ -4603,7 +4603,7 @@ public class XomwTitle {
// global $wgExemptFromUserRobotsControl; // global $wgExemptFromUserRobotsControl;
// //
// $bannedNamespaces = is_null($wgExemptFromUserRobotsControl) // $bannedNamespaces = is_null($wgExemptFromUserRobotsControl)
// ? MWNamespace::getContentNamespaces() // ? XomwNamespace::getContentNamespaces()
// : $wgExemptFromUserRobotsControl; // : $wgExemptFromUserRobotsControl;
// //
// return !in_array(this.mNamespace, $bannedNamespaces); // 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 // // Optional notice for page itself and any parent page
// $parts = explode('/', this.getDBkey()); // $parts = explode('/', this.getDBkey());
// $editnotice_base = $editnotice_ns; // $editnotice_base = $editnotice_ns;

View File

@ -161,7 +161,7 @@ public class XomwFileRepo {
// // Optional settings that have a default // // Optional settings that have a default
// this.initialCapital = isset(info['initialCapital']) // this.initialCapital = isset(info['initialCapital'])
// ? info['initialCapital'] // ? info['initialCapital']
// : MWNamespace::isCapitalized(NS_FILE); // : XomwNamespace::isCapitalized(NS_FILE);
// this.url = isset(info['url']) // this.url = isset(info['url'])
// ? info['url'] // ? info['url']
// : false; // a subclass may set the URL (e.g. ForeignAPIRepo) // : false; // a subclass may set the URL (e.g. ForeignAPIRepo)
@ -622,7 +622,7 @@ public class XomwFileRepo {
*/ */
public byte[] getNameFromTitle(XomwTitle title) { public byte[] getNameFromTitle(XomwTitle title) {
// global wgContLang; // global wgContLang;
// if (this.initialCapital != MWNamespace::isCapitalized(NS_FILE)) { // if (this.initialCapital != XomwNamespace::isCapitalized(NS_FILE)) {
// name = title.getUserCaseDBKey(); // name = title.getUserCaseDBKey();
// if (this.initialCapital) { // if (this.initialCapital) {
// name = wgContLang.ucfirst(name); // name = wgContLang.ucfirst(name);

View File

@ -200,7 +200,7 @@ public class Xomw_link_renderer {
// Page is a redirect // Page is a redirect
// return 'mw-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 // && $this->linkCache->getGoodLinkFieldObj($target, 'length') < $this->stubThreshold
// ) { // ) {
// Page is a stub // Page is a stub

View File

@ -260,7 +260,6 @@ public abstract class XomwMediaTransformOutput {
// } // }
attribs.Clear(); 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__href, this.file.getTitle().getLocalURL(query));
attribs.Add_many(Gfh_atr_.Bry__class, Bry__class__image); attribs.Add_many(Gfh_atr_.Bry__class, Bry__class__image);
if (title != null) { if (title != null) {

View File

@ -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__width, Int_.To_bry(width));
attribs.Add_many(Gfh_atr_.Bry__height, Int_.To_bry(height)); attribs.Add_many(Gfh_atr_.Bry__height, Int_.To_bry(height));
} }

View File

@ -23,16 +23,17 @@ public class Xomw_lnki_wkr__file__tst {
private final Xomw_lnki_wkr__fxt fxt = new Xomw_lnki_wkr__fxt(); private final Xomw_lnki_wkr__fxt fxt = new Xomw_lnki_wkr__fxt();
@Before public void init() { @Before public void init() {
fxt.Clear(); fxt.Clear();
fxt.Init__file("A.png", 300, 200); fxt.Init__file("File:A.png", 300, 200);
} }
@Test public void Plain() { @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() { @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() { @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() { @Test public void fitBoxWidth() {
// COMMENT:"Height is the relative smaller dimension, so scale width accordingly" // 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) // EX_2: view is 120,80 (1.5:1)
// - dimensions are either (a) 120,60 or (b) 160,80 // - dimensions are either (a) 120,60 or (b) 160,80
// - use (a) 120,60 // - 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|120x40px]]", "/80px-A.png");
fxt.Test__to_html__has("[[File:A.png|120x80px]]", "/120px-A.png"); fxt.Test__to_html__has("[[File:A.png|120x80px]]", "/120px-A.png");
} }

View File

@ -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 // found = false; // access denied
// wfDebug(__METHOD__ . ": template inclusion denied for " . // wfDebug(__METHOD__ . ": template inclusion denied for " .
// title->getPrefixedDBkey() . "\n"); // title->getPrefixedDBkey() . "\n");

View File

@ -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/>. 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.*; 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.*; import gplx.xowa.mediawiki.includes.utls.*;
public class XomwMediaWikiTitleCodec { public class XomwMediaWikiTitleCodec {
// /** /**
// * @var Language * @var Language
// */ */
// protected $language; private XomwLanguage language;
//
// /** // /**
// * @var GenderCache // * @var GenderCache
// */ // */
@ -34,46 +35,50 @@ public class XomwMediaWikiTitleCodec {
// protected $localInterwikis; // 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 GenderCache $genderCache The gender cache for generating gendered namespace names
// * @param String[]|String $localInterwikis // * @param String[]|String $localInterwikis
// */ // */
// public function __construct(Language $language, GenderCache $genderCache, // public function __construct(Language language, GenderCache $genderCache,
// $localInterwikis = [] // $localInterwikis = []
// ) { // ) {
// $this->language = $language; // $this->language = language;
// $this->genderCache = $genderCache; // $this->genderCache = $genderCache;
// $this->localInterwikis = (array)$localInterwikis; // $this->localInterwikis = (array)$localInterwikis;
// } // }
// public XomwMediaWikiTitleCodec(XomwLanguage language) {
// /** this.language = language;
// * @see TitleFormatter::getNamespaceName() }
// *
// * @param int $namespace /**
// * @param String $text * @see TitleFormatter::getNamespaceName()
// * *
// * @throws InvalidArgumentException If the namespace is invalid * @param int $namespace
// * @return String * @param String $text
// */ *
// public function getNamespaceName($namespace, $text) { * @throws InvalidArgumentException If the namespace is invalid
* @return String
*/
public byte[] getNamespaceName(int ns, byte[] text) {
byte[] name = null;
// if ($this->language->needsGenderDistinction() && // if ($this->language->needsGenderDistinction() &&
// MWNamespace::hasGenderDistinction($namespace) // XomwNamespace::hasGenderDistinction($namespace)
// ) { // ) {
// //
// // NOTE: we are assuming here that the title text is a user name! // // NOTE: we are assuming here that the title text is a user name!
// $gender = $this->genderCache->getGenderOf($text, __METHOD__); // $gender = $this->genderCache->getGenderOf($text, __METHOD__);
// $name = $this->language->getGenderNsText($namespace, $gender); // $name = $this->language->getGenderNsText($namespace, $gender);
// } else { // } else {
// $name = $this->language->getNsText($namespace); name = language.getNsText(ns);
// } // }
// //
// if ($name === false) { // if ($name === false) {
// throw new InvalidArgumentException('Unknown namespace ID: ' . $namespace); // throw new InvalidArgumentException('Unknown namespace ID: ' . $namespace);
// } // }
//
// return $name; return name;
// } }
//
// /** // /**
// * @see TitleFormatter::formatTitle() // * @see TitleFormatter::formatTitle()
// * // *

File diff suppressed because it is too large Load Diff