diff options
author | Andrew Brown <andrew@casabrown.com> | 2013-08-22 23:04:06 -0400 |
---|---|---|
committer | Jörn Friedrich Dreyer <jfd@butonic.de> | 2014-06-05 19:21:47 +0200 |
commit | ac72828eaea4fbc428082bcb6af8daa43867137b (patch) | |
tree | 4ca0a8ae823576377f931e0e79c1fdf116d3208b /lib/private/search | |
parent | 70e0ae063739b9749883bd184fee0a80f184685b (diff) | |
download | nextcloud-server-ac72828eaea4fbc428082bcb6af8daa43867137b.tar.gz nextcloud-server-ac72828eaea4fbc428082bcb6af8daa43867137b.zip |
Move to new namespace convention and add new result sub-classing
Diffstat (limited to 'lib/private/search')
-rw-r--r-- | lib/private/search/provider.php | 55 | ||||
-rw-r--r-- | lib/private/search/provider/file.php | 97 | ||||
-rw-r--r-- | lib/private/search/result.php | 82 |
3 files changed, 157 insertions, 77 deletions
diff --git a/lib/private/search/provider.php b/lib/private/search/provider.php index b617b9c5d94..e45d3790c3f 100644 --- a/lib/private/search/provider.php +++ b/lib/private/search/provider.php @@ -1,18 +1,47 @@ <?php /** - * provides search functionalty + * ownCloud + * + * 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/>. + * */ -abstract class OC_Search_Provider { - private $options; - public function __construct($options) { - $this->options=$options; - } +namespace OC\Search; - /** - * search for $query - * @param string $query - * @return array An array of OC_Search_Result's - */ - abstract public function search($query); -} +/** + * Provides a template for search functionality throughout ownCloud; + */ +abstract class Provider { + + /** + * List of options (currently unused) + * @var array + */ + private $options; + + /** + * Constructor + * @param array $options + */ + public function __construct($options) { + $this->options = $options; + } + + /** + * Search for $query + * @param string $query + * @return array An array of OC\Search\Result's + */ + abstract public function search($query); +}
\ No newline at end of file diff --git a/lib/private/search/provider/file.php b/lib/private/search/provider/file.php index 9bd50931517..5e3fb83721e 100644 --- a/lib/private/search/provider/file.php +++ b/lib/private/search/provider/file.php @@ -1,46 +1,59 @@ <?php +/** + * ownCloud + * + * 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/>. + * + */ -class OC_Search_Provider_File extends OC_Search_Provider{ - function search($query) { - $files=\OC\Files\Filesystem::search($query, true); - $results=array(); - $l=OC_L10N::get('lib'); - foreach($files as $fileData) { - $path = $fileData['path']; - $mime = $fileData['mimetype']; +namespace OC\Search\Provider; - $name = basename($path); - $container = dirname($path); - $text = ''; - $skip = false; - if($mime=='httpd/unix-directory') { - $link = OC_Helper::linkTo( 'files', 'index.php', array('dir' => $path)); - $type = (string)$l->t('Files'); - }else{ - $link = OC_Helper::linkToRoute( 'download', array('file' => $path)); - $mimeBase = $fileData['mimepart']; - switch($mimeBase) { - case 'audio': - $skip = true; - break; - case 'text': - $type = (string)$l->t('Text'); - break; - case 'image': - $type = (string)$l->t('Images'); - break; - default: - if($mime=='application/xml') { - $type = (string)$l->t('Text'); - }else{ - $type = (string)$l->t('Files'); - } - } - } - if(!$skip) { - $results[] = new OC_Search_Result($name, $text, $link, $type, $container); - } - } - return $results; - } +/** + * Provide search results from the 'files' app + */ +class File extends \OC\Search\Provider{ + + /** + * Search for files and folders matching the given query + * @param string $query + * @return \OC\Search\Result + */ + function search($query) { + $files = \OC\Files\Filesystem::search($query); + $results = array(); + // edit results + foreach ($files as $fileData) { + // skip versions + if (strpos($fileData['path'], '_versions') === 0) { + continue; + } + // skip top-level folder + if ($fileData['name'] == 'files' && $fileData['parent'] == -1) { + continue; + } + // create folder result + if($fileData['mimetype'] == 'httpd/unix-directory'){ + $result = new \OC\Search\Result\Folder($fileData); + } + // or create file result + else{ + $result = new \OC\Search\Result\File($fileData); + } + // add to results + $results[] = $result; + } + // return + return $results; + } } diff --git a/lib/private/search/result.php b/lib/private/search/result.php index ceefeab2dae..e671aa1b609 100644 --- a/lib/private/search/result.php +++ b/lib/private/search/result.php @@ -1,27 +1,65 @@ <?php /** - * a result of a search + * ownCloud + * + * 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/>. + * */ -class OC_Search_Result{ - public $name; - public $text; - public $link; - public $type; - public $container; - /** - * create a new search result - * @param string $name short name for the result - * @param string $text some more information about the result - * @param string $link link for the result - * @param string $type the type of result as human readable string ('File', 'Music', etc) - * @param string $container - */ - public function __construct($name, $text, $link, $type, $container) { - $this->name=$name; - $this->text=$text; - $this->link=$link; - $this->type=$type; - $this->container=$container; - } +namespace OC\Search; + +/** + * The generic result of a search + */ +abstract class Result { + + /** + * A unique identifier for the result, usually given as the item ID in its + * corresponding application. + * @var string + */ + public $id; + + /** + * The name of the item returned; this will be displayed in the search + * results. + * @var string + */ + public $name; + + /** + * URL to the application item. + * @var string + */ + public $link; + + /** + * The type of search result returned; for consistency, name this the same + * as the class name (e.g. \OC\Search\File -> 'file') in lowercase. + * @var string + */ + public $type = 'generic'; + + /** + * Create a new search result + * @param string $id unique identifier from application: '[app_name]/[item_identifier_in_app]' + * @param string $name displayed text of result + * @param string $link URL to the result within its app + */ + public function __construct($id = null, $name = null, $link = null) { + $this->id = $id; + $this->name = $name; + $this->link = $link; + } } |