add paged provider
This commit is contained in:
parent
088323aad5
commit
c738359a11
7 changed files with 114 additions and 6 deletions
|
@ -309,7 +309,7 @@ var OC={
|
|||
* @param {string} query the search query
|
||||
*/
|
||||
search: function (query) {
|
||||
OC.Search.search(query)
|
||||
OC.Search.search(query, 0, 30);
|
||||
},
|
||||
/**
|
||||
* Dialog helper for jquery dialogs.
|
||||
|
|
|
@ -278,6 +278,7 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
|||
}
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
return $files;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
namespace OC;
|
||||
use OCP\Search\PagedProvider;
|
||||
use OCP\Search\Provider;
|
||||
use OCP\ISearch;
|
||||
|
||||
|
@ -39,12 +40,34 @@ class Search implements ISearch {
|
|||
* @return array An array of OC\Search\Result's
|
||||
*/
|
||||
public function search($query, array $inApps = array()) {
|
||||
return $this->searchPaged($query, $inApps, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search all providers for $query
|
||||
* @param string $query
|
||||
* @param int $page
|
||||
* @param int $size, 0 = all
|
||||
* @return array An array of OC\Search\Result's
|
||||
*/
|
||||
public function searchPaged($query, $page = 0, $size = 30) {
|
||||
$this->initProviders();
|
||||
$results = array();
|
||||
foreach($this->providers as $provider) {
|
||||
/** @var $provider Provider */
|
||||
if ($provider->providesResultsFor($inApps)) {
|
||||
$results = array_merge($results, $provider->search($query));
|
||||
if ( ! $provider->providesResultsFor($inApps) ) {
|
||||
continue;
|
||||
}
|
||||
if ($provider instanceof PagedProvider) {
|
||||
$results = array_merge($results, $provider->searchPaged($query, $page, $size));
|
||||
} else if ($provider instanceof Provider) {
|
||||
$providerResults = $provider->search($query);
|
||||
if ($size > 0) {
|
||||
$slicedResults = array_slice($providerResults, $page * $size, $size);
|
||||
}
|
||||
$results = array_merge($results, $slicedResults);
|
||||
} else {
|
||||
\OC::$server->getLogger()->warning('Ignoring Unknown search provider', array('provider' => $provider));
|
||||
}
|
||||
}
|
||||
return $results;
|
||||
|
|
|
@ -34,9 +34,19 @@ interface ISearch {
|
|||
* @param string $query
|
||||
* @param string[] $inApps optionally limit results to the given apps
|
||||
* @return array An array of OCP\Search\Result's
|
||||
* @deprecated use searchPaged() with page and size
|
||||
*/
|
||||
public function search($query, array $inApps = array());
|
||||
|
||||
/**
|
||||
* Search all providers for $query
|
||||
* @param string $query
|
||||
* @param int $page
|
||||
* @param int $size
|
||||
* @return array An array of OCP\Search\Result's
|
||||
*/
|
||||
public function searchPaged($query, $page = 0, $size = 30);
|
||||
|
||||
/**
|
||||
* Register a new search provider to search with
|
||||
* @param string $class class name of a OCP\Search\Provider
|
||||
|
|
58
lib/public/search/pagedprovider.php
Normal file
58
lib/public/search/pagedprovider.php
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCP\Search;
|
||||
|
||||
/**
|
||||
* Provides a template for search functionality throughout ownCloud;
|
||||
*/
|
||||
abstract class PagedProvider extends Provider {
|
||||
|
||||
/**
|
||||
* List of options (currently unused)
|
||||
* @var array
|
||||
*/
|
||||
private $options;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param array $options
|
||||
*/
|
||||
public function __construct($options) {
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for $query
|
||||
* @param string $query
|
||||
* @return array An array of OCP\Search\Result's
|
||||
*/
|
||||
public function search($query) {
|
||||
$this->searchPaged($query, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for $query
|
||||
* @param string $query
|
||||
* @param int $limit, 0 = unlimited
|
||||
* @param int $offset
|
||||
* @return array An array of OCP\Search\Result's
|
||||
*/
|
||||
abstract public function searchPaged($query, $limit, $offset);
|
||||
}
|
|
@ -38,8 +38,18 @@ if (isset($_GET['inApps'])) {
|
|||
} else {
|
||||
$inApps = array();
|
||||
}
|
||||
if (isset($_GET['page'])) {
|
||||
$page = (int)$_GET['page'];
|
||||
} else {
|
||||
$page = 0;
|
||||
}
|
||||
if (isset($_GET['size'])) {
|
||||
$size = (int)$_GET['size'];
|
||||
} else {
|
||||
$size = 0;
|
||||
}
|
||||
if($query) {
|
||||
$result = \OC::$server->getSearch()->search($query, $inApps);
|
||||
$result = \OC::$server->getSearch()->search($query, $inApps, $page, $size);
|
||||
OC_JSON::encodedPrint($result);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -46,10 +46,16 @@
|
|||
* Do a search query and display the results
|
||||
* @param {string} query the search query
|
||||
*/
|
||||
search: _.debounce(function(query) {
|
||||
search: _.debounce(function(query, page, size) {
|
||||
if(query) {
|
||||
exports.addStyle('search','results');
|
||||
$.getJSON(exports.filePath('search','ajax','search.php')+'?query=' + encodeURIComponent(query), function(results) {
|
||||
if (typeof page !== 'number') {
|
||||
page = 0;
|
||||
}
|
||||
if (typeof size !== 'number') {
|
||||
size = 30;
|
||||
}
|
||||
$.getJSON(OC.generateUrl('search/ajax/search.php'), {query:query, page:page, size:size }, function(results) {
|
||||
exports.Search.lastResults = results;
|
||||
exports.Search.showResults(results);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue