'GetIP': modify the ip of the current user (called only once).
&$ip: string holding the ip as determined so far
+'GetLangPreferredVariant': Called in LanguageConverter#getPreferredVariant() to
+ allow fetching the language variant code from cookies or other such
+ alternative storage.
+&$req: language variant from the URL (string) or boolean false if no variant
+ was specified in the URL; the value of this variable comes from
+ LanguageConverter#getURLVariant()
+
'GetLinkColours': modify the CSS class of an array of page links.
$linkcolour_ids: array of prefixed DB keys of the pages linked to,
indexed by page_id.
return new OOUI\ButtonWidget( [
'id' => 'mw-editform-cancel',
- 'href' => $this->getContextTitle()->getLinkUrl( $cancelParams ),
+ 'href' => $this->getContextTitle()->getLinkURL( $cancelParams ),
'label' => new OOUI\HtmlSnippet( $this->context->msg( 'cancel' )->parse() ),
'framed' => false,
'infusable' => true,
* @return string
*/
public function getUniqueID() {
- $id = $this->getUniqueIDUnescaped();
+ $id = $this->getUniqueIdUnescaped();
if ( $id ) {
return $this->xmlEncode( $id );
}
"title" => $item->getTitle(),
"url" => $this->xmlEncode( wfExpandUrl( $item->getUrlUnescaped(), PROTO_CURRENT ) ),
"permalink" => $item->rssIsPermalink,
- "uniqueID" => $item->getUniqueId(),
+ "uniqueID" => $item->getUniqueID(),
"description" => $item->getDescription(),
"date" => $this->xmlEncode( $this->formatTime( $item->getDate() ) ),
"author" => $item->getAuthor()
// uses htmlentities, which does not work with XML
$templateParams = [
'language' => $this->xmlEncode( $this->getLanguage() ),
- 'feedID' => $this->getFeedID(),
+ 'feedID' => $this->getFeedId(),
'title' => $this->getTitle(),
'url' => $this->xmlEncode( wfExpandUrl( $this->getUrlUnescaped(), PROTO_CURRENT ) ),
'selfUrl' => $this->getSelfUrl(),
// Manually escaping rather than letting Mustache do it because Mustache
// uses htmlentities, which does not work with XML
$templateParams = [
- "uniqueID" => $item->getUniqueId(),
+ "uniqueID" => $item->getUniqueID(),
"title" => $item->getTitle(),
"mimeType" => $this->xmlEncode( $wgMimeType ),
"url" => $this->xmlEncode( wfExpandUrl( $item->getUrlUnescaped(), PROTO_CURRENT ) ),
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
+use MediaWiki\Storage\RevisionFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionStore;
use Wikimedia\Rdbms\LBFactory;
use LinkCache;
return $this->getService( 'RevisionStore' );
}
+ /**
+ * @since 1.31
+ * @return RevisionLookup
+ */
+ public function getRevisionLookup() {
+ return $this->getService( 'RevisionLookup' );
+ }
+
+ /**
+ * @since 1.31
+ * @return RevisionFactory
+ */
+ public function getRevisionFactory() {
+ return $this->getService( 'RevisionFactory' );
+ }
+
/**
* @since 1.31
* @return PreferencesFactory
use MediaWiki\Storage\MutableRevisionRecord;
use MediaWiki\Storage\RevisionAccessException;
+use MediaWiki\Storage\RevisionFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionRecord;
use MediaWiki\Storage\RevisionStore;
use MediaWiki\Storage\RevisionStoreRecord;
return MediaWikiServices::getInstance()->getRevisionStore();
}
+ /**
+ * @return RevisionLookup
+ */
+ protected static function getRevisionLookup() {
+ return MediaWikiServices::getInstance()->getRevisionLookup();
+ }
+
+ /**
+ * @return RevisionFactory
+ */
+ protected static function getRevisionFactory() {
+ return MediaWikiServices::getInstance()->getRevisionFactory();
+ }
+
/**
* @param bool|string $wiki The ID of the target wiki database. Use false for the local wiki.
*
* @return Revision|null
*/
public static function newFromId( $id, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionById( $id, $flags );
+ $rec = self::getRevisionLookup()->getRevisionById( $id, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
* @return Revision|null
*/
public static function newFromTitle( LinkTarget $linkTarget, $id = 0, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionByTitle( $linkTarget, $id, $flags );
+ $rec = self::getRevisionLookup()->getRevisionByTitle( $linkTarget, $id, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
* @return Revision|null
*/
public static function newFromPageId( $pageId, $revId = 0, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionByPageId( $pageId, $revId, $flags );
+ $rec = self::getRevisionLookup()->getRevisionByPageId( $pageId, $revId, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
}
}
- $rec = self::getRevisionStore()->newRevisionFromArchiveRow( $row, 0, $title, $overrides );
+ $rec = self::getRevisionFactory()->newRevisionFromArchiveRow( $row, 0, $title, $overrides );
return new Revision( $rec, self::READ_NORMAL, $title );
}
*/
public static function newFromRow( $row ) {
if ( is_array( $row ) ) {
- $rec = self::getRevisionStore()->newMutableRevisionFromArray( $row );
+ $rec = self::getRevisionFactory()->newMutableRevisionFromArray( $row );
} else {
- $rec = self::getRevisionStore()->newRevisionFromRow( $row );
+ $rec = self::getRevisionFactory()->newRevisionFromRow( $row );
}
return new Revision( $rec );
$row['user'] = $wgUser;
}
- $this->mRecord = self::getRevisionStore()->newMutableRevisionFromArray(
+ $this->mRecord = self::getRevisionFactory()->newMutableRevisionFromArray(
$row,
$queryFlags,
$this->ensureTitle( $row, $queryFlags, $title )
);
} elseif ( is_object( $row ) ) {
- $this->mRecord = self::getRevisionStore()->newRevisionFromRow(
+ $this->mRecord = self::getRevisionFactory()->newRevisionFromRow(
$row,
$queryFlags,
$this->ensureTitle( $row, $queryFlags, $title )
*/
public function getPrevious() {
$title = $this->getTitle();
- $rec = self::getRevisionStore()->getPreviousRevision( $this->mRecord, $title );
+ $rec = self::getRevisionLookup()->getPreviousRevision( $this->mRecord, $title );
return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title );
}
*/
public function getNext() {
$title = $this->getTitle();
- $rec = self::getRevisionStore()->getNextRevision( $this->mRecord, $title );
+ $rec = self::getRevisionLookup()->getNextRevision( $this->mRecord, $title );
return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title );
}
return false;
}
- $record = self::getRevisionStore()->getKnownCurrentRevision( $title, $revId );
+ $record = self::getRevisionLookup()->getKnownCurrentRevision( $title, $revId );
return $record ? new Revision( $record ) : false;
}
}
return $store;
},
+ 'RevisionLookup' => function ( MediaWikiServices $services ) {
+ return $services->getRevisionStore();
+ },
+
+ 'RevisionFactory' => function ( MediaWikiServices $services ) {
+ return $services->getRevisionStore();
+ },
+
'BlobStoreFactory' => function ( MediaWikiServices $services ) {
global $wgContLang;
return new BlobStoreFactory(
// rev_id is defined as NOT NULL, but this revision may not yet have been inserted.
if ( !$title && $revId !== null && $revId > 0 ) {
- $dbr = $this->getDbConnectionRef( $dbMode );
+ $dbr = $this->getDBConnectionRef( $dbMode );
// @todo: Title::getSelectFields(), or Title::getQueryInfo(), or something like that
$row = $dbr->selectRow(
[ 'revision', 'page' ],
if ( $this->isExternal() ) {
$target = SpecialPage::getTitleFor(
'GoToInterwiki',
- $this->getPrefixedDBKey()
+ $this->getPrefixedDBkey()
);
}
- return $target->getFullUrl( $query, false, $proto );
+ return $target->getFullURL( $query, false, $proto );
}
/**
if ( $rev ) {
$title = $rev->getTitle();
if ( isset( $this->props['ids'] ) ) {
- $vals["{$prefix}id"] = $title->getArticleId();
+ $vals["{$prefix}id"] = $title->getArticleID();
$vals["{$prefix}revid"] = $rev->getId();
}
if ( isset( $this->props['title'] ) ) {
$user->setOption( $key, $value );
$changed = true;
} else {
- $this->addWarning( [ 'apiwarn-validationfailed', wfEscapeWikitext( $key ), $validation ] );
+ $this->addWarning( [ 'apiwarn-validationfailed', wfEscapeWikiText( $key ), $validation ] );
}
}
"Milicevic01",
"Aktron",
"Сербијана",
- "Zoranzoki21"
+ "Zoranzoki21",
+ "Acamicamacaraca"
]
},
"config-desc": "Инсталација за Медијавики",
"config-install-step-done": "готово",
"config-install-step-failed": "није успело",
"config-install-mainpage-exists": "Главна страна већ постоји, прескакање",
+ "config-download-localsettings": "Преузми <code>LocalSettings.php</code>",
"config-help": "помоћ",
"config-help-tooltip": "кликните да проширите",
+ "config-skins-screenshots": "„$1” (снимци екрана: $2)",
+ "config-screenshot": "снимак екрана",
"mainpagetext": "<strong>Медијавики је успешно инсталиран.</strong>",
"mainpagedocfooter": "Погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]"
}
if ( !$externalCallback && !$generalCallback && !$checkIfSafe ) {
return;
}
- $dtd = $reader->readOuterXML();
+ $dtd = $reader->readOuterXml();
$callbackReturn = false;
if ( $generalCallback ) {
/**
* Get the ParserOutput from this object, or false in case of failure
*
- * @return ParserOutput
+ * @return ParserOutput|bool
*/
public function getParserOutput() {
return $this->parserOutput;
<?php
-/**
- * MediaWiki Widgets – ComplexNamespaceInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Namespace input widget. Displays a dropdown box with the choice of available namespaces, plus two
* checkboxes to include associated namespace or to invert selection.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class ComplexNamespaceInputWidget extends \OOUI\Widget {
<?php
-/**
- * MediaWiki Widgets – ComplexTitleInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Complex title input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class ComplexTitleInputWidget extends \OOUI\Widget {
<?php
-/**
- * MediaWiki Widgets – DateInputWidget class.
- *
- * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
namespace MediaWiki\Widget;
* Date input widget.
*
* @since 1.29
+ * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class DateInputWidget extends \OOUI\TextInputWidget {
<?php
-/**
- * MediaWiki Widgets – DateTimeInputWidget class.
- *
- * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
use OOUI\Tag;
/**
* Date-time input widget.
+ *
+ * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class DateTimeInputWidget extends \OOUI\InputWidget {
<?php
-/**
- * MediaWiki Widgets – NamespaceInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Namespace input widget. Displays a dropdown box with the choice of available namespaces.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
<?php
-/**
- * MediaWiki Widgets – SearchInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Search input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class SearchInputWidget extends TitleInputWidget {
<?php
-/**
- * MediaWiki Widgets – SelectWithInputWidget class.
- *
- * @copyright 2011-2017 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
-use \OOUI\TextInputWidget;
-use \OOUI\DropdownInputWidget;
+use OOUI\DropdownInputWidget;
+use OOUI\TextInputWidget;
/**
* Select and input widget.
+ *
+ * @copyright 2011-2017 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class SelectWithInputWidget extends \OOUI\Widget {
<?php
-/**
- * MediaWiki Widgets – TitleInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Title input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class TitleInputWidget extends \OOUI\TextInputWidget {
<?php
-/**
- * MediaWiki Widgets – UserInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* User input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class UserInputWidget extends \OOUI\TextInputWidget {
<?php
-/**
- * MediaWiki Widgets – UsersMultiselectWidget class.
- *
- * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
-use \OOUI\MultilineTextInputWidget;
+use OOUI\MultilineTextInputWidget;
/**
* Widget to select multiple users.
+ *
+ * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class UsersMultiselectWidget extends \OOUI\Widget {
$req = $this->getURLVariant();
+ Hooks::run( 'GetLangPreferredVariant', [ &$req ] );
+
if ( $wgUser->isSafeToLoad() && $wgUser->isLoggedIn() && !$req ) {
$req = $this->getUserVariant();
} elseif ( !$req ) {
"doubleredirects": "Двайныя перанакіраваньні",
"doubleredirectstext": "На гэтай старонцы пададзены сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама мэтавую старонку другога перанакіраваньня, якая звычайна зьяўляецца «сапраўднай» мэтавай старонкай, куды павіннае спасылацца першае перанакіраваньне.\n<del>Закрэсьленыя</del> элемэнты былі выпраўленыя.",
"double-redirect-fixed-move": "[[$1]] была перанесеная.\nСтаронка аўтаматычна абноўленая і цяпер перанакіроўвае на [[$2]].",
- "double-redirect-fixed-maintenance": "Аўтаматычнае выпраўленьне падвойнага перанакіраваньня з [[$1]] на [[$2]] падчас тэхнічнага абслугоўваньня.",
+ "double-redirect-fixed-maintenance": "Аўтаматычнае выпраўленьне падвойнага перанакіраваньня з [[$1]] на [[$2]] падчас тэхнічнага абслугоўваньня",
"double-redirect-fixer": "Выпраўленьне перанакіраваньняў",
"brokenredirects": "Некарэктныя перанакіраваньні",
"brokenredirectstext": "Наступныя перанакіраваньні спасылаюцца на неіснуючыя старонкі:",
"protect-cascadeon": "ھەنووکە ئەم پەڕە پارێزراوە بۆ ئەوەی کە لە نێو ئەم {{PLURAL:$1|پەڕە کە پاراستنی تاڤگەییی|پەڕانە کە پاراستنی تاڤگەیییان}} بۆ چالاککراوە، ھێنراوە.\nدەتوانی ئاستی پاراستنی ئەم پەڕە بگۆڕی، بەڵام ھیچ کاریگەرییەکی نابێت لە سەر پاراستنی تاڤگەیی",
"protect-default": "بە ھەموو بەکارھێنەران ڕێگە بدە",
"protect-fallback": "تەنیا بە بەکارھێنەران بە مافی «$1» ڕێگە بدە",
- "protect-level-autoconfirmed": "تەنیا بە بەکارھێنەرانی پەسندکراو ڕێگە بدە",
+ "protect-level-autoconfirmed": "تەنیا بە [[ویکیپیدیا:بەکارھێنەرانی پەسندکراوی خۆگەڕ|بەکارھێنەرانی پەسندکراوی خۆگەڕ ]] ڕێگە بدە",
"protect-level-sysop": "تەنیا بە بەڕێوەبەران ڕێگە بدە",
"protect-summary-cascade": "تاڤگەیی",
"protect-expiring": "بەسەردەچێ لە ڕێکەوتی $1 (UTC)",
"logentry-protect-unprotect": "$1 {{GENDER:$2|پاراستنی}} لەسەر $3 لابرد",
"logentry-protect-protect": "$1 $3ی {{GENDER:$2|پاراست}} $4",
"logentry-protect-modify": "$1 ئاستی پاراستنی $3ی {{GENDER:$2|گۆڕی}} $4",
+ "logentry-protect-modify-cascade": "$1 $2 ئاستی پاراستنی $3ی $4 گۆڕی [تاڤگەیی]",
"logentry-rights-rights": "$1 ئەندامێتیی {{GENDER:$6|$3}}ی لە $4 بۆ $5 {{GENDER:$2|گۆڕی}}",
"logentry-upload-upload": "$1 $3ی {{GENDER:$2|بار کرد}}",
"logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
"preview": "Pòdzérk",
"showpreview": "Wëskrzëni pòdzérk",
"showdiff": "Wëskrzëni zjinaczi",
- "anoneditwarning": "<strong>Bôczë:</strong> Të nie jes wlogòwóny. Jeżlë wëkònôsz jakąs zmianã, twòja adresa IP mdze widocznô dlô wszëtczich. Jeżlë <strong>[$1 wlogùjesz sã]</strong> abò <strong>[$2 ùsadzysz kònto]</strong>twòje zjinaczi òstóną przëpisóné do kònta, co wicy mającë kònto dobëjesz rozmajité ùdogòdnienia.",
+ "anoneditwarning": "<strong>Bôczë:</strong> Të nie jes wlogòwóny. Jeżlë wëkònôsz jakąs zmianã, twòja adresa IP mdze widocznô dlô wszëtczich. Jeżlë <strong>[$1 wlogùjesz sã]</strong> abò <strong>[$2 ùsadzysz kònto]</strong>, twòje zjinaczi òstóną przëpisóné do kònta, co wicy mającë kònto dobëjesz rozmajité ùdogòdnienia.",
"anonpreviewwarning": "Të nie jes wlogòwóny. Jeżlë wprowadzysz jaczés zjinaczi, twòja adresa IP mdze ùmieszczónô w historie edicji starnë.",
"summary-preview": "Pòdzérk òpisënka zjinaków:",
"blockedtitle": "Brëkòwnik je zascëgóny",
"doubleredirects": "Doppelte Weiterleitungen",
"doubleredirectstext": "Diese Liste enthält Weiterleitungen, die auf Weiterleitungen verlinken.\nJede Zeile enthält Links zur ersten und zweiten Weiterleitung sowie dem Ziel der zweiten Weiterleitung, welches für gewöhnlich die gewünschte Zielseite ist, auf die bereits die erste Weiterleitung zeigen sollte.\n<del>Durchgestrichene</del> Einträge wurden bereits erfolgreich bearbeitet.",
"double-redirect-fixed-move": "[[$1]] wurde verschoben.\nDie Seite wurde automatisch aktualisiert und leitet nun nach [[$2]] weiter.",
- "double-redirect-fixed-maintenance": "Automatische Bereinigung der doppelten Weiterleitung von [[$1]] nach [[$2]] in einem Wartungsauftrag.",
+ "double-redirect-fixed-maintenance": "Automatische Bereinigung der doppelten Weiterleitung von [[$1]] nach [[$2]] in einem Wartungsauftrag",
"double-redirect-fixer": "RedirectBot",
"brokenredirects": "Defekte Weiterleitungen",
"brokenredirectstext": "Diese Spezialseite listet Weiterleitungen auf nicht existierende Seiten auf.",
"doubleredirects": "Doubles redirections",
"doubleredirectstext": "Voici une liste des pages qui redirigent vers des pages qui sont elles-mêmes des pages de redirection.\nChaque entrée contient des liens vers la première et la seconde redirections, ainsi que la première ligne de texte de la seconde page, ce qui fournit habituellement la « vraie » page cible, vers laquelle la première redirection devrait rediriger.\nLes entrées <del>barrées</del> ont été résolues.",
"double-redirect-fixed-move": "[[$1]] a été déplacé.\nIl a été mis à jour automatiquement et redirige maintenant vers [[$2]].",
- "double-redirect-fixed-maintenance": "Correction automatique de la double redirection de [[$1]] vers [[$2]] dans une tâche de maintenance.",
+ "double-redirect-fixed-maintenance": "Correction automatique de la double redirection de [[$1]] vers [[$2]] dans une tâche de maintenance",
"double-redirect-fixer": "Correcteur de redirection",
"brokenredirects": "Redirections cassées",
"brokenredirectstext": "Ces redirections mènent vers des pages inexistantes :",
"doubleredirects": "הפניות כפולות",
"doubleredirectstext": "בדף הזה מופיעה רשימת דפי הפניה שמפנים לדפי הפניה אחרים.\nכל שורה מכילה קישור לשתי ההפניות הראשונות, וכן את היעד של ההפניה השנייה, שהיא לרוב היעד ה\"אמיתי\" של ההפניה, שההפניה הראשונה אמורה להצביע אליו.\nפריטים <del>מחוקים</del> כבר תוקנו.",
"double-redirect-fixed-move": "הדף [[$1]] הועבר.\nהוא עודכן אוטומטית ועכשיו מפנה לדף [[$2]].",
- "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מהדף [[$1]] אל הדף [[$2]] במשימת תחזוקה.",
+ "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מהדף [[$1]] אל הדף [[$2]] במשימת תחזוקה",
"double-redirect-fixer": "מתקן הפניות",
"brokenredirects": "הפניות לא תקינות",
"brokenredirectstext": "ההפניות שלהלן מפנות לדפים שאינם קיימים:",
"doubleredirects": "Redirectiones duple",
"doubleredirectstext": "Iste pagina lista paginas de redirection verso altere paginas de redirection.\nCata linea contine ligamines al prime e al secunde redirection, con le destination del secunde redirection. Iste es normalmente le \"ver\" pagina de destination, al qual le prime redirection tamben deberea punctar.\nLe entratas <del>cancellate</del> ha essite resolvite.",
"double-redirect-fixed-move": "[[$1]] ha essite renominate.\nIllo ha essite automaticamente actualisate e ora redirige verso [[$2]].",
- "double-redirect-fixed-maintenance": "Corrige automaticamente le redirection duple de [[$1]] a [[$2]] durante un carga de mantenentia.",
+ "double-redirect-fixed-maintenance": "Correction automatic del redirection duple de [[$1]] a [[$2]] in un processo de mantenentia",
"double-redirect-fixer": "Corrector de redirectiones",
"brokenredirects": "Redirectiones rupte",
"brokenredirectstext": "Le sequente redirectiones mena a paginas non existente:",
"thursday": "éра",
"friday": "пӀаьраска",
"saturday": "шоатта",
- "sun": "Ð\9aIиранди",
+ "sun": "кIиранди",
"mon": "Орш",
"tue": "Шин",
- "wed": "Ð\9aÑ\85",
- "thu": "Ð\95Ñ\80",
+ "wed": "кÑ\85аÑ\8cÑ\80а",
+ "thu": "еÑ\80а",
"fri": "ПI",
- "sat": "Шоа",
+ "sat": "шоатта",
"january": "АгIой",
"february": "Саь-кур",
"march": "Мутт-хьал",
"otherlanguages": "Кхыча меттаех",
"redirectedfrom": "($1 дIа-сахьожаяьй укхаз)",
"redirectpagesub": "ОагIув-дIа-сахьожадар",
- "redirectto": "Ð\94Iа-Ñ\81аÑ\85Ñ\8cожадар укхаза:",
+ "redirectto": "Ð\94Iа-Ñ\85Ñ\8cа Ñ\85Ñ\8cожавар укхаза:",
"lastmodifiedat": "Ер оагIув тIеххьара хийца хиннай $2 $1 яьннача ха́на.",
"viewcount": "Укх оагIонга хьежа хиннаб $1{{PLURAL:$1|-зза}}.",
"protectedpage": "ГIо оттадаь лораяь оагIув",
"bold_tip": "Сома йоазон текст",
"italic_sample": "Сиха йоазон текст",
"italic_tip": "Сиха йоазон текст",
- "link_sample": "ТIахьожаярга дáкъа цIи",
- "link_tip": "Чура тIахьожаярг",
+ "link_sample": "Тӏатовжама кепакерта цIи",
+ "link_tip": "Чура тӏатовжам",
"extlink_sample": "http://www.example.com тIахьожаярга дáкъа цIи",
"extlink_tip": "Арахьара тIахьожаярг (йиц ма ялийтта префикс http://)",
"headline_sample": "Дáкъа цIера текст",
"nowiki_sample": "Укхаза хувца езаш йоаца текст хьачуоттае",
"nowiki_tip": "Теркал ма е вики-форматировани",
"image_tip": "Чуоттаяь файл",
- "media_tip": "Файла тIахьожавар",
+ "media_tip": "Файлá тIатовжам",
"sig_tip": "Хьа кулгаяздар а, хӀанзара ха а",
"hr_tip": "ПхьорагIен така (цох пайда эцар тIехдаьнна кастта ма де)",
"summary": "Хувцамий сурт оттадар",
"rcshowhidebots": "$1 боташ",
"rcshowhidebots-show": "Хьахьокха",
"rcshowhidebots-hide": "Къайладаккха",
- "rcshowhideliu": "$1 бовзийтарчара доакъашхой",
+ "rcshowhideliu": "$1 ражача дӏаэтта доакъашхой",
"rcshowhideliu-show": "Хьахьокха",
"rcshowhideliu-hide": "Къайлабаха",
"rcshowhideanons": "$1 цIияккханза доакъашхой",
"sp-contributions-newonly": "ОагIонаш кхоллара мара хувцамаш ма гойта.",
"sp-contributions-submit": "Хьалáха",
"whatlinkshere": "Тӏатовжамаш укхаза",
- "whatlinkshere-title": "«$1» ← укхунна тӏатовжаш йола оагӏонаш",
+ "whatlinkshere-title": "«$1» яхача оагӏонна тӏатовжаш йола оагӏонаш",
"whatlinkshere-page": "ОагIув:",
- "linkshere": "ТIехьайоагIа оагIонаш тIахьожаву «'''[[:$1]]'''»:",
- "nolinkshere": "Ð\9eагIона '''[[:$1]]''' кÑ\85Ñ\8bйола оагIонаÑ\88каÑ\80а Ñ\82IаÑ\85Ñ\8cожаÑ\8fÑ\80гаÑ\88 йоаÑ\86аÑ\88 Ñ\8f.",
+ "linkshere": "«'''[[:$1]]'''» яхача оагIонна тIахьожавеш я тIехьайоагIа:",
+ "nolinkshere": "Ð\9aÑ\85Ñ\8bйолÑ\87а оагÓ\8fонаÑ\88каÑ\80а '''[[:$1]]''' Ñ\8fÑ\85аÑ\87а оагÓ\8fон Ñ\82IаÑ\82овжамаÑ\88 доаÑ\86аÑ\88 да.",
"isredirect": "оагIув-дIа-сахьожадар",
"istemplate": "юкъейоалаяр",
"isimage": "Файлови тӏатовжам",
"whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайоагIа|хьалхайоагIараш}} $1",
"whatlinkshere-next": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1",
"whatlinkshere-links": "← тӏатовжамаш",
- "whatlinkshere-hideredirs": "$1 дIа-сахьожадараш",
- "whatlinkshere-hidetrans": "$1 Ñ\8eкÑ\8aейоалаÑ\8fраш",
- "whatlinkshere-hidelinks": "$1 тIахьожаяргаш",
+ "whatlinkshere-hideredirs": "$1 дӏа-сахьожадаьраш",
+ "whatlinkshere-hidetrans": "$1 Ñ\8eкÑ\8aедоаладаÑ\8cраш",
+ "whatlinkshere-hidelinks": "$1 тӏатовжамаш",
"whatlinkshere-hideimages": "$1 файлай тIахьожаяргаш",
"whatlinkshere-filters": "Фильтраш",
"blockip": "ЧIега тоха {{GENDER:$1|доакъашхочун}}",
"movelogpage": "ЦӀераш хувцара тептар",
"movereason": "Бахьан:",
"revertmove": "юха",
- "export": "ОагIонай экспорт",
+ "export": "Оагӏоний экспорт",
"allmessagesname": "Хоам",
"allmessagesdefault": "Массаза йола текст",
"allmessages-filter-all": "Еррига",
"exif-software": "Программни Iалашдар",
"exif-artist": "Автор",
"exif-exifversion": "Верси Exif",
- "exif-colorspace": "Ð\91еÑ\81ай моÑ\82Ñ\82",
+ "exif-colorspace": "Ð\91еÑ\81ий моÑ\82Ñ\82иг",
"exif-pixelxdimension": "Сурта шорал",
"exif-pixelydimension": "Сурта лакхал",
"exif-datetimeoriginal": "Оригинальни таьрахьи хаи",
"htmlform-submit": "ДIадахьийта",
"htmlform-reset": "Хувцамаш юхадаккха",
"htmlform-selectorother-other": "Кхыдар",
- "logentry-delete-delete": "$1 {{GENDER:$2|дIаяккхай}} оагIув $3",
+ "logentry-delete-delete": "$1 яхача доакъашхочо {{GENDER:$2|дIаяккхай}} $3 яха оагӏув",
"logentry-delete-restore": "$1 доакъашхочо {{GENDER:$2|юхаметтаоттаяьй}} $3 яха оагIув ($4)",
"logentry-delete-revision": "$1 цIи йолча доакъашхочо {{GENDER:$2|хийцай}} $3 яхача оагIон {{PLURAL:$5|$5 версин|1=версин}} гуш хилар: $4",
"revdelete-content-hid": "чулоацам къайлабаьккхаб",
"doubleredirects": "Redirect doppi",
"doubleredirectstext": "In questa pagina sono elencate pagine che reindirizzano ad altre pagine di redirect.\nCiascuna riga contiene i collegamenti al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene la pagina di destinazione \"corretta\" alla quale dovrebbe puntare anche il primo redirect.\nI redirect <del>cancellati</del> sono stati corretti.",
"double-redirect-fixed-move": "[[$1]] è stata spostato.\nÈ stato automaticamente aggiornato e ora è un redirect a [[$2]].",
- "double-redirect-fixed-maintenance": "Corretto automaticamente il doppio redirect da [[$1]] a [[$2]] nel lavoro di manutenzione.",
+ "double-redirect-fixed-maintenance": "Corretto automaticamente il doppio redirect da [[$1]] a [[$2]] nel lavoro di manutenzione",
"double-redirect-fixer": "Correttore di redirect",
"brokenredirects": "Redirect errati",
"brokenredirectstext": "I seguenti redirect puntano a pagine inesistenti:",
"doubleredirects": "이중 넘겨주기 목록",
"doubleredirectstext": "이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다.\n매 줄에는 첫 번째 문서와 두 번째 문서의 링크가 있습니다. 그리고 보통 첫 번째 문서가 넘겨주어야 할 \"실제\" 문서인 두 번째 넘겨주기의 대상이 있습니다.\n<del>취소선이 그어진</del> 부분은 이미 해결되었습니다.",
"double-redirect-fixed-move": "[[$1]] 문서를 이동하였습니다.\n이 문서는 자동으로 수정되었으며 이제 [[$2]] 문서로 자동으로 넘겨줍니다.",
- "double-redirect-fixed-maintenance": "유지 보수 작업에서 [[$1]]에서 [[$2]](으)로 이중 넘겨주기를 자동으로 고치고 있습니다.",
+ "double-redirect-fixed-maintenance": "유지 보수 작업에서 [[$1]]에서 [[$2]](으)로 이중 넘겨주기를 자동으로 고치고 있습니다",
"double-redirect-fixer": "넘겨주기 수리꾼",
"brokenredirects": "끊긴 넘겨주기 목록",
"brokenredirectstext": "존재하지 않는 문서로 넘겨주기가 되어 있는 문서의 목록입니다:",
"doubleredirects": "Dubbele doorverwijzingen",
"doubleredirectstext": "Deze lijst bevat pagina's die doorverwijzen naar andere doorverwijspagina's.\nElke rij bevat koppelingen naar de eerste en de tweede doorverwijspagina en een koppeling naar de doelpagina van de tweede doorverwijspagina.\nMeestal is de laatste pagina het eigenlijke doel, waar de eerste pagina naar zou moeten doorverwijzen.\n<del>Doorgehaalde regels</del> geven aan dat het probleem al is opgelost.",
"double-redirect-fixed-move": "[[$1]] is verplaatst.\nHet is automatisch bijgewerkt en verwijst nu naar [[$2]].",
- "double-redirect-fixed-maintenance": "Automatische dubbele doorverwijzing van [[$1]] naar [[$2]] herstellen in een onderhoudstaak.",
+ "double-redirect-fixed-maintenance": "Automatische dubbele doorverwijzing van [[$1]] naar [[$2]] herstellen in een onderhoudstaak",
"double-redirect-fixer": "Doorverwijzingen opschonen",
"brokenredirects": "Defecte doorverwijzingen",
"brokenredirectstext": "De onderstaande doorverwijzingen verwijzen naar niet-bestaande pagina's.",
"doubleredirects": "Redirecionamentos duplos",
"doubleredirectstext": "Esta página lista todas as páginas que redirecionam para outras páginas de redirecionamento.\nCada linha contém hiperligações para o primeiro e segundo redirecionamentos, bem como o destino do segundo redirecionamento, geralmente contendo a verdadeira página de destino, que devia ser o destino do primeiro redirecionamento.\n<del>Entradas cortadas</del> já foram solucionadas.",
"double-redirect-fixed-move": "[[$1]] foi movida.\nEla foi atualizada automaticamente e agora redireciona para [[$2]].",
- "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]] num processo de manutenção.",
+ "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]] num processo de manutenção",
"double-redirect-fixer": "Corretor de redirecionamentos",
"brokenredirects": "Redirecionamentos quebrados",
"brokenredirectstext": "Os seguintes redirecionamentos contêm hiperligações para páginas inexistentes:",
"rcfilters-watchlist-edit-watchlist-button": "Кэтэбилиҥ тиһилигин уларытыы",
"rcfilters-watchlist-showupdated": "Эн көрбүтүҥ кэннэ уларыйбыт <strong>модьу бичигинэн</strong> уонна толору бэлиэннэн бэлиэтэммит.",
"rcfilters-preference-label": "Тиһэх барылын көстүбэт гын",
+ "rcfilters-preference-help": "2017 сыл алтыһаанын уларытыыларын уонн ол кэннэ киирбит тэриллэри суох гынар.",
"rcfilters-filter-showlinkedfrom-label": "Сигэнэр сирэйдэрбэр уларытыылары көрдөр",
"rcfilters-filter-showlinkedfrom-option-label": "<strong>Талбыт сирэйиҥ</strong> сигэнэр сирэйдэрэ",
"rcfilters-filter-showlinkedto-label": "Сигэнэр сирэйдэри уларытыыны көрдөр",
"uploadstash-file-not-found-no-object": "Ойуучаан билэтин эбийиэгин оҥорор сатаммата.",
"uploadstash-file-not-found-no-remote-thumb": "Эскиис сатаан хостоммото: $1\nURL = $2",
"uploadstash-file-not-found-missing-content-type": "Content-type аат көстүбэтэ.",
+ "uploadstash-file-not-found-not-exists": "Билэ сытар сирэ көстүбэтэ эбэтэр өйдөммөтө.",
+ "uploadstash-file-too-large": "$1 баайтан бөдөҥ билэни таҥастыыр сатаммат.",
"uploadstash-not-logged-in": "Бэлиэтэммит кыттааччы суох, билэ кыттааччы киэнэ буолуохтаах.",
"uploadstash-wrong-owner": "Бу билэ ($1) кыттааччы киэнэ буолбатах.",
"uploadstash-no-such-key": "Күлүүс ($1) суох, сотор сатаммат.",
"apisandbox-sending-request": "API-көрдөбүлү ыытыы…",
"apisandbox-loading-results": "API-түмүгүн ылыы…",
"apisandbox-results-error": "Көрдөбүлгэ API-хоруйу киллэрии кэмигэр алҕас таҕыста: $1.",
+ "apisandbox-results-login-suppressed": "Бу ыйытык браузер домены хааччахтыырын туораары бэлиэтэммэтэх кыттааччы ыйытыгын курдук таҥастаммыт. API кумаҕын токена оннук ыйытыктары аптамаатынан сороҕор сөпкө таҥастаабат, онон, бука диэн, бэйэҥ толор.",
"apisandbox-request-selectformat-label": "Көрдөбүлү маннык көрдөр:",
"apisandbox-request-format-url-label": "Көрдөбүл URL-ун устуруоката",
"apisandbox-request-url-label": "Көрдөбүл URL-аадырыһа:",
"sp-contributions-newonly": "Саҥаттан оҥоһуллубут сирэйдэри эрэ көрдөр",
"sp-contributions-hideminor": "Суолтата суох уларытыылары көрдөрүмэ",
"sp-contributions-submit": "Көрдөө",
+ "sp-contributions-outofrange": "Түмүгү көрдөрөр сатаммата. Көрдөммүт IP-диапазон CIDR /$1 лимиититтэн улахан эбит.",
"whatlinkshere": "Манна сигэнэллэр",
"whatlinkshere-title": "Сирэй манна сигэнэр \"$1\"",
"whatlinkshere-page": "Сирэй:",
"ipb_blocked_as_range": "Сыыһа: $1 IP-та чопчу бобуллубатах (не блокирован), онон аһыллар кыаҕа суох. Ол гынан баран IP бу $2 диапазон сорҕотун быһыытынан бобуллубут, ону арыйыахха (бобуутун устуохха) сөп.",
"ip_range_invalid": "IP-лар диапазоннара сатаммат.",
"ip_range_toolarge": "Мантан /$1 үөһэ диапазоннары хааччахтыыр сатаммат.",
+ "ip_range_exceeded": "IP-диапазон муҥутууру куоһарар. Көҥүллэнэр диапазон маннык: /$1.",
"proxyblocker": "Прокси бобуллуута",
"proxyblockreason": "Эн IP-ҥ аһаҕас прокси эбит, онон бобулунна. Интернет-провайдергын эбэтэр техническэй сулууспаны кытта сибээстэһэн кутталлаах суол баарын биллэр.",
"sorbsreason": "Эн IP-ҥ {{SITENAME}} саайт DNSBL-гар аһаҕас прокси быһыытынан сылдьар.",
"usercssispublic": "Болҕой: CSS сирэйигэр кистэлэҥ сибидиэнньэ суох буолуохтаах, тоҕо диэтэххэ ону атын кыттааччылар хааччаҕа суох көрөр кыахтаахтар.",
"restrictionsfield-badip": "IP эбэтэр IP-лар диапазоннара сатаммат: $1",
"restrictionsfield-label": "Көҥүллэммит IP диапазона:",
+ "restrictionsfield-help": "Устуруокаҕа биирдии IP-аадырыс эбэтэр CIDR-диапазон. Барытын көҥүллүүргэ маны туһан:<pre>0.0.0.0/0\n::/0</pre>",
"revid": "$1 торум",
"pageid": "$1 сирэй нүөмэрэ",
"rawhtml-notallowed": "<html> тиэктэр көннөрү сирэйдэр эрэ истэригэр туттулаллар.",
"doubleredirects": "Dvojne preusmeritve",
"doubleredirectstext": "Ta stran navaja strani, ki se preusmerjajo na druge preusmeritvene strani.\nVsaka vrstica vsebuje povezavo do prve in druge preusmeritve, kakor tudi do cilja druge preusmeritve, ki je po navadi »prava« ciljna stran, na katero naj bi kazala prva preusmeritev.\n<del>Prečrtani</del> vnosi so bili razrešeni.",
"double-redirect-fixed-move": "Stran [[$1]] smo premaknili.\nSamodejno smo jo posodobili in sedaj se preusmerja na [[$2]].",
- "double-redirect-fixed-maintenance": "Samodejno popravljanje dvojne preusmeritve z [[$1]] na [[$2]] v vzdrževalnem delu.",
+ "double-redirect-fixed-maintenance": "Samodejno popravljanje dvojne preusmeritve z [[$1]] na [[$2]] v vzdrževalnem delu",
"double-redirect-fixer": "Popravljalec preusmeritev",
"brokenredirects": "Pretrgane preusmeritve",
"brokenredirectstext": "Naslednje preusmeritve kažejo na neobstoječe strani:",
"doubleredirects": "双重重定向",
"doubleredirectstext": "本页面列出重定向至其他重定向页面的页面。每行含有第一及第二重定向的链接和第二重定向的目标(这通常是第一重定向应该指向的“实际”目标页面)。<del>带删除线的</del>条目已经被解决。",
"double-redirect-fixed-move": "[[$1]]已被移动。它已自动更新,并且现在重定向至[[$2]]。",
- "double-redirect-fixed-maintenance": "在维护工作中自动修复双重重定向自[[$1]]至[[$2]]。",
+ "double-redirect-fixed-maintenance": "在维护工作中自动修复双重重定向自[[$1]]至[[$2]]",
"double-redirect-fixer": "重定向修复器",
"brokenredirects": "受损重定向",
"brokenredirectstext": "以下重定向链接至不存在的页面:",
"must exist and be readable in the source directory.\n" .
"Use --conf to specify it." );
}
+ if ( isset( $this->mOptions['server'] ) ) {
+ $_SERVER['SERVER_NAME'] = $this->mOptions['server'];
+ }
$wgCommandLineMode = true;
return $settingsFile;
'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
],
'mediawiki.special.preferences' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'scripts' => [
'resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js',
'resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js',
],
],
'mediawiki.special.preferences.styles' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.styles.css',
],
'mediawiki.special.recentchanges' => [
rvdifftotext: $textbox.textSelection( 'getContents' ),
rvdifftotextpst: true,
rvprop: '',
- rvsection: section === '' ? undefined : section
+ rvsection: section === '' ? undefined : section,
+ uselang: mw.config.get( 'wgUserLanguage' )
} );
// Wait for the summary before showing the diff so the page doesn't jump twice
<?php
-/** tests for includes/Html.php */
class HtmlTest extends MediaWikiTestCase {
* @file
*/
-/**
- * Test class for MWNamespace.
- * @todo FIXME: this test file is a mess
- */
class MWNamespaceTest extends MediaWikiTestCase {
+
protected function setUp() {
parent::setUp();
] );
}
-# ### START OF TESTS #########################################################
-
/**
* @todo Write more texts, handle $wgAllowImageMoving setting
* @covers MWNamespace::isMovable
*/
public function testIsMovable() {
$this->assertFalse( MWNamespace::isMovable( NS_SPECIAL ) );
- # @todo FIXME: Write more tests!!
}
/**
$this->assertNull( MWNamespace::getAssociated( NS_SPECIAL ) );
}
- /**
- * @todo Implement testExists().
- */
- /*
- public function testExists() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
/**
* Test MWNamespace::equals
* Note if we add a namespace registration system with keys like 'MAIN'
);
}
- /**
- * @todo Implement testGetCanonicalNamespaces().
- */
- /*
- public function testGetCanonicalNamespaces() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
- /**
- * @todo Implement testGetCanonicalName().
- */
- /*
- public function testGetCanonicalName() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
- /**
- * @todo Implement testGetCanonicalIndex().
- */
- /*
- public function testGetCanonicalIndex() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
- /**
- * @todo Implement testGetValidNamespaces().
- */
- /*
- public function testGetValidNamespaces() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
public function provideHasTalkNamespace() {
return [
[ NS_MEDIA, false ],
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionStore;
use MediaWiki\Storage\SqlBlobStore;
'BlobStore' => [ 'BlobStore', BlobStore::class ],
'_SqlBlobStore' => [ '_SqlBlobStore', SqlBlobStore::class ],
'RevisionStore' => [ 'RevisionStore', RevisionStore::class ],
+ 'RevisionLookup' => [ 'RevisionLookup', RevisionLookup::class ],
'HttpRequestFactory' => [ 'HttpRequestFactory', HttpRequestFactory::class ],
];
}
[ 'gzip', 'object' ],
'2®Àþ2',
];
+ yield 'T184749 (windows-1252 encoding), string in string out' => [
+ 'windows-1252',
+ iconv( 'utf-8', 'windows-1252', "sammansättningar" ),
+ [],
+ 'sammansättningar',
+ ];
+ yield 'T184749 (windows-1252 encoding), string in string out with gzip' => [
+ 'windows-1252',
+ gzdeflate( iconv( 'utf-8', 'windows-1252', "sammansättningar" ) ),
+ [ 'gzip' ],
+ 'sammansättningar',
+ ];
}
/**
public function provideBlobs() {
yield [ '' ];
yield [ 'someText' ];
+ yield [ "sammansättningar" ];
}
/**
$this->assertSame( $blob, $store->getBlob( $address ) );
}
+ /**
+ * @dataProvider provideBlobs
+ * @covers \MediaWiki\Storage\SqlBlobStore::storeBlob
+ * @covers \MediaWiki\Storage\SqlBlobStore::getBlob
+ */
+ public function testSimpleStoreGetBlobSimpleRoundtripWindowsLegacyEncoding( $blob ) {
+ $store = $this->getBlobStore( 'windows-1252' );
+ $address = $store->storeBlob( $blob );
+ $this->assertSame( $blob, $store->getBlob( $address ) );
+ }
+
+ /**
+ * @dataProvider provideBlobs
+ * @covers \MediaWiki\Storage\SqlBlobStore::storeBlob
+ * @covers \MediaWiki\Storage\SqlBlobStore::getBlob
+ */
+ public function testSimpleStoreGetBlobSimpleRoundtripWindowsLegacyEncodingGzip( $blob ) {
+ $store = $this->getBlobStore( 'windows-1252', true );
+ $address = $store->storeBlob( $blob );
+ $this->assertSame( $blob, $store->getBlob( $address ) );
+ }
+
}
$this->assertNull( $text );
}
- /*
- public static function makeContent( $text, Title $title, $modelId = null, $format = null ) {}
- */
-
public static function dataMakeContent() {
return [
[ 'hallo', 'Help:Test', null, null, CONTENT_MODEL_WIKITEXT, 'hallo', false ],
$this->assertSame( $tag, 'mw-contentmodelchange' );
}
- /*
- public function testSupportsSections() {
- $this->markTestIncomplete( "not yet implemented" );
- }
- */
-
/**
* @covers ContentHandler::supportsCategories
*/
$this->assertSame( $expected, $tag );
}
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {}
- */
-
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetUndoContent( Revision $current, Revision $undo,
- Revision $undoafter = null
- ) {
- }
- */
-
/**
* @covers WikitextContentHandler::getDataForSearchIndex
*/
$this->assertEquals( $expected, $meta['Copyright']['x-default'] );
}
- /**
- * Test extraction of pHYs tags, which can tell what the
- * actual resolution of the image is (aka in dots per meter).
- */
- /*
- public function testPngPhysTag() {
- $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
- 'Png-native-test.png' );
-
- $this->assertArrayHasKey( 'text', $meta );
- $meta = $meta['text'];
-
- $this->assertEquals( '2835/100', $meta['XResolution'] );
- $this->assertEquals( '2835/100', $meta['YResolution'] );
- $this->assertEquals( 3, $meta['ResolutionUnit'] ); // 3 = cm
- }
- */
-
/**
* Given a normal static PNG, check the animation metadata returned.
*/
namespace MediaWiki\Tests\Maintenance;
+use Maintenance;
use MediaWikiTestCase;
use Wikimedia\TestingAccessWrapper;