make search non-static, add ISearch to server container, make legacy a static wrapper for it, move provider and result to public api
This commit is contained in:
parent
5034bd1b12
commit
aaf0d13171
|
@ -24,6 +24,45 @@
|
|||
* provides an interface to all search providers
|
||||
* @deprecated see lib/search.php
|
||||
*/
|
||||
class OC_Search extends \OC\Search{
|
||||
class OC_Search {
|
||||
/**
|
||||
* @return \OCP\ISearch
|
||||
*/
|
||||
private static function getSearch() {
|
||||
return \OC::$server->getSearch();
|
||||
}
|
||||
|
||||
/**
|
||||
* Search all providers for $query
|
||||
* @param string $query
|
||||
* @return array An array of OCP\Search\Result's
|
||||
*/
|
||||
public static function search($query) {
|
||||
return self::getSearch()->search($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new search provider to search with
|
||||
* @param string $class class name of a OCP\Search\Provider
|
||||
* @param array $options optional
|
||||
*/
|
||||
public static function registerProvider($class, $options = array()) {
|
||||
return self::getSearch()->registerProvider($class, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove one existing search provider
|
||||
* @param string $provider class name of a OCP\Search\Provider
|
||||
*/
|
||||
public static function removeProvider($provider) {
|
||||
return self::getSearch()->removeProvider($provider);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all registered search providers
|
||||
*/
|
||||
public static function clearProviders() {
|
||||
return self::getSearch()->clearProviders();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,27 +21,28 @@
|
|||
*/
|
||||
|
||||
namespace OC;
|
||||
use OC\Search\Provider;
|
||||
use OCP\Search\Provider;
|
||||
use OCP\ISearch;
|
||||
|
||||
/**
|
||||
* Provide an interface to all search providers
|
||||
*/
|
||||
class Search {
|
||||
class Search implements ISearch {
|
||||
|
||||
static private $providers=array();
|
||||
static private $registeredProviders=array();
|
||||
private $providers = array();
|
||||
private $registeredProviders = array();
|
||||
|
||||
/**
|
||||
* Search all providers for $query
|
||||
* @param string $query
|
||||
* @return array An array of OC\Search\Result's
|
||||
*/
|
||||
public static function search($query) {
|
||||
self::initProviders();
|
||||
$results=array();
|
||||
foreach(self::$providers as $provider) {
|
||||
public function search($query) {
|
||||
$this->initProviders();
|
||||
$results = array();
|
||||
foreach($this->providers as $provider) {
|
||||
/** @var $provider Provider */
|
||||
$results=array_merge($results, $provider->search($query));
|
||||
$results = array_merge($results, $provider->search($query));
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
|
@ -49,24 +50,24 @@ class Search {
|
|||
/**
|
||||
* Remove all registered search providers
|
||||
*/
|
||||
public static function clearProviders() {
|
||||
self::$providers=array();
|
||||
self::$registeredProviders=array();
|
||||
public function clearProviders() {
|
||||
$this->providers=array();
|
||||
$this->registeredProviders=array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove one existing search provider
|
||||
* @param string $provider class name of a OC\Search\Provider
|
||||
*/
|
||||
public static function removeProvider($provider) {
|
||||
self::$registeredProviders = array_filter(
|
||||
self::$registeredProviders,
|
||||
public function removeProvider($provider) {
|
||||
$this->registeredProviders = array_filter(
|
||||
$this->registeredProviders,
|
||||
function ($element) use ($provider) {
|
||||
return ($element['class'] != $provider);
|
||||
}
|
||||
);
|
||||
// force regeneration of providers on next search
|
||||
self::$providers=array();
|
||||
$this->providers=array();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -74,21 +75,21 @@ class Search {
|
|||
* @param string $class class name of a OC\Search\Provider
|
||||
* @param array $options optional
|
||||
*/
|
||||
public static function registerProvider($class, $options=array()) {
|
||||
self::$registeredProviders[]=array('class'=>$class, 'options'=>$options);
|
||||
public function registerProvider($class, $options=array()) {
|
||||
$this->registeredProviders[]=array('class'=>$class, 'options'=>$options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create instances of all the registered search providers
|
||||
*/
|
||||
private static function initProviders() {
|
||||
if(count(self::$providers)>0) {
|
||||
private function initProviders() {
|
||||
if(count($this->providers)>0) {
|
||||
return;
|
||||
}
|
||||
foreach(self::$registeredProviders as $provider) {
|
||||
$class=$provider['class'];
|
||||
$options=$provider['options'];
|
||||
self::$providers[]=new $class($options);
|
||||
foreach($this->registeredProviders as $provider) {
|
||||
$class = $provider['class'];
|
||||
$options = $provider['options'];
|
||||
$this->providers[]=new $class($options);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,12 +23,12 @@ use OC\Files\Filesystem;
|
|||
/**
|
||||
* Provide search results from the 'files' app
|
||||
*/
|
||||
class File extends \OC\Search\Provider {
|
||||
class File extends \OCP\Search\Provider {
|
||||
|
||||
/**
|
||||
* Search for files and folders matching the given query
|
||||
* @param string $query
|
||||
* @return \OC\Search\Result
|
||||
* @return \OCP\Search\Result
|
||||
*/
|
||||
function search($query) {
|
||||
$files = Filesystem::search($query);
|
||||
|
|
|
@ -22,7 +22,7 @@ use \OC\Files\Filesystem;
|
|||
/**
|
||||
* A found file
|
||||
*/
|
||||
class File extends \OC\Search\Result {
|
||||
class File extends \OCP\Search\Result {
|
||||
|
||||
/**
|
||||
* Type name; translated in templates
|
||||
|
|
|
@ -186,6 +186,9 @@ class Server extends SimpleContainer implements IServerContainer {
|
|||
}
|
||||
return $router;
|
||||
});
|
||||
$this->registerService('Search', function($c){
|
||||
return new Search();
|
||||
});
|
||||
$this->registerService('Db', function($c){
|
||||
return new Db();
|
||||
});
|
||||
|
@ -422,6 +425,13 @@ class Server extends SimpleContainer implements IServerContainer {
|
|||
return $this->query('Router');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a search instance
|
||||
* @return \OCP\ISearch
|
||||
*/
|
||||
function getSearch() {
|
||||
return $this->query('Search');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance of the db facade
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - App Framework
|
||||
*
|
||||
* @author Jörn Dreyer
|
||||
* @copyright 2014 Jörn Dreyer jfd@owncloud.com
|
||||
*
|
||||
* 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;
|
||||
|
||||
|
||||
/**
|
||||
* Small Interface for Search
|
||||
*/
|
||||
interface ISearch {
|
||||
|
||||
/**
|
||||
* Search all providers for $query
|
||||
* @param string $query
|
||||
* @return array An array of OCP\Search\Result's
|
||||
*/
|
||||
public function search($query);
|
||||
|
||||
/**
|
||||
* 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());
|
||||
|
||||
/**
|
||||
* Remove one existing search provider
|
||||
* @param string $provider class name of a OCP\Search\Provider
|
||||
*/
|
||||
public function removeProvider($provider);
|
||||
|
||||
/**
|
||||
* Remove all registered search providers
|
||||
*/
|
||||
public function clearProviders();
|
||||
|
||||
}
|
|
@ -204,4 +204,12 @@ interface IServerContainer {
|
|||
* @return \OCP\Route\IRouter
|
||||
*/
|
||||
function getRouter();
|
||||
|
||||
/**
|
||||
* Returns a search instance
|
||||
*
|
||||
* @return \OCP\ISearch
|
||||
*/
|
||||
function getSearch();
|
||||
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
namespace OC\Search;
|
||||
namespace OCP\Search;
|
||||
|
||||
/**
|
||||
* Provides a template for search functionality throughout ownCloud;
|
||||
|
@ -41,7 +41,7 @@ abstract class Provider {
|
|||
/**
|
||||
* Search for $query
|
||||
* @param string $query
|
||||
* @return array An array of OC\Search\Result's
|
||||
* @return array An array of OCP\Search\Result's
|
||||
*/
|
||||
abstract public function search($query);
|
||||
}
|
|
@ -17,7 +17,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
namespace OC\Search;
|
||||
namespace OCP\Search;
|
||||
|
||||
/**
|
||||
* The generic result of a search
|
Loading…
Reference in New Issue