X-Git-Url: https://git.cweiske.de/grauphel.git/blobdiff_plain/2b5ff5d48b4ec80e0e0e18188689edefaeefe91d..46a9ff9889466f23c310e2de100d0ae16c5a2a1a:/lib/notestorage.php diff --git a/lib/notestorage.php b/lib/notestorage.php index 951bf06..6802e2f 100644 --- a/lib/notestorage.php +++ b/lib/notestorage.php @@ -274,17 +274,40 @@ class NoteStorage /** * Search for a note * - * @param string $query Query string + * @param array $keywords arrays of query strings within keys AND and NOT * * @return array Database rows with note_guid and note_title */ - public function search($query) + public function search($keywordGroups) { + if (!isset($keywordGroups['AND'])) { + $keywordGroups['AND'] = array(); + } + if (!isset($keywordGroups['NOT'])) { + $keywordGroups['NOT'] = array(); + } + + $sqlTplAnd = ' AND (note_title LIKE ? OR note_tags LIKE ? OR note_content LIKE ?)'; + $sqlTplNot = ' AND NOT (note_title LIKE ? OR note_tags LIKE ? OR note_content LIKE ?)'; + $arData = array( + $this->username + ); + foreach (array('AND', 'NOT') as $group) { + $keywords = $keywordGroups[$group]; + foreach ($keywords as $keyword) { + $arData[] = '%' . $keyword . '%';//title + $arData[] = '%' . $keyword . '%';//tags + $arData[] = '%' . $keyword . '%';//content + } + } + $result = \OC_DB::executeAudited( 'SELECT `note_guid`, `note_title`' . ' FROM `*PREFIX*grauphel_notes`' - . ' WHERE note_user = ? AND note_title LIKE ?', - array($this->username, '%' . $query . '%') + . ' WHERE note_user = ?' + . str_repeat($sqlTplAnd, count($keywordGroups['AND'])) + . str_repeat($sqlTplNot, count($keywordGroups['NOT'])), + $arData ); $notes = array();