Merge "Fix Block::newLoad for IPv6 range blocks - follow-up to Ie8bebd8"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 8 May 2019 19:34:29 +0000 (19:34 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 8 May 2019 19:34:29 +0000 (19:34 +0000)
docs/hooks.txt
includes/WebRequest.php
includes/installer/Installer.php
includes/skins/Skin.php
languages/messages/MessagesSr_ec.php
resources/src/mediawiki.action/mediawiki.action.history.styles.less
tests/phpunit/includes/FauxRequestTest.php
tests/phpunit/includes/WebRequestTest.php

index b2f1e81..e90468d 100644 (file)
@@ -3068,7 +3068,6 @@ $tooltip: The default tooltip.  Escape before using.
     - text - String for the text
     - attribs - Array of attributes
     - query - Array of query parameters to add to the URL
-    - options - Array of options for Linker::link
 $lang: The language code to use for the link in the wfMessage function
 
 'SkinGetPoweredBy': TODO
index 2a03d2d..7da092f 100644 (file)
@@ -849,12 +849,19 @@ class WebRequest {
         * in HTML or other output.
         *
         * If $wgServer is protocol-relative, this will return a fully
-        * qualified URL with the protocol that was used for this request.
+        * qualified URL with the protocol of this request object.
         *
         * @return string
         */
        public function getFullRequestURL() {
-               return wfGetServerUrl( PROTO_CURRENT ) . $this->getRequestURL();
+               // Pass an explicit PROTO constant instead of PROTO_CURRENT so that we
+               // do not rely on state from the global $wgRequest object (which it would,
+               // via wfGetServerUrl/wfExpandUrl/$wgRequest->protocol).
+               if ( $this->getProtocol() === 'http' ) {
+                       return wfGetServerUrl( PROTO_HTTP ) . $this->getRequestURL();
+               } else {
+                       return wfGetServerUrl( PROTO_HTTPS ) . $this->getRequestURL();
+               }
        }
 
        /**
index c231288..5c3d1d0 100644 (file)
@@ -696,6 +696,7 @@ abstract class Installer {
                                'enableSectionEditLinks' => false,
                                'unwrap' => true,
                        ] );
+                       $html = Parser::stripOuterParagraph( $html );
                } catch ( Wikimedia\Services\ServiceDisabledException $e ) {
                        $html = '<!--DB access attempted during parse-->  ' . htmlspecialchars( $text );
                }
index 420c4cb..86a1c4c 100644 (file)
@@ -1623,11 +1623,10 @@ abstract class Skin extends ContextSource {
 
                $links = [
                        'editsection' => [
-                               'text' => $this->msg( 'editsection' )->inLanguage( $lang )->escaped(),
+                               'text' => $this->msg( 'editsection' )->inLanguage( $lang )->text(),
                                'targetTitle' => $nt,
                                'attribs' => $attribs,
-                               'query' => [ 'action' => 'edit', 'section' => $section ],
-                               'options' => [ 'noclasses', 'known' ]
+                               'query' => [ 'action' => 'edit', 'section' => $section ]
                        ]
                ];
 
@@ -1637,12 +1636,11 @@ abstract class Skin extends ContextSource {
 
                $linksHtml = [];
                foreach ( $links as $k => $linkDetails ) {
-                       $linksHtml[] = Linker::link(
+                       $linksHtml[] = Linker::linkKnown(
                                $linkDetails['targetTitle'],
-                               $linkDetails['text'],
+                               htmlspecialchars( $linkDetails['text'] ),
                                $linkDetails['attribs'],
-                               $linkDetails['query'],
-                               $linkDetails['options']
+                               $linkDetails['query']
                        );
                }
 
index 5b32f91..2d73cd2 100644 (file)
@@ -96,29 +96,30 @@ $specialPageAliases = [
        'Activeusers'               => [ 'АктивниКорисници', 'Активни_корисници' ],
        'Allmessages'               => [ 'СвеПоруке', 'Све_поруке' ],
        'AllMyUploads'              => [ 'СваМојаОтпремања', 'СвеМојеДатотеке' ],
-       'Allpages'                  => [ 'Све_странице' ],
+       'Allpages'                  => [ 'СвеСтранице', 'Све_странице' ],
+       'ApiHelp'                   => [ 'API_помоћ' ],
        'ApiSandbox'                => [ 'API_песак', 'АПИ_песак' ],
        'Ancientpages'              => [ 'НајстаријеСтранице', 'НајстаријиЧланци' ],
        'AutoblockList'             => [ 'СписакАутоблокова', 'Аутоблокови' ],
-       'Badtitle'                  => [ 'Лош_наслов' ],
+       'Badtitle'                  => [ 'ЛошНаслов', 'Лош_наслов' ],
        'Blankpage'                 => [ 'ПразнаСтраница' ],
        'Block'                     => [ 'Блокирај', 'БлокирајИП', 'БлокирајКорисника' ],
        'Booksources'               => [ 'КњижевниИзвори', 'ШтампаниИзвори' ],
        'BotPasswords'              => [ 'ЛозинкеБотова' ],
-       'BrokenRedirects'           => [ 'Покварена_преусмерења', 'Неисправна_преусмерења' ],
+       'BrokenRedirects'           => [ 'ПокваренаПреусмерења', 'Покварена_преусмерења', 'Неисправна_преусмерења' ],
        'Categories'                => [ 'Категорије' ],
        'ChangeContentModel'        => [ 'ПромениМоделСадржаја', 'ИзмениМоделСадржаја' ],
        'ChangeCredentials'         => [ 'ПромениАкредитиве' ],
-       'ChangeEmail'               => [ 'ПромениИмејлАдресу' ],
+       'ChangeEmail'               => [ 'ПромениИмејл', 'ПромениИмејлАдресу' ],
        'ChangePassword'            => [ 'ПромениЛозинку' ],
-       'ComparePages'              => [ 'Упореди_странице' ],
-       'Confirmemail'              => [ 'ПотврдиЕ-пошту', 'Потврда_е-поште' ],
+       'ComparePages'              => [ 'УпоредиСтранице', 'Упореди_странице' ],
+       'Confirmemail'              => [ 'Ð\9fоÑ\82вÑ\80диÐ\98меÑ\98л', 'Ð\9fоÑ\82вÑ\80диÐ\95-поÑ\88Ñ\82Ñ\83', 'Ð\9fоÑ\82вÑ\80да_е-поÑ\88Ñ\82е' ],
        'Contributions'             => [ 'Доприноси', 'Прилози' ],
        'CreateAccount'             => [ 'ОтвориНалог', 'Отвори_налог' ],
        'Deadendpages'              => [ 'Ћорсокаци', 'СтраницеКојеНеВодеНикуда', 'СлепеСтранице' ],
        'DeletedContributions'      => [ 'ОбрисаниДоприноси' ],
        'Diff'                      => [ 'Разлике' ],
-       'DoubleRedirects'           => [ 'Двострука_преусмерења' ],
+       'DoubleRedirects'           => [ 'ДвострукаПреусмерења', 'Двострука_преусмерења' ],
        'EditTags'                  => [ 'УредиОзнаке' ],
        'EditWatchlist'             => [ 'УредиСписакНадгледања' ],
        'Emailuser'                 => [ 'ПошаљиИмејлКориснику' ],
@@ -126,12 +127,12 @@ $specialPageAliases = [
        'Export'                    => [ 'Извези' ],
        'Fewestrevisions'           => [ 'НајмањеИзмена', 'ЧланциСаНајмањеРевизија' ],
        'FileDuplicateSearch'       => [ 'ПретрагаДупликатаДатотека' ],
-       'Filepath'                  => [ 'Путања_датотеке' ],
+       'Filepath'                  => [ 'ПутањаДатотеке', 'Путања_датотеке' ],
        'GoToInterwiki'             => [ 'ПосетиМеђувики' ],
        'Import'                    => [ 'Увези' ],
        'Invalidateemail'           => [ 'ПоништиИмејл' ],
        'JavaScriptTest'            => [ 'ТестирањеЈаваскрипта' ],
-       'BlockList'                 => [ 'СписакБлокираних', 'ПописБлокираних' ],
+       'BlockList'                 => [ 'СпиÑ\81акÐ\91локада', 'СпиÑ\81акÐ\91локиÑ\80аниÑ\85', 'Ð\9fопиÑ\81Ð\91локиÑ\80аниÑ\85' ],
        'LinkSearch'                => [ 'ПретрагаВеза' ],
        'LinkAccounts'              => [ 'ПовежиНалоге' ],
        'Listadmins'                => [ 'СписакАдминистратора', 'ПописАдминистратора', 'Списак_администратора' ],
@@ -142,28 +143,28 @@ $specialPageAliases = [
        'Listredirects'             => [ 'СписакПреусмерења', 'Списак_преусмерења' ],
        'ListDuplicatedFiles'       => [ 'СписакДупликата' ],
        'Listusers'                 => [ 'СписакКорисника', 'КорисничкиСписак', 'Списак_корисника', 'Кориснички_списак' ],
-       'Lockdb'                    => [ 'ЗакључајБазу', 'Закључај_базу' ],
-       'Log'                       => [ 'Извештај', 'Извештаји' ],
+       'Lockdb'                    => [ 'ЗакључајБазуПодатака', 'ЗакључајБазу', 'Закључај_базу' ],
+       'Log'                       => [ 'Ð\94невник', 'Ð\98звеÑ\88Ñ\82аÑ\98', 'Ð\98звеÑ\88Ñ\82аÑ\98и' ],
        'Lonelypages'               => [ 'Сирочићи' ],
-       'Longpages'                 => [ 'ДугачкеСтране' ],
+       'Longpages'                 => [ 'Ð\94Ñ\83гаÑ\87кеСÑ\82Ñ\80аниÑ\86е', 'Ð\94Ñ\83гаÑ\87кеСÑ\82Ñ\80ане' ],
        'MediaStatistics'           => [ 'СтатистикеМедија' ],
        'MergeHistory'              => [ 'СпојиИсторију', 'Споји_историју' ],
        'MIMEsearch'                => [ 'MIME_претрага' ],
        'Mostcategories'            => [ 'НајвишеКатегорија', 'ЧланциСаНајвишеКатегорија' ],
        'Mostimages'                => [ 'НајповезанијеДатотеке', 'НајповезанијеСлике' ],
        'Mostinterwikis'            => [ 'НајвишеМеђувикија' ],
-       'Mostlinked'                => [ 'НајповезанијеСтране' ],
+       'Mostlinked'                => [ 'Ð\9dаÑ\98повезаниÑ\98еСÑ\82Ñ\80аниÑ\86е', 'Ð\9dаÑ\98повезаниÑ\98еСÑ\82Ñ\80ане' ],
        'Mostlinkedcategories'      => [ 'НајповезанијеКатегорије' ],
        'Mostlinkedtemplates'       => [ 'НајповезанијиШаблони' ],
-       'Mostrevisions'             => [ 'НајвишеРевизија', 'ЧланциСаНајвишеРевизија' ],
-       'Movepage'                  => [ 'Премести', 'Преусмери', 'Премести_страницу' ],
+       'Mostrevisions'             => [ 'Ð\9dаÑ\98виÑ\88еÐ\98змена', 'Ð\9dаÑ\98виÑ\88еРевизиÑ\98а', 'ЧланÑ\86иСаÐ\9dаÑ\98виÑ\88еРевизиÑ\98а' ],
+       'Movepage'                  => [ 'ПреместиСтраницу', 'Премести', 'Преусмери', 'Премести_страницу' ],
        'Mycontributions'           => [ 'МојиДоприноси', 'Моји_доприноси', 'Моји_прилози' ],
-       'MyLanguage'                => [ 'Мој_језик' ],
+       'MyLanguage'                => [ 'МојЈезик', 'Мој_језик' ],
        'Mypage'                    => [ 'МојаСтраница', 'Моја_страница' ],
        'Mytalk'                    => [ 'МојРазговор', 'Мој_разговор' ],
-       'Myuploads'                 => [ 'Моја_слања' ],
+       'Myuploads'                 => [ 'МојаОтпремања', 'Моја_слања' ],
        'Newimages'                 => [ 'НовеДатотеке', 'НовиФајлови', 'НовеСлике' ],
-       'Newpages'                  => [ 'НовеСтране' ],
+       'Newpages'                  => [ 'Ð\9dовеСÑ\82Ñ\80аниÑ\86е', 'Ð\9dовеСÑ\82Ñ\80ане' ],
        'PagesWithProp'             => [ 'СтраницеСаСвојством' ],
        'PageData'                  => [ 'ПодациСтранице' ],
        'PageLanguage'              => [ 'ЈезикСтранице' ],
@@ -174,20 +175,20 @@ $specialPageAliases = [
        'Prefixindex'               => [ 'СтраницеСаПрефиксом' ],
        'Protectedpages'            => [ 'ЗаштићенеСтранице', 'Заштићене_странице' ],
        'Protectedtitles'           => [ 'ЗаштићениНаслови', 'Заштићени_наслови' ],
-       'Randompage'                => [ 'СлучајнаСтрана', 'Насумична_страница' ],
-       'RandomInCategory'          => [ 'Случајна_страна_у_категорији' ],
+       'Randompage'                => [ 'СлÑ\83Ñ\87аÑ\98наСÑ\82Ñ\80аниÑ\86а', 'СлÑ\83Ñ\87аÑ\98наСÑ\82Ñ\80ана', 'Ð\9dаÑ\81Ñ\83миÑ\87на_Ñ\81Ñ\82Ñ\80аниÑ\86а' ],
+       'RandomInCategory'          => [ 'СлÑ\83Ñ\87аÑ\98на_Ñ\81Ñ\82Ñ\80аниÑ\86а_Ñ\83_каÑ\82егоÑ\80иÑ\98и', 'СлÑ\83Ñ\87аÑ\98на_Ñ\81Ñ\82Ñ\80ана_Ñ\83_каÑ\82егоÑ\80иÑ\98и' ],
        'Randomredirect'            => [ 'СлучајноПреусмерење' ],
-       'Randomrootpage'            => [ 'СлучајнаОсновнаСтрана' ],
+       'Randomrootpage'            => [ 'СлÑ\83Ñ\87аÑ\98наÐ\9eÑ\81новнаСÑ\82Ñ\80аниÑ\86а', 'СлÑ\83Ñ\87аÑ\98наÐ\9eÑ\81новнаСÑ\82Ñ\80ана' ],
        'Recentchanges'             => [ 'СкорашњеИзмене', 'Скорашње_измене' ],
        'Recentchangeslinked'       => [ 'СроднеИзмене' ],
        'Redirect'                  => [ 'Преусмерење' ],
        'RemoveCredentials'         => [ 'УклониАкредитиве' ],
        'ResetTokens'               => [ 'РесетујЖетоне' ],
-       'Revisiondelete'            => [ 'УклањањеИзмене' ],
+       'Revisiondelete'            => [ 'Ð\91Ñ\80иÑ\81аÑ\9aеÐ\98змене', 'УклаÑ\9aаÑ\9aеÐ\98змене' ],
        'RunJobs'                   => [ 'ИзвршиПослове' ],
        'Search'                    => [ 'Претражи' ],
        'Shortpages'                => [ 'КраткеСтранице', 'КраткиЧланци' ],
-       'Specialpages'              => [ 'ПосебнеСтране', 'СпецијалнеСтране', 'Посебне_странице', 'Специјалне_странице' ],
+       'Specialpages'              => [ 'Ð\9fоÑ\81ебнеСÑ\82Ñ\80аниÑ\86е', 'Ð\9fоÑ\81ебнеСÑ\82Ñ\80ане', 'СпеÑ\86иÑ\98алнеСÑ\82Ñ\80ане', 'Ð\9fоÑ\81ебне_Ñ\81Ñ\82Ñ\80аниÑ\86е', 'СпеÑ\86иÑ\98алне_Ñ\81Ñ\82Ñ\80аниÑ\86е' ],
        'Statistics'                => [ 'Статистике' ],
        'Tags'                      => [ 'Ознаке' ],
        'TrackingCategories'        => [ 'КатегоријеЗаПраћење' ],
@@ -197,25 +198,25 @@ $specialPageAliases = [
        'Uncategorizedpages'        => [ 'НекатегорисанеСтранице', 'ЧланциБезКатегорија', 'Чланци_без_категорија' ],
        'Uncategorizedtemplates'    => [ 'НекатегорисаниШаблони', 'ШаблониБезКатегорија' ],
        'Undelete'                  => [ 'Врати' ],
-       'UnlinkAccounts'            => [ 'УклониПовезивањеНалога' ],
-       'Unlockdb'                  => [ 'ОткључајБазу', 'Откључај_базу' ],
+       'UnlinkAccounts'            => [ 'Ð\9eдвежиÐ\9dалоге', 'УклониÐ\9fовезиваÑ\9aеÐ\9dалога' ],
+       'Unlockdb'                  => [ 'ОткључајБазуПодатака', 'ОткључајБазу', 'Откључај_базу' ],
        'Unusedcategories'          => [ 'НеискоришћенеКатегорије' ],
        'Unusedimages'              => [ 'НеискоришћенеДатотеке', 'НеискоришћенеСлике' ],
        'Unusedtemplates'           => [ 'НеискоришћениШаблони' ],
        'Unwatchedpages'            => [ 'НенадгледанеСтранице' ],
-       'Upload'                    => [ 'Пошаљи' ],
+       'Upload'                    => [ 'Ð\9eÑ\82пÑ\80еми', 'Ð\9fоÑ\88аÑ\99и' ],
        'UploadStash'               => [ 'Складиште' ],
-       'Userlogin'                 => [ 'Корисничка_пријава' ],
-       'Userlogout'                => [ 'Корисничка_одјава' ],
+       'Userlogin'                 => [ 'КорисничкаПријава', 'Корисничка_пријава' ],
+       'Userlogout'                => [ 'КорисничкаОдјава', 'Корисничка_одјава' ],
        'Userrights'                => [ 'КорисничкаПрава' ],
        'Version'                   => [ 'Верзија', 'Издање' ],
        'Wantedcategories'          => [ 'ТраженеКатегорије' ],
        'Wantedfiles'               => [ 'ТраженеДатотеке', 'ТраженеСлике' ],
-       'Wantedpages'               => [ 'ТраженеСтране' ],
+       'Wantedpages'               => [ 'ТÑ\80аженеСÑ\82Ñ\80аниÑ\86е', 'ТÑ\80аженеСÑ\82Ñ\80ане' ],
        'Wantedtemplates'           => [ 'ТражениШаблони' ],
        'Watchlist'                 => [ 'СписакНадгледања', 'Списак_надгледања' ],
        'Whatlinkshere'             => [ 'ШтаВодиОвде', 'Шта_је_повезано_овде' ],
-       'Withoutinterwiki'          => [ 'Без_међувикија' ],
+       'Withoutinterwiki'          => [ 'БезМеђувикија', 'Без_међувикија' ],
 ];
 
 $datePreferences = [
index f5019a7..cf63ff8 100644 (file)
 }
 
 #pagehistory li {
-       border: 1px solid #fff;
+       padding: 1px;
 }
 
 #pagehistory li.selected {
        background-color: #f8f9fa;
        color: #222;
-       border-color: #f8f9fa;
        outline: 1px dashed #a2a9b1;
 }
 
index 9e7d680..c054caa 100644 (file)
@@ -7,6 +7,16 @@ class FauxRequestTest extends PHPUnit\Framework\TestCase {
        use MediaWikiCoversValidator;
        use PHPUnit4And6Compat;
 
+       public function setUp() {
+               parent::setUp();
+               $this->orgWgServer = $GLOBALS['wgServer'];
+       }
+
+       public function tearDown() {
+               $GLOBALS['wgServer'] = $this->orgWgServer;
+               parent::tearDown();
+       }
+
        /**
         * @covers FauxRequest::__construct
         */
@@ -148,7 +158,7 @@ class FauxRequestTest extends PHPUnit\Framework\TestCase {
        /**
         * @covers FauxRequest::getRequestURL
         */
-       public function testGetRequestURL() {
+       public function testGetRequestURL_disallowed() {
                $req = new FauxRequest();
                $this->setExpectedException( MWException::class );
                $req->getRequestURL();
@@ -164,6 +174,45 @@ class FauxRequestTest extends PHPUnit\Framework\TestCase {
                $this->assertEquals( 'https://example.org', $req->getRequestURL() );
        }
 
+       /**
+        * @covers FauxRequest::getFullRequestURL
+        */
+       public function testGetFullRequestURL_disallowed() {
+               $GLOBALS['wgServer'] = '//wiki.test';
+               $req = new FauxRequest();
+
+               $this->setExpectedException( MWException::class );
+               $req->getFullRequestURL();
+       }
+
+       /**
+        * @covers FauxRequest::getFullRequestURL
+        */
+       public function testGetFullRequestURL_http() {
+               $GLOBALS['wgServer'] = '//wiki.test';
+               $req = new FauxRequest();
+               $req->setRequestURL( '/path' );
+
+               $this->assertSame(
+                       'http://wiki.test/path',
+                       $req->getFullRequestURL()
+               );
+       }
+
+       /**
+        * @covers FauxRequest::getFullRequestURL
+        */
+       public function testGetFullRequestURL_https() {
+               $GLOBALS['wgServer'] = '//wiki.test';
+               $req = new FauxRequest( [], false, null, 'https' );
+               $req->setRequestURL( '/path' );
+
+               $this->assertSame(
+                       'https://wiki.test/path',
+                       $req->getFullRequestURL()
+               );
+       }
+
        /**
         * @covers FauxRequest::__construct
         * @covers FauxRequest::getProtocol
index 07c307e..cda5660 100644 (file)
@@ -4,16 +4,19 @@
  * @group WebRequest
  */
 class WebRequestTest extends MediaWikiTestCase {
-       protected $oldServer;
 
        protected function setUp() {
                parent::setUp();
 
                $this->oldServer = $_SERVER;
+               $this->oldWgRequest = $GLOBALS['wgRequest'];
+               $this->oldWgServer = $GLOBALS['wgServer'];
        }
 
        protected function tearDown() {
                $_SERVER = $this->oldServer;
+               $GLOBALS['wgRequest'] = $this->oldWgRequest;
+               $GLOBALS['wgServer'] = $this->oldWgServer;
 
                parent::tearDown();
        }
@@ -368,6 +371,22 @@ class WebRequestTest extends MediaWikiTestCase {
                $this->assertSame( [ 'x' ], $req->getValueNames( [ 'y' ] ), 'Exclude keys' );
        }
 
+       /**
+        * @covers WebRequest
+        */
+       public function testGetFullRequestURL() {
+               // Stub this for wfGetServerUrl()
+               $GLOBALS['wgServer'] = '//wiki.test';
+               $req = $this->getMock( WebRequest::class, [ 'getRequestURL', 'getProtocol' ] );
+               $req->method( 'getRequestURL' )->willReturn( '/path' );
+               $req->method( 'getProtocol' )->willReturn( 'https' );
+
+               $this->assertSame(
+                       'https://wiki.test/path',
+                       $req->getFullRequestURL()
+               );
+       }
+
        /**
         * @dataProvider provideGetIP
         * @covers WebRequest::getIP