diff options
author | jenkins-bot <jenkins-bot@gerrit.wikimedia.org> | 2021-12-13 17:23:20 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@wikimedia.org> | 2021-12-13 17:23:20 +0000 |
commit | a3bc9779e93e34ff3e014a2faa546dc5c03cd7c9 (patch) | |
tree | 4059e58e8c19f724df9425b3eb8156615c020c43 | |
parent | aecc9e1b2bacd0edc9c9cd584cc600851da4eabe (diff) | |
parent | e3c0032f2260cc85d11772798fbf18f79ffb3c52 (diff) |
Merge "Add SpecialPage::newSearchPage to replace Skin::setSearchPageTitle"
-rw-r--r-- | RELEASE-NOTES-1.38 | 10 | ||||
-rw-r--r-- | includes/DefaultSettings.php | 1 | ||||
-rw-r--r-- | includes/preferences/DefaultPreferencesFactory.php | 4 | ||||
-rw-r--r-- | includes/skins/Skin.php | 24 | ||||
-rw-r--r-- | includes/skins/SkinTemplate.php | 11 | ||||
-rw-r--r-- | includes/specialpage/SpecialPage.php | 24 |
6 files changed, 62 insertions, 12 deletions
diff --git a/RELEASE-NOTES-1.38 b/RELEASE-NOTES-1.38 index 9419a6427f62..e75fbb797d43 100644 --- a/RELEASE-NOTES-1.38 +++ b/RELEASE-NOTES-1.38 @@ -185,7 +185,6 @@ because of Phabricator reports. - Skin::makeUrl() - Skin::getSearchLink() - Skin::mainPageLink() - For these, use Skin::getSearchPageTitle() instead. * Parser::getUser and ::mUser, as well as ParserOptions::getUser, deprecated since 1.37, has been removed. * Parser::$mStripState, deprecated in 1.35, has been made private. Use @@ -280,11 +279,14 @@ because of Phabricator reports. * User::setOption(), deprecated since 1.35, now emits deprecation warnings. * Linker::formatComment(), ::formatLinksInComment(), ::commentBlock() and revComment() were deprecated. Use the new CommentFormatter service. -* Skin::getSkinStylePath now triggers deprecation warnings. Direct string path +* Several Skin methods have been deprecated. + - Skin::setSearchPageTitle(), Skin::getSearchPageTitle(). For these, + use SpecialPage::newSearchPage() or associated user preference instead. + - Skin::getSkinStylePath now triggers deprecation warnings. Direct string path should be used instead. -* DatabaseBlock::purgeExpired(), deprecated since 1.36, now emits + - SkinTemplate::getPersonalToolsList(), deprecated since 1.35, now emits deprecation warnings. -* SkinTemplate::getPersonalToolsList(), deprecated since 1.35, now emits +* DatabaseBlock::purgeExpired(), deprecated since 1.36, now emits deprecation warnings. * The following methods from the User class now trigger deprecation warnings: - ::blockedBy diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 232e2eadbdc7..24f9c7f9d188 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -5698,6 +5698,7 @@ $wgDefaultUserOptions = [ 'rcenhancedfilters-disable' => 0, 'rclimit' => 50, 'search-match-redirect' => true, + 'search-special-page' => 'Search', 'showhiddencats' => 0, 'shownumberswatching' => 1, 'showrollbackconfirmation' => 0, diff --git a/includes/preferences/DefaultPreferencesFactory.php b/includes/preferences/DefaultPreferencesFactory.php index abe9efcfa286..ef70b02a11e9 100644 --- a/includes/preferences/DefaultPreferencesFactory.php +++ b/includes/preferences/DefaultPreferencesFactory.php @@ -1390,6 +1390,10 @@ class DefaultPreferencesFactory implements PreferencesFactory { * @param array &$defaultPreferences */ protected function searchPreferences( &$defaultPreferences ) { + $defaultPreferences['search-special-page'] = [ + 'type' => 'api', + ]; + foreach ( $this->nsInfo->getValidNamespaces() as $n ) { $defaultPreferences['searchNs' . $n] = [ 'type' => 'api', diff --git a/includes/skins/Skin.php b/includes/skins/Skin.php index de71e89e64f5..5236dd1db81f 100644 --- a/includes/skins/Skin.php +++ b/includes/skins/Skin.php @@ -74,8 +74,6 @@ abstract class Skin extends ContextSource { /** The current major version of the skin specification. */ protected const VERSION_MAJOR = 1; - private $searchPageTitle = null; - /** @var string cached action for cheap lookup */ protected $action; @@ -2657,12 +2655,30 @@ abstract class Skin extends ContextSource { return Html::rawElement( 'div', $realBodyAttribs, $html ); } + /** + * @deprecated 1.38 Use SpecialPage::newSearchPage instead. + */ public function getSearchPageTitle(): Title { - return $this->searchPageTitle ?? SpecialPage::getTitleFor( 'Search' ); + wfDeprecated( __METHOD__, '1.38 Use SpecialPage::newSearchPage' ); + return SpecialPage::newSearchPage( $this->getUser() ); } + /** + * @deprecated 1.38 to change the search page title change the value of the + * preference 'search-special-page' instead. + */ public function setSearchPageTitle( Title $title ) { - $this->searchPageTitle = $title; + $userOptionsManager = MediaWikiServices::getInstance()->getUserOptionsManager(); + $user = $this->getUser(); + $currentTitle = $userOptionsManager->getOption( $user, 'search-special-page' ); + $newTitle = $title->getText(); + if ( $currentTitle !== $newTitle ) { + $userOptionsManager->setOption( $user, 'search-special-page', $newTitle ); + if ( !$user->isAnon() ) { + // avoid this check for logged in users on future visits. + $userOptionsManager->saveOptions( $user ); + } + } } /** diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php index fd598c804af6..ec4f39a436d4 100644 --- a/includes/skins/SkinTemplate.php +++ b/includes/skins/SkinTemplate.php @@ -236,11 +236,12 @@ class SkinTemplate extends Skin { $tpl->set( 'loggedin', $this->loggedin ); $tpl->set( 'notspecialpage', !$title->isSpecialPage() ); - // Deprecated since 1.36 - $searchLink = $this->getSearchPageTitle()->getLocalURL(); + // The template variable `searchaction` is deprecated since 1.36 + $searchTitle = SpecialPage::newSearchPage( $this->getUser() ); + $searchLink = $searchTitle->getLocalURL(); $tpl->set( 'searchaction', $searchLink ); - $tpl->set( 'searchtitle', $this->getSearchPageTitle()->getPrefixedDBkey() ); + $tpl->set( 'searchtitle', $searchTitle->getPrefixedDBkey() ); $tpl->set( 'search', trim( $request->getVal( 'search' ) ) ); $tpl->set( 'stylepath', $config->get( 'StylePath' ) ); $tpl->set( 'articlepath', $config->get( 'ArticlePath' ) ); @@ -905,7 +906,9 @@ class SkinTemplate extends Skin { ), 'html-input' => $this->makeSearchInput( [ 'id' => 'searchInput' ] ), 'msg-search' => $this->msg( 'search' )->text(), - 'page-title' => $this->getSearchPageTitle()->getPrefixedDBkey(), + 'page-title' => SpecialPage::newSearchPage( + $this->getUser() + )->getPrefixedDBkey(), // @since 1.38 'html-button-go-attributes' => Html::expandAttributes( $searchButtonAttributes + $buttonAttributes + [ diff --git a/includes/specialpage/SpecialPage.php b/includes/specialpage/SpecialPage.php index e9836c161052..95b642a52394 100644 --- a/includes/specialpage/SpecialPage.php +++ b/includes/specialpage/SpecialPage.php @@ -91,6 +91,30 @@ class SpecialPage implements MessageLocalizer { private $specialPageFactory; /** + * Get the users prefered search page. + * + * It will fall back to Special:Search if the preference points to a page + * that doesn't exist or is not defined. + * + * @since 1.38 + * @param User $user Search page can be customized by user preference. + * @return Title + */ + public static function newSearchPage( User $user ) { + // Try user preference first + $userOptionsManager = MediaWikiServices::getInstance()->getUserOptionsManager(); + $title = $userOptionsManager->getOption( $user, 'search-special-page' ); + if ( $title ) { + $page = self::getTitleFor( $title ); + $factory = MediaWikiServices::getInstance()->getSpecialPageFactory(); + if ( $factory->exists( $page->getText() ) ) { + return $page; + } + } + return self::getTitleFor( 'Search' ); + } + + /** * Get a localised Title object for a specified special page name * If you don't need a full Title object, consider using TitleValue through * getTitleValueFor() below. |