jenkins-bot has submitted this change and it was merged.
Change subject: Move all CirrusSearch hooks into one file
......................................................................
Move all CirrusSearch hooks into one file
This will help keep the CirrusSearch class from getting bloated and
puts all of these static things in one single place.
Change-Id: Ie6cc4dfe71982c816fcef77a2e17e8009d9155d5
---
M CirrusSearch.php
M includes/CirrusSearch.body.php
A includes/CirrusSearchHooks.php
M includes/CirrusSearchUpdater.php
4 files changed, 153 insertions(+), 109 deletions(-)
Approvals:
Manybubbles: Looks good to me, approved
jenkins-bot: Verified
diff --git a/CirrusSearch.php b/CirrusSearch.php
index af6602f..1e5b4c2 100644
--- a/CirrusSearch.php
+++ b/CirrusSearch.php
@@ -199,6 +199,7 @@
*/
$wgAutoloadClasses['CirrusSearch'] = $includes . 'CirrusSearch.body.php';
$wgAutoloadClasses['CirrusSearchAnalysisConfigBuilder'] = $includes .
'CirrusSearchAnalysisConfigBuilder.php';
+$wgAutoloadClasses['CirrusSearchHooks'] = $includes . 'CirrusSearchHooks.php';
$wgAutoloadClasses['CirrusSearchConnection'] = $includes .
'CirrusSearchConnection.php';
$wgAutoloadClasses['CirrusSearchDeletePagesJob'] = $includes .
'CirrusSearchDeletePagesJob.php';
$wgAutoloadClasses['CirrusSearchLinksUpdateJob'] = $includes .
'CirrusSearchLinksUpdateJob.php';
@@ -220,13 +221,13 @@
/**
* Hooks
*/
-$wgHooks[ 'ApiBeforeMain' ][] = 'CirrusSearch::apiBeforeMainHook';
-$wgHooks[ 'ArticleDeleteComplete' ][] =
'CirrusSearch::articleDeleteCompleteHook';
-$wgHooks[ 'BeforeInitialize' ][] = 'CirrusSearch::beforeInitializeHook';
-$wgHooks[ 'GetBetaFeaturePreferences' ][] = 'CirrusSearch::getPreferencesHook';
-$wgHooks[ 'LinksUpdateComplete' ][] =
'CirrusSearchUpdater::linksUpdateCompletedHook';
-$wgHooks[ 'SoftwareInfo' ][] = 'CirrusSearch::softwareInfoHook';
-$wgHooks[ 'SpecialSearchResultsPrepend' ][] =
'CirrusSearch::specialSearchResultsPrependHook';
+$wgHooks[ 'ApiBeforeMain' ][] = 'CirrusSearchHooks::apiBeforeMainHook';
+$wgHooks[ 'ArticleDeleteComplete' ][] =
'CirrusSearchHooks::articleDeleteCompleteHook';
+$wgHooks[ 'BeforeInitialize' ][] = 'CirrusSearchHooks::beforeInitializeHook';
+$wgHooks[ 'GetBetaFeaturePreferences' ][] =
'CirrusSearchHooks::getPreferencesHook';
+$wgHooks[ 'LinksUpdateComplete' ][] =
'CirrusSearchHooks::linksUpdateCompletedHook';
+$wgHooks[ 'SoftwareInfo' ][] = 'CirrusSearchHooks::softwareInfoHook';
+$wgHooks[ 'SpecialSearchResultsPrepend' ][] =
'CirrusSearchHooks::specialSearchResultsPrependHook';
/**
* i18n
diff --git a/includes/CirrusSearch.body.php b/includes/CirrusSearch.body.php
index 43da983..25bd867 100644
--- a/includes/CirrusSearch.body.php
+++ b/includes/CirrusSearch.body.php
@@ -104,92 +104,4 @@
}
return $term;
}
-
- public static function articleDeleteCompleteHook( $page, $user,
$reason, $id ) {
- // Note that we must use the article id provided or it'll be
lost in the ether. The job can't
- // load it from the title because the page row has already been
deleted.
- JobQueueGroup::singleton()->push(
CirrusSearchDeletePagesJob::build(
- $page->getTitle(), $id ) );
- }
-
-
- public static function softwareInfoHook( $software ) {
- $version = CirrusSearchSearcher::getElasticsearchVersion();
- if ( $version->isOk() ) {
- // We've already logged if this isn't ok and there is
no need to warn the user on this page.
- $software[ '[http://www.elasticsearch.org/
Elasticsearch]' ] = $version->getValue();
- }
- }
-
- public static function specialSearchResultsPrependHook( $specialSearch,
$out, $term ) {
- global $wgCirrusSearchShowNowUsing;
- if ( $wgCirrusSearchShowNowUsing ) {
- $out->addHtml( Xml::openElement( 'div', array( 'class'
=> 'cirrussearch-now-using' ) ) .
- $specialSearch->msg( 'cirrussearch-now-using'
)->parse() .
- Xml::closeElement( 'div' ) );
- }
- return true;
- }
-
- /**
- * Adds using CirrusSearch as default as a BetaFeature
- * @param User $user
- * @param array $prefs
- * @return bool
- */
- public static function getPreferencesHook( $user, &$prefs ) {
- global $wgCirrusSearchEnablePref;
-
- if ( $wgCirrusSearchEnablePref ) {
- $prefs['cirrussearch-default'] = array(
- 'label-message' => 'cirrussearch-pref-label',
- 'desc-message' => 'cirrussearch-pref-desc',
- 'info-link' =>
'https://www.mediawiki.org/wiki/Search',
- 'discussion-link' =>
'https://www.mediawiki.org/wiki/Talk:Search',
- );
- }
-
- return true;
- }
-
- /**
- * Hooked to call initialize after the user is set up.
- */
- public static function beforeInitializeHook( $title, $unused,
$outputPage, $user, $request, $mediaWiki ) {
- self::initialize( $user );
-
- return true;
- }
-
- /**
- * Hooked to call initialize after the user is set up.
- */
- public static function apiBeforeMainHook( $apiMain ) {
- self::initialize( RequestContext::getMain()->getUser() );
-
- return true;
- }
-
- /**
- * Initializes the portions of Cirrus that require the $user to be
fully initialized and therefore
- * cannot be done in $wgExtensionFunctions. Specifically this means
the beta features check and
- * installing the prefix search hook, because it needs information from
the beta features check.
- */
- private static function initialize( $user ) {
- global $wgCirrusSearchEnablePref;
- global $wgSearchType;
- global $wgHooks;
-
- // If the user has the BetaFeature enabled, use Cirrus as
default.
- if ( $wgCirrusSearchEnablePref && $user->isLoggedIn() &&
class_exists( 'BetaFeatures' )
- && BetaFeatures::isFeatureEnabled( $user,
'cirrussearch-default' )
- ) {
- $wgSearchType = 'CirrusSearch';
- }
-
- // Install our prefix search hook only if we're enabled.
- if ( $wgSearchType === 'CirrusSearch' ) {
- $wgHooks['PrefixSearchBackend'][] =
'CirrusSearch::prefixSearch';
- }
- }
}
diff --git a/includes/CirrusSearchHooks.php b/includes/CirrusSearchHooks.php
new file mode 100644
index 0000000..29b7c19
--- /dev/null
+++ b/includes/CirrusSearchHooks.php
@@ -0,0 +1,145 @@
+<?php
+/**
+ * Simple wrappers around things for hooks to call.
+ *
+ * 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
+ */
+class CirrusSearchHooks {
+ /**
+ * Hooked to call initialize after the user is set up.
+ * @return bool
+ */
+ public static function beforeInitializeHook( $title, $unused,
$outputPage, $user, $request, $mediaWiki ) {
+ self::initializeForUser( $user );
+ return true;
+ }
+
+ /**
+ * Hooked to call initialize after the user is set up.
+ * @param ApiMain $apiMain The ApiMain instance being used
+ * @return bool
+ */
+ public static function apiBeforeMainHook( $apiMain ) {
+ self::initializeForUser( RequestContext::getMain()->getUser() );
+ return true;
+ }
+
+ /**
+ * Initializes the portions of Cirrus that require the $user to be
fully initialized and therefore
+ * cannot be done in $wgExtensionFunctions. Specifically this means
the beta features check and
+ * installing the prefix search hook, because it needs information from
the beta features check.
+ */
+ private static function initializeForUser( $user ) {
+ global $wgCirrusSearchEnablePref;
+ global $wgSearchType;
+ global $wgHooks;
+
+ // If the user has the BetaFeature enabled, use Cirrus as
default.
+ if ( $wgCirrusSearchEnablePref && $user->isLoggedIn() &&
class_exists( 'BetaFeatures' )
+ && BetaFeatures::isFeatureEnabled( $user,
'cirrussearch-default' )
+ ) {
+ $wgSearchType = 'CirrusSearch';
+ }
+
+ // Install our prefix search hook only if we're enabled.
+ if ( $wgSearchType === 'CirrusSearch' ) {
+ $wgHooks['PrefixSearchBackend'][] =
'CirrusSearch::prefixSearch';
+ }
+ }
+
+ /**
+ * Hook to call when an article is deleted
+ * @param WikiPage $page The page we're deleting
+ * @param User $user The user deleting the page
+ * @param string $reason Reason the page is being deleted
+ * @param int $id Page id being deleted
+ * @return bool
+ */
+ public static function articleDeleteCompleteHook( $page, $user,
$reason, $id ) {
+ // Note that we must use the article id provided or it'll be
lost in the ether. The job can't
+ // load it from the title because the page row has already been
deleted.
+ JobQueueGroup::singleton()->push(
CirrusSearchDeletePagesJob::build(
+ $page->getTitle(), $id ) );
+ }
+
+ /**
+ * Hook called to include Elasticsearch version info on Special:Version
+ * @param array $software Array of wikitext and version numbers
+ * @return bool
+ */
+ public static function softwareInfoHook( $software ) {
+ $version = CirrusSearchSearcher::getElasticsearchVersion();
+ if ( $version->isOk() ) {
+ // We've already logged if this isn't ok and there is
no need to warn the user on this page.
+ $software[ '[http://www.elasticsearch.org/
Elasticsearch]' ] = $version->getValue();
+ }
+ return true;
+ }
+
+ /**
+ * Called to prepend text before search results
+ * @param SpecialSearch $specialSearch The SpecialPage object for
Special:Search
+ * @param OutputPage $out The output page object
+ * @param string $term The term being searched for
+ * @return bool
+ */
+ public static function specialSearchResultsPrependHook( $specialSearch,
$out, $term ) {
+ global $wgCirrusSearchShowNowUsing;
+ if ( $wgCirrusSearchShowNowUsing ) {
+ $out->addHtml( Xml::openElement( 'div', array( 'class'
=> 'cirrussearch-now-using' ) ) .
+ $specialSearch->msg( 'cirrussearch-now-using'
)->parse() .
+ Xml::closeElement( 'div' ) );
+ }
+ return true;
+ }
+
+ /**
+ * Adds using CirrusSearch as default as a BetaFeature
+ * @param User $user
+ * @param array $prefs
+ * @return bool
+ */
+ public static function getPreferencesHook( $user, &$prefs ) {
+ global $wgCirrusSearchEnablePref;
+
+ if ( $wgCirrusSearchEnablePref ) {
+ $prefs['cirrussearch-default'] = array(
+ 'label-message' => 'cirrussearch-pref-label',
+ 'desc-message' => 'cirrussearch-pref-desc',
+ 'info-link' =>
'https://www.mediawiki.org/wiki/Search',
+ 'discussion-link' =>
'https://www.mediawiki.org/wiki/Talk:Search',
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * Hooked to update the search index when pages change directly or when
templates that
+ * they include change.
+ * @param $linksUpdate LinksUpdate source of all links update
information
+ * @return bool
+ */
+ public static function linksUpdateCompletedHook( $linksUpdate ) {
+ $job = new CirrusSearchLinksUpdateJob(
$linksUpdate->getTitle(), array(
+ 'addedLinks' => $linksUpdate->getAddedLinks(),
+ 'removedLinks' => $linksUpdate->getRemovedLinks(),
+ 'primary' => true,
+ ) );
+ JobQueueGroup::singleton()->push( $job );
+ return true;
+ }
+}
diff --git a/includes/CirrusSearchUpdater.php b/includes/CirrusSearchUpdater.php
index 4dc771b..41e32bf 100644
--- a/includes/CirrusSearchUpdater.php
+++ b/includes/CirrusSearchUpdater.php
@@ -87,20 +87,6 @@
}
/**
- * Hooked to update the search index when pages change directly or when
templates that
- * they include change.
- * @param $linksUpdate LinksUpdate source of all links update
information
- */
- public static function linksUpdateCompletedHook( $linksUpdate ) {
- $job = new CirrusSearchLinksUpdateJob(
$linksUpdate->getTitle(), array(
- 'addedLinks' => $linksUpdate->getAddedLinks(),
- 'removedLinks' => $linksUpdate->getRemovedLinks(),
- 'primary' => true,
- ) );
- JobQueueGroup::singleton()->push( $job );
- }
-
- /**
* This updates pages in elasticsearch.
*
* $flags includes:
--
To view, visit https://gerrit.wikimedia.org/r/101157
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie6cc4dfe71982c816fcef77a2e17e8009d9155d5
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/CirrusSearch
Gerrit-Branch: master
Gerrit-Owner: Chad <[email protected]>
Gerrit-Reviewer: Manybubbles <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits