X-Git-Url: https://git.cweiske.de/grauphel.git/blobdiff_plain/cd37bde4ef0747a11c1221e937027fe17f2894fe..21e7415fe5a418ef6dd7f29d3749b11cc9adaa7d:/lib/notestorage.php diff --git a/lib/notestorage.php b/lib/notestorage.php index f3a904d..7449417 100644 --- a/lib/notestorage.php +++ b/lib/notestorage.php @@ -54,6 +54,17 @@ class NoteStorage public function getTags() { + $result = \OC_DB::executeAudited( + 'SELECT `note_tags` FROM `*PREFIX*grauphel_notes`' + . ' WHERE note_user = ?', + array($this->username) + ); + + $tags = array(); + while ($row = $result->fetchRow()) { + $tags = array_merge($tags, json_decode($row['note_tags'])); + } + return array_unique($tags); } /** @@ -127,8 +138,8 @@ class NoteStorage )->fetchRow(); if ($row === false) { - $syncdata = $this->getNewSyncData($this->username); - $this->saveSyncData($this->username, $syncdata); + $syncdata = $this->getNewSyncData(); + $this->saveSyncData($syncdata); } else { $syncdata = new SyncData(); $syncdata->latestSyncRevision = (int) $row['syncdata_latest_sync_revision']; @@ -273,24 +284,37 @@ 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 integer $since Revision number after which the notes changed + * @param string $rawtag Filter by tag. Special tags: + * - grauphel:special:all + * - grauphel:special:untagged * * @return array Array of short note objects */ - public function loadNotesOverview($since = null) + public function loadNotesOverview($since = null, $rawtag = null) { $result = \OC_DB::executeAudited( - 'SELECT `note_guid`, `note_title`, `note_last_sync_revision`' + 'SELECT `note_guid`, `note_title`, `note_last_sync_revision`, `note_tags`' . ' FROM `*PREFIX*grauphel_notes`' . ' WHERE note_user = ?', array($this->username) ); $notes = array(); + if ($rawtag == 'grauphel:special:all') { + $rawtag = null; + } else if ($rawtag == 'grauphel:special:untagged') { + $jsRawtag = json_encode(array()); + } else { + $jsRawtag = json_encode($rawtag); + } while ($row = $result->fetchRow()) { if ($since !== null && $row['note_last_sync_revision'] <= $since) { continue; } + if ($rawtag !== null && strpos($row['note_tags'], $jsRawtag) === false) { + continue; + } $notes[] = array( 'guid' => $row['note_guid'], 'ref' => array( @@ -339,14 +363,24 @@ class NoteStorage return $notes; } + protected function fixDate($date) + { + if (strlen($date) == 32) { + //Bug in grauphel 0.1.1; date fields in DB had only 32 instead of 33 + // characters. The last digit of the time zone was missing + $date .= '0'; + } + return $date; + } + protected function noteFromRow($row) { return (object) array( 'guid' => $row['note_guid'], - 'create-date' => $row['note_create_date'], - 'last-change-date' => $row['note_last_change_date'], - 'last-metadata-change-date' => $row['note_last_metadata_change_date'], + 'create-date' => $this->fixDate($row['note_create_date']), + 'last-change-date' => $this->fixDate($row['note_last_change_date']), + 'last-metadata-change-date' => $this->fixDate($row['note_last_metadata_change_date']), 'title' => $row['note_title'], 'note-content' => $row['note_content'], @@ -373,8 +407,8 @@ class NoteStorage 'note_last_change_date' => $note->{'last-change-date'}, 'note_last_metadata_change_date' => $note->{'last-metadata-change-date'}, - 'note_open_on_startup' => $note->{'open-on-startup'}, - 'note_pinned' => $note->pinned, + 'note_open_on_startup' => (int) $note->{'open-on-startup'}, + 'note_pinned' => (int) $note->pinned, 'note_tags' => json_encode($note->tags), 'note_last_sync_revision' => $note->{'last-sync-revision'},