summaryrefslogtreecommitdiffstats
path: root/lib/private/search
diff options
context:
space:
mode:
authorAndrew Brown <andrew@casabrown.com>2013-08-22 23:04:06 -0400
committerJörn Friedrich Dreyer <jfd@butonic.de>2014-06-05 19:21:47 +0200
commitac72828eaea4fbc428082bcb6af8daa43867137b (patch)
tree4ca0a8ae823576377f931e0e79c1fdf116d3208b /lib/private/search
parent70e0ae063739b9749883bd184fee0a80f184685b (diff)
downloadnextcloud-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.php55
-rw-r--r--lib/private/search/provider/file.php97
-rw-r--r--lib/private/search/result.php82
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;
+ }
}