diff --git a/apps/bookmarks/lib/search.php b/apps/bookmarks/lib/search.php index 235587855d..d7e3255861 100644 --- a/apps/bookmarks/lib/search.php +++ b/apps/bookmarks/lib/search.php @@ -20,8 +20,8 @@ * */ -class OC_Search_Provider_Bookmarks implements OC_Search_Provider{ - static function search($query){ +class OC_Search_Provider_Bookmarks extends OC_Search_Provider{ + function search($query){ $results=array(); $offset = 0; diff --git a/apps/calendar/lib/search.php b/apps/calendar/lib/search.php index 8405866392..da5fa35bc2 100644 --- a/apps/calendar/lib/search.php +++ b/apps/calendar/lib/search.php @@ -1,6 +1,6 @@ OC_Helper::imagePath('core', 'places/picture.svg'), 'name' => $l->t('Pictures'))); - class OC_GallerySearchProvider implements OC_Search_Provider{ - static function search($query){ +class OC_GallerySearchProvider extends OC_Search_Provider{ + function search($query){ $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?'); $result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%')); $results=array(); diff --git a/apps/media/lib_media.php b/apps/media/lib_media.php index 9de291e8da..a4e5a5dfeb 100644 --- a/apps/media/lib_media.php +++ b/apps/media/lib_media.php @@ -82,8 +82,8 @@ class OC_MEDIA{ } } -class OC_MediaSearchProvider implements OC_Search_Provider{ - static function search($query){ +class OC_MediaSearchProvider extends OC_Search_Provider{ + function search($query){ require_once('lib_collection.php'); $artists=OC_MEDIA_COLLECTION::getArtists($query); $albums=OC_MEDIA_COLLECTION::getAlbums(0,$query); diff --git a/lib/search.php b/lib/search.php index 6b33fa3814..1205541868 100644 --- a/lib/search.php +++ b/lib/search.php @@ -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); + } + } } diff --git a/lib/search/provider.php b/lib/search/provider.php index 9487ca51f2..838ab696d0 100644 --- a/lib/search/provider.php +++ b/lib/search/provider.php @@ -2,11 +2,13 @@ /** * provides search functionalty */ -interface OC_Search_Provider { +class OC_Search_Provider { + public function __construct($options){} + /** * search for $query * @param string $query * @return array An array of OC_Search_Result's */ - static function search($query); + public function search($query){} } diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php index 3bdb3bcd2a..a37af49559 100644 --- a/lib/search/provider/file.php +++ b/lib/search/provider/file.php @@ -1,7 +1,7 @@