Implement note search
authorChristian Weiske <cweiske@cweiske.de>
Fri, 24 Oct 2014 06:54:35 +0000 (08:54 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Fri, 24 Oct 2014 06:54:35 +0000 (08:54 +0200)
appinfo/app.php
js/loader.js [new file with mode: 0644]
lib/notestorage.php
lib/search/note.php [new file with mode: 0644]
lib/search/provider.php [new file with mode: 0644]

index b3c2b4686846846f1e1293ad37b801c30fb441a9..c80d95bf220e05523aebac5b4e098c1d7a633c98 100755 (executable)
@@ -10,4 +10,6 @@ OCP\App::addNavigationEntry(
         'name' => 'Tomboy notes'
     )
 );
+\OC_Search::registerProvider('OCA\Grauphel\Search\Provider');
+\OCP\Util::addscript('grauphel', 'loader');
 ?>
diff --git a/js/loader.js b/js/loader.js
new file mode 100644 (file)
index 0000000..84c2342
--- /dev/null
@@ -0,0 +1,4 @@
+$(document).ready(function() {
+    // translate search result type
+    OC.search.resultTypes.note = 'Note';
+});
\ No newline at end of file
index 0aeef9e63e86f30a5a27ef7f7446c9e3e6e1c611..951bf06e23647a00aa6adb296ad5ec606cc2577b 100644 (file)
@@ -271,6 +271,29 @@ class NoteStorage
         return $row['note_guid'];
     }
 
+    /**
+     * Search for a note
+     *
+     * @param string $query Query string
+     *
+     * @return array Database rows with note_guid and note_title
+     */
+    public function search($query)
+    {
+        $result = \OC_DB::executeAudited(
+            'SELECT `note_guid`, `note_title`'
+            . ' FROM `*PREFIX*grauphel_notes`'
+            . ' WHERE note_user = ? AND note_title LIKE ?',
+            array($this->username, '%' . $query . '%')
+        );
+
+        $notes = array();
+        while ($row = $result->fetchRow()) {
+            $notes[] = $row;
+        }
+        return $notes;
+    }
+
     /**
      * Save a note into storage.
      *
diff --git a/lib/search/note.php b/lib/search/note.php
new file mode 100644 (file)
index 0000000..333fa8f
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Part of grauphel
+ *
+ * PHP version 5
+ *
+ * @category  Tools
+ * @package   Grauphel
+ * @author    Christian Weiske <cweiske@cweiske.de>
+ * @copyright 2014 Christian Weiske
+ * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
+ * @link      http://cweiske.de/grauphel.htm
+ */
+namespace OCA\Grauphel\Search;
+
+/**
+ * Note search result
+ *
+ * @category  Tools
+ * @package   Grauphel
+ * @author    Christian Weiske <cweiske@cweiske.de>
+ * @copyright 2014 Christian Weiske
+ * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
+ * @version   Release: @package_version@
+ * @link      http://cweiske.de/grauphel.htm
+ */
+class Note extends \OCP\Search\Result
+{
+       /**
+        * Type name; translated in templates
+        *
+        * @var string
+        */
+       public $type = 'note';
+}
+?>
diff --git a/lib/search/provider.php b/lib/search/provider.php
new file mode 100644 (file)
index 0000000..5b42bb7
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Part of grauphel
+ *
+ * PHP version 5
+ *
+ * @category  Tools
+ * @package   Grauphel
+ * @author    Christian Weiske <cweiske@cweiske.de>
+ * @copyright 2014 Christian Weiske
+ * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
+ * @link      http://cweiske.de/grauphel.htm
+ */
+namespace OCA\Grauphel\Search;
+
+use \OCA\Grauphel\Lib\NoteStorage;
+
+/**
+ * Hook for the site-wide owncloud search.
+ *
+ * @category  Tools
+ * @package   Grauphel
+ * @author    Christian Weiske <cweiske@cweiske.de>
+ * @copyright 2014 Christian Weiske
+ * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
+ * @version   Release: @package_version@
+ * @link      http://cweiske.de/grauphel.htm
+ */
+class Provider extends \OCP\Search\Provider
+{
+       /**
+        * Search for notes
+        *
+        * @param string $query
+     *
+        * @return array list of \OCA\Grauphel\Search\Note
+        */
+       public function search($query)
+    {
+        $urlGen = \OC::$server->getURLGenerator();
+        $notes  = new NoteStorage($urlGen);
+        $notes->setUsername(\OC_User::getUser());
+        $rows = $notes->search($query);
+
+        $results = array();
+        foreach ($rows as $row) {
+            $res = new Note();
+            $res->id   = $row['note_guid'];
+            $res->name = $row['note_title'];
+            $res->link = $urlGen->linkToRoute(
+                'grauphel.gui.note', array('guid' => $row['note_guid'])
+            );
+            $results[] = $res;
+        }
+        return $results;
+    }
+}
+?>