wiki.techinc.nl/includes/api/ApiOpenSearch.php

105 lines
3 KiB
PHP
Raw Normal View History

<?php
/**
* Created on Oct 13, 2006
*
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* 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
*
* @file
*/
/**
* @ingroup API
*/
class ApiOpenSearch extends ApiBase {
/**
* Override built-in handling of format parameter.
* Only JSON is supported.
*
* @return ApiFormatBase
*/
public function getCustomPrinter() {
$params = $this->extractRequestParams();
$format = $params['format'];
$allowed = array( 'json', 'jsonfm' );
if ( in_array( $format, $allowed ) ) {
return $this->getMain()->createPrinterByName( $format );
}
return $this->getMain()->createPrinterByName( $allowed[0] );
}
public function execute() {
$params = $this->extractRequestParams();
$search = $params['search'];
$limit = $params['limit'];
$namespaces = $params['namespace'];
$suggest = $params['suggest'];
(bug 40448) Replace legacy mwsuggest with mediawiki.searchSuggest The module has been broken for a while now, but nobody noticed because in plain core it is disabled by default, and in the bundle we ship with Extension:Vector (and its SimpleSearch). This commit removed the mediawiki.legacy.mwsuggest module (and related components that become obsolete with its deletion) and replaces it with the new mediawiki.searchSuggest module, which is based on SimpleSearch from Extension:Vector (where it will be removed soon). The following and all references to it in core have been removed, I also made sure that they weren't used in any of extensions/*. Only matches in extensions/Settings and some file that dumped the startup module, and in extensions/Vector which are addressed in I1d5bf81a8a0266c51c99d41eefacc0f4b3ae4b76. Had to make a few updates to jquery.suggestions to make it work in other skins. So far it was only used in Vector, but now that it is used in mediawiki.searchSuggest, I noticed several issues in other skins. Most importantly the fact that it assumed the default offset was from the right corner, which isn't the case in Monobook where the search bar is on the left (in the sidebar). It now detects the appropiate origin corner automatically, and also takes directionality of the page into account. It also uses the correct font-size automatically. Previously it used font-size: 0.8; but that only works in Vector. Every skin seems to have its own way of making a sane font-size. In Monobook the <body> has an extra small font-size which is then fixed in div#globalWrapper, and in Vector it is extra large, which is then fixed as well deeper in the document. Either way, the size on <body> can't be used, and since this suggestions box is appended to the <body> (it is a generic jQuery plugin without knowledge of the document, and even if we could give it knowledge inside the configuration, it'd have to be per-skin). So I removed the Vector specific font-size and let it handle it automatically. This was needed because it is now used in all skins. Removed modules: * mediawiki.legacy.mwsuggest: > Replaced with mediawiki.searchSuggest. Removed messages: * search-mwsuggest-enabled * search-mwsuggest-disabled > No longer used. Removed mw.config.values: * wgMWSuggestTemplate > Obsolete. * wgSearchNamespaces > Obsolete. Removed server-side settings: * $wgEnableMWSuggest > Suggestions are now enabled by default and can be disabled through the user preference `disablesuggest` still. They can be disabled by default site-wide or hidden from prefs through the standard mechanisms for that. * $wgMWSuggestTemplate > Obsolete. Removed methods * SearchEngine::getMWSuggestTemplate() > Obsolete. Filters: $ ack mwsuggest -i -Q --ignore-dir=languages/messages $ ack wgSearchNamespaces -Q Message changes: * vector-simplesearch-preference > It was wrong, it didn't activate search suggestions, that was handled by the Vector extension. This preference in MediaWiki core controls whether the SimpleSearch bar HTML and CSS will be used (e.g. the rectangle search box with the magnifying class instead of the browser-default input field with the plain submit buttons). * searchsuggest-search * searchsuggest-containing These come from Extension:Vector message and should be imported by translatewiki: - vector-simplesearch-search - vector-simplesearch-containing Change-Id: Icd721011b40bb8d2c20aefa8b359a3e45413a07f
2012-09-23 01:06:53 +00:00
// Some script that was loaded regardless of wgEnableOpenSearchSuggest, likely cached.
if ( $suggest && !$this->getConfig()->get( 'EnableOpenSearchSuggest' ) ) {
$searches = array();
} else {
// Open search results may be stored for a very long time
$this->getMain()->setCacheMaxAge( $this->getConfig()->get( 'SearchSuggestCacheExpiry' ) );
$this->getMain()->setCacheMode( 'public' );
$searcher = new StringPrefixSearch;
$searches = $searcher->searchWithVariants( $search, $limit, $namespaces );
}
// Set top level elements
$result = $this->getResult();
$result->addValue( null, 0, $search );
$result->addValue( null, 1, $searches );
}
public function getAllowedParams() {
return array(
'search' => null,
'limit' => array(
ApiBase::PARAM_DFLT => $this->getConfig()->get( 'OpenSearchDefaultLimit' ),
ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_MIN => 1,
ApiBase::PARAM_MAX => 100,
ApiBase::PARAM_MAX2 => 100
),
'namespace' => array(
ApiBase::PARAM_DFLT => NS_MAIN,
ApiBase::PARAM_TYPE => 'namespace',
ApiBase::PARAM_ISMULTI => true
),
'suggest' => false,
'format' => array(
ApiBase::PARAM_DFLT => 'json',
ApiBase::PARAM_TYPE => array( 'json', 'jsonfm' ),
)
);
}
protected function getExamplesMessages() {
return array(
'action=opensearch&search=Te'
=> 'apihelp-opensearch-example-te',
);
}
public function getHelpUrls() {
2011-11-28 15:43:11 +00:00
return 'https://www.mediawiki.org/wiki/API:Opensearch';
}
}