Blame view
sources/lib/private/search.php
2.51 KB
|
03e52840d
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php /** * ownCloud * * @author Frank Karlitschek * @copyright 2012 Frank Karlitschek frank@owncloud.org * * 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/>. * */ |
|
6d9380f96
|
22 23 24 |
namespace OC; use OCP\Search\Provider; use OCP\ISearch; |
|
03e52840d
|
25 26 |
/** |
|
6d9380f96
|
27 |
* Provide an interface to all search providers |
|
03e52840d
|
28 |
*/ |
|
6d9380f96
|
29 |
class Search implements ISearch {
|
|
03e52840d
|
30 |
|
|
6d9380f96
|
31 32 |
private $providers = array(); private $registeredProviders = array(); |
|
03e52840d
|
33 34 |
/** |
|
6d9380f96
|
35 36 37 |
* Search all providers for $query * @param string $query * @return array An array of OC\Search\Result's |
|
03e52840d
|
38 |
*/ |
|
6d9380f96
|
39 40 41 42 43 44 45 46 |
public function search($query) {
$this->initProviders();
$results = array();
foreach($this->providers as $provider) {
/** @var $provider Provider */
$results = array_merge($results, $provider->search($query));
}
return $results;
|
|
03e52840d
|
47 48 49 |
} /** |
|
6d9380f96
|
50 |
* Remove all registered search providers |
|
03e52840d
|
51 |
*/ |
|
6d9380f96
|
52 53 54 |
public function clearProviders() {
$this->providers=array();
$this->registeredProviders=array();
|
|
03e52840d
|
55 56 57 |
} /** |
|
6d9380f96
|
58 59 |
* Remove one existing search provider * @param string $provider class name of a OC\Search\Provider |
|
03e52840d
|
60 |
*/ |
|
6d9380f96
|
61 62 63 64 65 66 |
public function removeProvider($provider) {
$this->registeredProviders = array_filter(
$this->registeredProviders,
function ($element) use ($provider) {
return ($element['class'] != $provider);
}
|
|
03e52840d
|
67 68 |
); // force regeneration of providers on next search |
|
6d9380f96
|
69 |
$this->providers=array(); |
|
03e52840d
|
70 |
} |
|
6d9380f96
|
71 72 73 74 75 76 77 78 |
/**
* Register a new search provider to search with
* @param string $class class name of a OC\Search\Provider
* @param array $options optional
*/
public function registerProvider($class, $options=array()) {
$this->registeredProviders[]=array('class'=>$class, 'options'=>$options);
}
|
|
03e52840d
|
79 80 |
/** |
|
6d9380f96
|
81 |
* Create instances of all the registered search providers |
|
03e52840d
|
82 |
*/ |
|
6d9380f96
|
83 84 |
private function initProviders() {
if(count($this->providers)>0) {
|
|
03e52840d
|
85 86 |
return; } |
|
6d9380f96
|
87 88 89 90 |
foreach($this->registeredProviders as $provider) {
$class = $provider['class'];
$options = $provider['options'];
$this->providers[]=new $class($options);
|
|
03e52840d
|
91 92 |
} } |
|
6d9380f96
|
93 |
|
|
03e52840d
|
94 |
} |