summaryrefslogtreecommitdiff
path: root/www/wiki/includes/search/SearchEngineConfig.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/includes/search/SearchEngineConfig.php')
-rw-r--r--www/wiki/includes/search/SearchEngineConfig.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/www/wiki/includes/search/SearchEngineConfig.php b/www/wiki/includes/search/SearchEngineConfig.php
new file mode 100644
index 00000000..90f85c3d
--- /dev/null
+++ b/www/wiki/includes/search/SearchEngineConfig.php
@@ -0,0 +1,117 @@
+<?php
+
+/**
+ * Configuration handling class for SearchEngine.
+ * Provides added service over plain configuration.
+ *
+ * @since 1.27
+ */
+class SearchEngineConfig {
+
+ /**
+ * Config object from which the settings will be derived.
+ * @var Config
+ */
+ private $config;
+
+ /**
+ * Current language
+ * @var Language
+ */
+ private $language;
+
+ public function __construct( Config $config, Language $lang ) {
+ $this->config = $config;
+ $this->language = $lang;
+ }
+
+ /**
+ * Retrieve original config.
+ * @return Config
+ */
+ public function getConfig() {
+ return $this->config;
+ }
+
+ /**
+ * Make a list of searchable namespaces and their canonical names.
+ * @return array Namespace ID => name
+ */
+ public function searchableNamespaces() {
+ $arr = [];
+ foreach ( $this->language->getNamespaces() as $ns => $name ) {
+ if ( $ns >= NS_MAIN ) {
+ $arr[$ns] = $name;
+ }
+ }
+
+ Hooks::run( 'SearchableNamespaces', [ &$arr ] );
+ return $arr;
+ }
+
+ /**
+ * Extract default namespaces to search from the given user's
+ * settings, returning a list of index numbers.
+ *
+ * @param user $user
+ * @return int[]
+ */
+ public function userNamespaces( $user ) {
+ $arr = [];
+ foreach ( $this->searchableNamespaces() as $ns => $name ) {
+ if ( $user->getOption( 'searchNs' . $ns ) ) {
+ $arr[] = $ns;
+ }
+ }
+
+ return $arr;
+ }
+
+ /**
+ * An array of namespaces indexes to be searched by default
+ *
+ * @return int[] Namespace IDs
+ */
+ public function defaultNamespaces() {
+ return array_keys( $this->config->get( 'NamespacesToBeSearchedDefault' ), true );
+ }
+
+ /**
+ * Return the search engines we support. If only $wgSearchType
+ * is set, it'll be an array of just that one item.
+ *
+ * @return array
+ */
+ public function getSearchTypes() {
+ $alternatives = $this->config->get( 'SearchTypeAlternatives' ) ?: [];
+ array_unshift( $alternatives, $this->config->get( 'SearchType' ) );
+
+ return $alternatives;
+ }
+
+ /**
+ * Return the search engine configured in $wgSearchType, etc.
+ *
+ * @return string|null
+ */
+ public function getSearchType() {
+ return $this->config->get( 'SearchType' );
+ }
+
+ /**
+ * Get a list of namespace names useful for showing in tooltips
+ * and preferences.
+ *
+ * @param int[] $namespaces
+ * @return string[] List of names
+ */
+ public function namespacesAsText( $namespaces ) {
+ $formatted = array_map( [ $this->language, 'getFormattedNsText' ], $namespaces );
+ foreach ( $formatted as $key => $ns ) {
+ if ( empty( $ns ) ) {
+ $formatted[$key] = wfMessage( 'blanknamespace' )->text();
+ }
+ }
+ return $formatted;
+ }
+}