X-Git-Url: https://git.cweiske.de/grauphel.git/blobdiff_plain/16bb2f544c636425ed9e6bff90654b8fa3c0f2e3..refs/tags/v0.5.1:/lib/notestorage.php diff --git a/lib/notestorage.php b/lib/notestorage.php index 67baa20..93311e4 100644 --- a/lib/notestorage.php +++ b/lib/notestorage.php @@ -274,26 +274,39 @@ class NoteStorage /** * Search for a note * - * @param string $keywords AND-concatenated query strings + * @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($keywords) + public function search($keywordGroups) { - $sqlWhere = ' AND (note_title LIKE ? OR note_tags LIKE ? OR note_content LIKE ?)'; + if (!isset($keywordGroups['AND'])) { + $keywordGroups['AND'] = array(); + } + if (!isset($keywordGroups['NOT'])) { + $keywordGroups['NOT'] = array(); + } + + $sqlTplAnd = ' AND (note_title ILIKE ? OR note_tags ILIKE ? OR note_content ILIKE ?)'; + $sqlTplNot = ' AND NOT (note_title ILIKE ? OR note_tags ILIKE ? OR note_content ILIKE ?)'; $arData = array( $this->username ); - foreach ($keywords as $keyword) { - $arData[] = '%' . $keyword . '%';//title - $arData[] = '%' . $keyword . '%';//tags - $arData[] = '%' . $keyword . '%';//content + 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 = ?' - . str_repeat($sqlWhere, count($keywords)), + . str_repeat($sqlTplAnd, count($keywordGroups['AND'])) + . str_repeat($sqlTplNot, count($keywordGroups['NOT'])), $arData ); @@ -373,17 +386,20 @@ class NoteStorage * Load notes for the given user in short form. * Optionally only those changed after $since revision * - * @param integer $since Revision number after which the notes changed - * @param string $rawtag Filter by tag. Special tags: - * - grauphel:special:all - * - grauphel:special:untagged + * @param integer $since Revision number after which the notes changed + * @param string $rawtag Filter by tag. Special tags: + * - grauphel:special:all + * - grauphel:special:untagged + * @param boolean $includeDate Load the last modification date or not * * @return array Array of short note objects */ - public function loadNotesOverview($since = null, $rawtag = null) - { + public function loadNotesOverview( + $since = null, $rawtag = null, $includeDate = false + ) { $result = \OC_DB::executeAudited( 'SELECT `note_guid`, `note_title`, `note_last_sync_revision`, `note_tags`' + . ', `note_last_change_date`' . ' FROM `*PREFIX*grauphel_notes`' . ' WHERE note_user = ?', array($this->username) @@ -404,7 +420,7 @@ class NoteStorage if ($rawtag !== null && strpos($row['note_tags'], $jsRawtag) === false) { continue; } - $notes[] = array( + $note = array( 'guid' => $row['note_guid'], 'ref' => array( 'api-ref' => $this->urlGen->getAbsoluteURL( @@ -416,10 +432,21 @@ class NoteStorage ) ) ), - 'href' => null,//FIXME + 'href' => $this->urlGen->getAbsoluteURL( + $this->urlGen->linkToRoute( + 'grauphel.gui.note', + array( + 'guid' => $row['note_guid'] + ) + ) + ), ), 'title' => $row['note_title'], ); + if ($includeDate) { + $note['last-change-date'] = $row['note_last_change_date']; + } + $notes[] = $note; } return $notes;