|
|
|
|
@ -26,13 +26,22 @@
|
|
|
|
|
*/
|
|
|
|
|
class OC_Search{
|
|
|
|
|
static private $providers=array();
|
|
|
|
|
static private $registeredProviders=array();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* remove all registered search providers
|
|
|
|
|
*/
|
|
|
|
|
public static function clearProviders(){
|
|
|
|
|
self::$providers=array();
|
|
|
|
|
self::$registeredProviders=array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* register a new search provider to be used
|
|
|
|
|
* @param string $provider class name of a OC_Search_Provider
|
|
|
|
|
*/
|
|
|
|
|
public static function registerProvider($provider){
|
|
|
|
|
self::$providers[]=$provider;
|
|
|
|
|
public static function registerProvider($class,$options=array()){
|
|
|
|
|
self::$registeredProviders[]=array('class'=>$class,'options'=>$options);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -41,10 +50,25 @@ class OC_Search{
|
|
|
|
|
* @return array An array of OC_Search_Result's
|
|
|
|
|
*/
|
|
|
|
|
public static function search($query){
|
|
|
|
|
self::initProviders();
|
|
|
|
|
$results=array();
|
|
|
|
|
foreach(self::$providers as $provider){
|
|
|
|
|
$results=array_merge($results, $provider::search($query));
|
|
|
|
|
$results=array_merge($results, $provider->search($query));
|
|
|
|
|
}
|
|
|
|
|
return $results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* create instances of all the registered search providers
|
|
|
|
|
*/
|
|
|
|
|
private static function initProviders(){
|
|
|
|
|
if(count(self::$providers)>0){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
foreach(self::$registeredProviders as $provider){
|
|
|
|
|
$class=$provider['class'];
|
|
|
|
|
$options=$provider['options'];
|
|
|
|
|
self::$providers[]=new $class($options);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|