Implement note search
[grauphel.git] / lib / notestorage.php
index fb6803029f780b8a00b31c8f6b54685d40daf435..951bf06e23647a00aa6adb296ad5ec606cc2577b 100644 (file)
@@ -245,6 +245,55 @@ class NoteStorage
         return $this->noteFromRow($row);
     }
 
+    /**
+     * Load a GUID of a note by the note title.
+     *
+     * The note title is stored html-escaped in the database because we
+     * get it that way from tomboy. Thus we have to escape the search
+     * input, too.
+     *
+     * @param string $title Note title.
+     *
+     * @return string GUID, NULL if note could not be found
+     */
+    public function loadGuidByTitle($title)
+    {
+        $row = \OC_DB::executeAudited(
+            'SELECT note_guid FROM `*PREFIX*grauphel_notes`'
+            . ' WHERE `note_user` = ? AND `note_title` = ?',
+            array($this->username, htmlspecialchars($title))
+        )->fetchRow();
+
+        if ($row === false) {
+            return null;
+        }
+
+        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.
      *