aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJörn Friedrich Dreyer <jfd@butonic.de>2014-12-02 17:31:04 +0100
committerJörn Friedrich Dreyer <jfd@butonic.de>2014-12-10 15:51:59 +0100
commit1d490b559ce279f5c9f44b727fe9d71d3718a24b (patch)
tree5520065370f6874c80eb8a5be38e2b284d4e292f /lib
parente9029f94cb6eb9b37623ea1a2faf8aac11675900 (diff)
downloadnextcloud-server-1d490b559ce279f5c9f44b727fe9d71d3718a24b.tar.gz
nextcloud-server-1d490b559ce279f5c9f44b727fe9d71d3718a24b.zip
introduce inApps[] filter for search via ajax query, make file results show up in files app only
use more flexible return type check array with !empty instead of count
Diffstat (limited to 'lib')
-rw-r--r--lib/private/search.php21
-rw-r--r--lib/public/isearch.php5
-rw-r--r--lib/public/search/provider.php32
3 files changed, 45 insertions, 13 deletions
diff --git a/lib/private/search.php b/lib/private/search.php
index bcaebdddd9c..8f04aa8360b 100644
--- a/lib/private/search.php
+++ b/lib/private/search.php
@@ -35,14 +35,17 @@ class Search implements ISearch {
/**
* Search all providers for $query
* @param string $query
+ * @param string[] $inApps optionally limit results to the given apps
* @return array An array of OC\Search\Result's
*/
- public function search($query) {
+ public function search($query, array $inApps = array()) {
$this->initProviders();
$results = array();
foreach($this->providers as $provider) {
/** @var $provider Provider */
- $results = array_merge($results, $provider->search($query));
+ if ($provider->providesResultsFor($inApps)) {
+ $results = array_merge($results, $provider->search($query));
+ }
}
return $results;
}
@@ -51,8 +54,8 @@ class Search implements ISearch {
* Remove all registered search providers
*/
public function clearProviders() {
- $this->providers=array();
- $this->registeredProviders=array();
+ $this->providers = array();
+ $this->registeredProviders = array();
}
/**
@@ -67,7 +70,7 @@ class Search implements ISearch {
}
);
// force regeneration of providers on next search
- $this->providers=array();
+ $this->providers = array();
}
/**
@@ -75,21 +78,21 @@ class Search implements ISearch {
* @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);
+ public function registerProvider($class, array $options = array()) {
+ $this->registeredProviders[] = array('class' => $class, 'options' => $options);
}
/**
* Create instances of all the registered search providers
*/
private function initProviders() {
- if(count($this->providers)>0) {
+ if( ! empty($this->providers) ) {
return;
}
foreach($this->registeredProviders as $provider) {
$class = $provider['class'];
$options = $provider['options'];
- $this->providers[]=new $class($options);
+ $this->providers[] = new $class($options);
}
}
diff --git a/lib/public/isearch.php b/lib/public/isearch.php
index 3b83dbf35e8..229376ed3ae 100644
--- a/lib/public/isearch.php
+++ b/lib/public/isearch.php
@@ -32,16 +32,17 @@ interface ISearch {
/**
* Search all providers for $query
* @param string $query
+ * @param string[] $inApps optionally limit results to the given apps
* @return array An array of OCP\Search\Result's
*/
- public function search($query);
+ public function search($query, array $inApps = array());
/**
* Register a new search provider to search with
* @param string $class class name of a OCP\Search\Provider
* @param array $options optional
*/
- public function registerProvider($class, $options = array());
+ public function registerProvider($class, array $options = array());
/**
* Remove one existing search provider
diff --git a/lib/public/search/provider.php b/lib/public/search/provider.php
index 0506f091dd9..d6cd1fb025e 100644
--- a/lib/public/search/provider.php
+++ b/lib/public/search/provider.php
@@ -24,6 +24,8 @@ namespace OCP\Search;
*/
abstract class Provider {
+ const OPTION_APPS = 'apps';
+
/**
* List of options (currently unused)
* @var array
@@ -32,13 +34,39 @@ abstract class Provider {
/**
* Constructor
- * @param array $options
+ * @param array $options as key => value
*/
- public function __construct($options) {
+ public function __construct($options = array()) {
$this->options = $options;
}
/**
+ * get a value from the options array or null
+ * @param string $key
+ * @return mixed
+ */
+ public function getOption($key) {
+ if (is_array($this->options) && isset($this->options[$key])) {
+ return $this->options[$key];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * checks if the given apps and the apps this provider has results for intersect
+ * returns true if the given array is empty (all apps)
+ * or if this provider does not have a list of apps it provides results for (legacy search providers)
+ * or if the two above arrays have elements in common (intersect)
+ * @param string[] $apps
+ * @return bool
+ */
+ public function providesResultsFor(array $apps = array()) {
+ $forApps = $this->getOption(self::OPTION_APPS);
+ return empty($apps) || empty($forApps) || array_intersect($forApps, $apps);
+ }
+
+ /**
* Search for $query
* @param string $query
* @return array An array of OCP\Search\Result's