]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Ticket 1612 - make destory (and create) favorites work via API
authorZach Copley <zcopley@mekong.(none)>
Wed, 17 Jun 2009 21:34:04 +0000 (14:34 -0700)
committerZach Copley <zcopley@mekong.(none)>
Wed, 17 Jun 2009 21:34:04 +0000 (14:34 -0700)
actions/twitapifavorites.php
lib/router.php

index 8656adbe862d5a8419852ea1980dfd7bb9e81b8f..2266ba11c2126cf40c1aaaab9067d0fea9574609 100644 (file)
@@ -34,6 +34,11 @@ class TwitapifavoritesAction extends TwitterapiAction
         $user = $this->get_user($apidata['api_arg'], $apidata);
 
         if (empty($user)) {
+        if ($apidata['content-type'] == 'xml') {
+            $this->show_single_xml_status($notice);
+        } elseif ($apidata['content-type'] == 'json') {
+            $this->show_single_json_status($notice);
+        }
             $this->clientError('Not Found', 404, $apidata['content-type']);
             return;
         }
@@ -91,7 +96,6 @@ class TwitapifavoritesAction extends TwitterapiAction
 
         // Check for RESTfulness
         if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
-            // XXX: Twitter just prints the err msg, no XML / JSON.
             $this->clientError(_('This method requires a POST or DELETE.'),
                 400, $apidata['content-type']);
             return;
@@ -102,10 +106,9 @@ class TwitapifavoritesAction extends TwitterapiAction
             return;
         }
 
-        $user = $apidata['user']; // Always the auth user
-
+        $user      = $apidata['user']; // Always the auth user
         $notice_id = $apidata['api_arg'];
-        $notice = Notice::staticGet($notice_id);
+        $notice    = Notice::staticGet($notice_id);
 
         if (empty($notice)) {
             $this->clientError(_('No status found with that ID.'),
@@ -115,7 +118,7 @@ class TwitapifavoritesAction extends TwitterapiAction
 
         // XXX: Twitter lets you fave things repeatedly via api.
         if ($user->hasFave($notice)) {
-            $this->clientError(_('This notice is already a favorite!'),
+            $this->clientError(_('This status is already a favorite!'),
                 403, $apidata['content-type']);
             return;
         }
@@ -123,7 +126,7 @@ class TwitapifavoritesAction extends TwitterapiAction
         $fave = Fave::addNew($user, $notice);
 
         if (empty($fave)) {
-            $this->serverError(_('Could not create favorite.'));
+            $this->clientError(_('Could not create favorite.'));
             return;
         }
 
@@ -141,7 +144,55 @@ class TwitapifavoritesAction extends TwitterapiAction
     function destroy($args, $apidata)
     {
         parent::handle($args);
-        $this->serverError(_('API method under construction.'), $code=501);
+
+        // Check for RESTfulness
+        if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
+            $this->clientError(_('This method requires a POST or DELETE.'),
+                400, $apidata['content-type']);
+            return;
+        }
+
+        if (!in_array($apidata['content-type'], array('xml', 'json'))) {
+            $this->clientError(_('API method not found!'), $code = 404);
+            return;
+        }
+
+        $user      = $apidata['user']; // Always the auth user
+        $notice_id = $apidata['api_arg'];
+        $notice    = Notice::staticGet($notice_id);
+
+        if (empty($notice)) {
+            $this->clientError(_('No status found with that ID.'),
+                404, $apidata['content-type']);
+            return;
+        }
+
+        $fave            = new Fave();
+        $fave->user_id   = $this->id;
+        $fave->notice_id = $notice->id;
+
+        if (!$fave->find(true)) {
+            $this->clientError(_('That status is not a favorite!'),
+                403, $apidata['content-type']);
+            return;
+        }
+
+        $result = $fave->delete();
+
+        if (!$result) {
+            common_log_db_error($fave, 'DELETE', __FILE__);
+            $this->clientError(_('Could not delete favorite.'), 404);
+            return;
+        }
+
+        $user->blowFavesCache();
+
+        if ($apidata['content-type'] == 'xml') {
+            $this->show_single_xml_status($notice);
+        } elseif ($apidata['content-type'] == 'json') {
+            $this->show_single_json_status($notice);
+        }
+
     }
 
     // XXX: these two funcs swiped from faves.
index 0fbaba9ed5a9d1bb00c79d4a68b3d8752ed5ad09..8b6f636182d7e5fc16168e306ad8dd71976ad2f8 100644 (file)
@@ -351,7 +351,8 @@ class Router
 
         $m->connect('api/favorites/:method/:argument',
                     array('action' => 'api',
-                          'apiaction' => 'favorites'));
+                          'apiaction' => 'favorites',
+                          array('method' => '(create|destroy)')));
 
         $m->connect('api/favorites/:argument',
                     array('action' => 'api',