X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiOpenSearch.php;h=4a673c21547dc4e0e3caed3f6546c5845a10b8ae;hb=50aa4c3860a4152b7eee68039b9891f00af69c77;hp=f86467ed2319bc39ffe466676a8fe1d4e4c2b328;hpb=9262f69c0a234f6a55a5802be57e7bf5997f6509;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiOpenSearch.php b/includes/api/ApiOpenSearch.php index f86467ed23..4a673c2154 100644 --- a/includes/api/ApiOpenSearch.php +++ b/includes/api/ApiOpenSearch.php @@ -1,12 +1,11 @@ + * Copyright (C) 2006 Yuri Astrakhan @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 @@ -26,76 +25,72 @@ if (!defined('MEDIAWIKI')) { // Eclipse helper - will be ignored in production - require_once ("ApiFormatBase.php"); + require_once ("ApiBase.php"); } -class ApiOpenSearch extends ApiFormatBase { +/** + * @ingroup API + */ +class ApiOpenSearch extends ApiBase { - private $mResult = array(); - public function __construct($main, $action) { parent :: __construct($main, $action); } - public function getMimeType() { - return 'application/json'; + public function getCustomPrinter() { + return $this->getMain()->createPrinterByName('json'); } public function execute() { - $command = null; - extract($this->ExtractRequestParams()); - - // Prepare nested request - $params = new FauxRequest(array ( - 'action' => 'query', - 'list' => 'allpages', - 'apnamespace' => 0, - 'aplimit' => 10, - 'apprefix' => $command - )); - - // Execute - $module = new ApiMain($params); - $module->execute(); - - // Get clean data - $result =& $module->getResult(); - $result->SanitizeData(); - $data = $result->GetData(); + $params = $this->extractRequestParams(); + $search = $params['search']; + $limit = $params['limit']; + $namespaces = $params['namespace']; - // Reformat useful data for future printing - $result = array(); - foreach ($data['query']['allpages'] as $pageid => &$pageinfo) { - $result[] = $pageinfo['title']; - } - - $this->mResult = array($command, $result); - } - - public function executePrinter() { - $json = new Services_JSON(); - $this->printText($json->encode($this->mResult, true)); + // Open search results may be stored for a very long time + $this->getMain()->setCacheMaxAge(1200); + + $srchres = PrefixSearch::titleSearch( $search, $limit, $namespaces ); + + // Set top level elements + $result = $this->getResult(); + $result->addValue(null, 0, $search); + $result->addValue(null, 1, $srchres); } - protected function GetAllowedParams() { + public function getAllowedParams() { return array ( - 'command' => null + 'search' => null, + 'limit' => array ( + ApiBase :: PARAM_DFLT => 10, + 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 + ), ); } - protected function GetParamDescription() { + public function getParamDescription() { return array ( - 'command' => 'Search string' + 'search' => 'Search string', + 'limit' => 'Maximum amount of results to return', + 'namespace' => 'Namespaces to search', ); } - protected function GetDescription() { + public function getDescription() { return 'This module implements OpenSearch protocol'; } - protected function GetExamples() { + protected function getExamples() { return array ( - 'api.php?action=opensearch&command=Te' + 'api.php?action=opensearch&search=Te' ); } @@ -103,4 +98,3 @@ class ApiOpenSearch extends ApiFormatBase { return __CLASS__ . ': $Id$'; } } -?> \ No newline at end of file