[MediaWiki-commits] [Gerrit] mediawiki/core[master]: Rank aliases in search in order they appear in the messages ...

2016-12-01 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Rank aliases in search in order they appear in the messages 
file.
..


Rank aliases in search in order they appear in the messages file.

This will ensure the local page name (which is the first alias) is prioritized.

Bug: T151660
Change-Id: I3cc266024f5e052d20ff55c4b2c6cbd2945e3dd3
---
M includes/PrefixSearch.php
M tests/phpunit/includes/PrefixSearchTest.php
M tests/phpunit/includes/search/SearchEnginePrefixTest.php
3 files changed, 21 insertions(+), 19 deletions(-)

Approvals:
  DCausse: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/PrefixSearch.php b/includes/PrefixSearch.php
index f6c4147..04c17e4 100644
--- a/includes/PrefixSearch.php
+++ b/includes/PrefixSearch.php
@@ -239,7 +239,7 @@
// canonical and alias title forms...
$keys = [];
foreach ( SpecialPageFactory::getNames() as $page ) {
-   $keys[$wgContLang->caseFold( $page )] = $page;
+   $keys[$wgContLang->caseFold( $page )] = [ 'page' => 
$page, 'rank' => 0 ];
}
 
foreach ( $wgContLang->getSpecialPageAliases() as $page => 
$aliases ) {
@@ -247,33 +247,35 @@
continue;
}
 
-   foreach ( $aliases as $alias ) {
-   $keys[$wgContLang->caseFold( $alias )] = $alias;
+   foreach ( $aliases as $key => $alias ) {
+   $keys[$wgContLang->caseFold( $alias )] = [ 
'page' => $alias, 'rank' => $key ];
}
}
ksort( $keys );
 
-   $srchres = [];
-   $skipped = 0;
+   $matches = [];
foreach ( $keys as $pageKey => $page ) {
if ( $searchKey === '' || strpos( $pageKey, $searchKey 
) === 0 ) {
// bug 27671: Don't use 
SpecialPage::getTitleFor() here because it
// localizes its input leading to searches for 
e.g. Special:All
// returning 
Spezial:MediaWiki-Systemnachrichten and returning
// Spezial:Alle_Seiten twice when 
$wgLanguageCode == 'de'
-   if ( $offset > 0 && $skipped < $offset ) {
-   $skipped++;
-   continue;
+   $matches[$page['rank']][] = 
Title::makeTitleSafe( NS_SPECIAL, $page['page'] );
+
+   if ( isset( $matches[0] ) && count( $matches[0] 
) >= $limit + $offset ) {
+   // We have enough items in primary 
rank, no use to continue
+   break;
}
-   $srchres[] = Title::makeTitleSafe( NS_SPECIAL, 
$page );
}
 
-   if ( count( $srchres ) >= $limit ) {
-   break;
-   }
}
 
-   return $srchres;
+   // Ensure keys are in order
+   ksort( $matches );
+   // Flatten the array
+   $matches = array_reduce( $matches, 'array_merge', [] );
+
+   return array_slice( $matches, $offset, $limit );
}
 
/**
diff --git a/tests/phpunit/includes/PrefixSearchTest.php 
b/tests/phpunit/includes/PrefixSearchTest.php
index bc43709..c5a7e04 100644
--- a/tests/phpunit/includes/PrefixSearchTest.php
+++ b/tests/phpunit/includes/PrefixSearchTest.php
@@ -129,11 +129,11 @@
'results' => [
'Special:ActiveUsers',
'Special:AllMessages',
-   'Special:AllMyFiles',
+   'Special:AllMyUploads',
],
// Third result when testing offset
'offsetresult' => [
-   'Special:AllMyUploads',
+   'Special:AllPages',
],
] ],
[ [
@@ -146,7 +146,7 @@
],
// Third result when testing offset
'offsetresult' => [
-   'Special:UncategorizedImages',
+   'Special:UncategorizedPages',
],
] ],
[ [
diff --git a/tests/phpunit/includes/search/SearchEnginePrefixTest.php 
b/tests/phpunit/includes

[MediaWiki-commits] [Gerrit] mediawiki/core[master]: Rank aliases in search in order they appear in the messages ...

2016-11-29 Thread Smalyshev (Code Review)
Smalyshev has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/324332

Change subject: Rank aliases in search in order they appear in the messages 
file.
..

Rank aliases in search in order they appear in the messages file.

This will ensure the local page name (which is the first alias) is prioritized.

Bug: T151660
Change-Id: I3cc266024f5e052d20ff55c4b2c6cbd2945e3dd3
---
M includes/PrefixSearch.php
1 file changed, 14 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/32/324332/1

diff --git a/includes/PrefixSearch.php b/includes/PrefixSearch.php
index f6c4147..8920223 100644
--- a/includes/PrefixSearch.php
+++ b/includes/PrefixSearch.php
@@ -239,7 +239,7 @@
// canonical and alias title forms...
$keys = [];
foreach ( SpecialPageFactory::getNames() as $page ) {
-   $keys[$wgContLang->caseFold( $page )] = $page;
+   $keys[$wgContLang->caseFold( $page )] = [ 'page' => 
$page, 'rank' => 0 ];
}
 
foreach ( $wgContLang->getSpecialPageAliases() as $page => 
$aliases ) {
@@ -247,33 +247,34 @@
continue;
}
 
-   foreach ( $aliases as $alias ) {
-   $keys[$wgContLang->caseFold( $alias )] = $alias;
+   foreach ( $aliases as $key => $alias ) {
+   $keys[$wgContLang->caseFold( $alias )] = [ 
'page' => $alias, 'rank' => $key ];
}
}
ksort( $keys );
 
-   $srchres = [];
-   $skipped = 0;
+   $matches = [];
foreach ( $keys as $pageKey => $page ) {
if ( $searchKey === '' || strpos( $pageKey, $searchKey 
) === 0 ) {
// bug 27671: Don't use 
SpecialPage::getTitleFor() here because it
// localizes its input leading to searches for 
e.g. Special:All
// returning 
Spezial:MediaWiki-Systemnachrichten and returning
// Spezial:Alle_Seiten twice when 
$wgLanguageCode == 'de'
-   if ( $offset > 0 && $skipped < $offset ) {
-   $skipped++;
-   continue;
+   $matches[$page['rank']][] = 
Title::makeTitleSafe( NS_SPECIAL, $page['page'] );
+
+   if ( isset( $matches[0] ) && count( $matches[0] 
) >= $limit + $offset ) {
+   break;
}
-   $srchres[] = Title::makeTitleSafe( NS_SPECIAL, 
$page );
}
 
-   if ( count( $srchres ) >= $limit ) {
-   break;
-   }
}
 
-   return $srchres;
+   // Ensure keys are in order
+   ksort($matches);
+   // Flatten the array
+   $matches = array_reduce( $matches, 'array_merge', [] );
+
+   return array_slice( $matches, $offset, $limit );
}
 
/**

-- 
To view, visit https://gerrit.wikimedia.org/r/324332
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3cc266024f5e052d20ff55c4b2c6cbd2945e3dd3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Smalyshev 

___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits