From 1d490b559ce279f5c9f44b727fe9d71d3718a24b Mon Sep 17 00:00:00 2001 From: Jörn Friedrich Dreyer Date: Tue, 2 Dec 2014 17:31:04 +0100 Subject: 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 --- lib/public/isearch.php | 5 +++-- lib/public/search/provider.php | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) (limited to 'lib/public') 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,12 +34,38 @@ 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 -- cgit v1.2.3