]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/twitapifriendships.php
fix calls to show_rss_timeline
[quix0rs-gnu-social.git] / actions / twitapifriendships.php
index 0253cb8e57a14474b24b55206364594866b85df6..e4b49cbe4a92529cc2c470b2779ec68dfa8b96f4 100644 (file)
@@ -26,158 +26,130 @@ class TwitapifriendshipsAction extends TwitterapiAction {
        function create($args, $apidata) {
                parent::handle($args);
 
+               if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+                       $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']);
+                       return;
+               }
+
                $id = $apidata['api_arg'];
 
                $other = $this->get_user($id);
 
                if (!$other) {
-                       $this->client_error(_('No such user'));
-                       exit();
+                       $this->client_error(_('Could not follow user: User not found.'), 403, $apidata['content-type']);
                        return;
                }
-               
+
                $user = $apidata['user'];
-               
+
                if ($user->isSubscribed($other)) {
-                       $this->client_error(_('Already subscribed.'));
-                       exit();
+                       $errmsg = sprintf(_('Could not follow user: %s is already on your list.'), $other->nickname);
+                       $this->client_error($errmsg, 403, $apidata['content-type']);
                        return;
                }
-               
+
                $sub = new Subscription();
-               
+
                $sub->query('BEGIN');
-               
+
                $sub->subscriber = $user->id;
                $sub->subscribed = $other->id;
                $sub->created = DB_DataObject_Cast::dateTime(); # current time
-                 
+
                $result = $sub->insert();
 
                if (!$result) {
-                       $this->server_error(_('Could not subscribe'));
-                       exit();
+                       $errmsg = sprintf(_('Could not follow user: %s is already on your list.'), $other->nickname);
+                       $this->client_error($errmsg, 400, $apidata['content-type']);
                        return;
                }
-               
+
                $sub->query('COMMIT');
-               
+
                mail_subscribe_notify($other, $user);
 
                $type = $apidata['content-type'];
                $this->init_document($type);
-               $this->show_profile($other);
+               $this->show_profile($other, $type);
                $this->end_document($type);
-               exit();
+
        }
-       
-       //destroy
-       //
-       //Discontinues friendship with the user specified in the ID parameter as the authenticating user.  Returns the un-friended user in the requested format when successful.  Returns a string describing the failure condition when unsuccessful. 
-       //
-       //URL: http://twitter.com/friendships/destroy/id.format
-       //
-       //Formats: xml, json
-       //
-       //Parameters:
-       //
-       //* id.  Required.  The ID or screen name of the user with whom to discontinue friendship.  Ex: http://twitter.com/friendships/destroy/12345.json or http://twitter.com/friendships/destroy/bob.xml
-       
+
        function destroy($args, $apidata) {
                parent::handle($args);
+
+               if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
+                       $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']);
+                       return;
+               }
+
                $id = $apidata['api_arg'];
 
                # We can't subscribe to a remote person, but we can unsub
-               
+
                $other = $this->get_profile($id);
                $user = $apidata['user'];
-               
+
                $sub = new Subscription();
                $sub->subscriber = $user->id;
                $sub->subscribed = $other->id;
-               
+
                if ($sub->find(TRUE)) {
                        $sub->query('BEGIN');
                        $sub->delete();
                        $sub->query('COMMIT');
                } else {
-                       $this->client_error(_('Not subscribed'));
-                       exit();
+                       $this->client_error(_('You are not friends with the specified user.'), 403, $apidata['content-type']);
+                       return;
                }
 
                $type = $apidata['content-type'];
                $this->init_document($type);
-               $this->show_profile($other);
+               $this->show_profile($other, $type);
                $this->end_document($type);
-               exit();
+
        }
 
-       //      Tests if a friendship exists between two users.
-       //        
-       //        
-       //        URL: http://twitter.com/friendships/exists.format
-       //      
-       //      Formats: xml, json, none
-       //        
-       //        Parameters:
-       //      
-       //          * user_a.  Required.  The ID or screen_name of the first user to test friendship for.
-       //            * user_b.  Required.  The ID or screen_name of the second user to test friendship for.
-       //        * Ex: http://twitter.com/friendships/exists.xml?user_a=alice&user_b=bob
-       
        function exists($args, $apidata) {
                parent::handle($args);
+
+               if (!in_array($apidata['content-type'], array('xml', 'json'))) {
+                       common_user_error(_('API method not found!'), $code = 404);
+                       return;
+               }
+
                $user_a_id = $this->trimmed('user_a');
                $user_b_id = $this->trimmed('user_b');
-               $user_a = $this->get_profile($user_a_id);
-               $user_b = $this->get_profile($user_b_id);
-               
+
+               $user_a = $this->get_user($user_a_id);
+               $user_b = $this->get_user($user_b_id);
+
                if (!$user_a || !$user_b) {
-                       $this->client_error(_('No such user'));
+                       $this->client_error(_('Two user ids or screen_names must be supplied.'), 400, $apidata['content-type']);
                        return;
                }
-               
+
                if ($user_a->isSubscribed($user_b)) {
                        $result = 'true';
                } else {
                        $result = 'false';
                }
-               
+
                switch ($apidata['content-type']) {
                 case 'xml':
-                       common_start_xml();
+                       $this->init_document('xml');
                        common_element('friends', NULL, $result);
-                       common_end_xml();
+                       $this->end_document('xml');
                        break;
                 case 'json':
+                       $this->init_document('json');
                        print json_encode($result);
-                       print "\n";
+                       $this->end_document('json');
                        break;
                 default:
-                       print $result;
                        break;
                }
-               
-       }
 
-       function get_profile($id) {
-               if (is_numeric($id)) {
-                       return Profile::staticGet($id);
-               } else {
-                       $user = User::staticGet('nickname', $id);
-                       if ($user) {
-                               return $user->getProfile();
-                       } else {
-                               return NULL;
-                       }
-               }
-       }
-       
-       function get_user($id) {
-               if (is_numeric($id)) {
-                       return User::staticGet($id);
-               } else {
-                       return User::staticGet('nickname', $id);
-               }
        }
+
 }
\ No newline at end of file