add DELETE /token/$username/$tokenKey API
[grauphel.git] / lib / notestorage.php
index f3a904de996c9a303efe6cefe94ceb7cc623df03..c6659034e8da7d337bca551b43cf32cf126dcac6 100644 (file)
@@ -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'];
@@ -214,7 +225,7 @@ class NoteStorage
                 'tags'            => array(),
             );
         }
-        
+
         return $this->noteFromRow($row);
     }
 
@@ -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'],
@@ -364,17 +398,17 @@ class NoteStorage
     {
         return array(
             'note_guid'  => $note->guid,
-            'note_title' => $note->title,
+            'note_title' => (string) $note->title,
 
-            'note_content'         => $note->{'note-content'},
-            'note_content_version' => $note->{'note-content-version'},
+            'note_content'         => (string) $note->{'note-content'},
+            'note_content_version' => (string) $note->{'note-content-version'},
 
             'note_create_date'               => $note->{'create-date'},
             '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'},