]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Implement the is_member and membership group api's
authorCraig Andrews <candrews@integralblue.com>
Fri, 28 Aug 2009 02:55:32 +0000 (22:55 -0400)
committerCraig Andrews <candrews@integralblue.com>
Fri, 28 Aug 2009 02:55:32 +0000 (22:55 -0400)
actions/api.php
actions/twitapigroups.php
lib/twitterapi.php

index 93e33085f93346bb2474dc6c856693d0624a22ac..f425a8dcd7866acf3929fcfbd086fedf7e6c2692 100644 (file)
@@ -133,6 +133,8 @@ class ApiAction extends Action
                                 'groups/show',
                                 'groups/timeline',
                                 'groups/list_all',
+                                'groups/membership',
+                                'groups/is_member',
                                 'groups/timeline');
 
         static $bareauth = array('statuses/user_timeline',
index 214fa8214f9b6e19a5fe73885bec4ed90302c30b..1740a33b508fa7c90cecb94bff1d61271b9ae45d 100644 (file)
@@ -21,7 +21,7 @@
  *
  * @category  Twitter
  * @package   StatusNet
- * @author    Craig Andrews
+ * @author    Craig Andrews <candrews@integralblue.com>
  * @author    Zach Copley <zach@status.net>
  * @copyright 2009 StatusNet, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
@@ -233,4 +233,97 @@ require_once INSTALLDIR.'/lib/twitterapi.php';
          }
      }
 
+     function membership($args, $apidata)
+     {
+         parent::handle($args);
+
+         common_debug("in groups api action");
+
+         $this->auth_user = $apidata['user'];
+         $group = $this->get_group($apidata['api_arg'], $apidata);
+         
+         if (empty($group)) {
+             $this->clientError('Not Found', 404, $apidata['content-type']);
+             return;
+         }
+
+         $sitename   = common_config('site', 'name');
+         $title      = sprintf(_("Members of %s group"), $group->nickname);
+         $taguribase = common_config('integration', 'taguri');
+         $id         = "tag:$taguribase:GroupMembership:".$group->id;
+         $link       = common_local_url('showgroup',
+             array('nickname' => $group->nickname));
+         $subtitle   = sprintf(_('Members of %1$s on %2$s'),
+             $group->nickname, $sitename);
+
+         $page     = (int)$this->arg('page', 1);
+         $count    = (int)$this->arg('count', 20);
+         $max_id   = (int)$this->arg('max_id', 0);
+         $since_id = (int)$this->arg('since_id', 0);
+         $since    = $this->arg('since');
+
+         $member = $group->getMembers(($page-1)*$count,
+             $count, $since_id, $max_id, $since);
+
+         switch($apidata['content-type']) {
+          case 'xml':
+             $this->show_twitter_xml_users($member);
+             break;
+          //TODO implement the RSS and ATOM content types
+          /*case 'rss':
+             $this->show_rss_users($member, $title, $link, $subtitle);
+             break;*/
+          /*case 'atom':
+             if (isset($apidata['api_arg'])) {
+                 $selfuri = common_root_url() .
+                     'api/statusnet/groups/membership/' .
+                         $apidata['api_arg'] . '.atom';
+             } else {
+                 $selfuri = common_root_url() .
+                  'api/statusnet/groups/membership.atom';
+             }
+             $this->show_atom_users($member, $title, $id, $link,
+                 $subtitle, null, $selfuri);
+             break;*/
+          case 'json':
+             $this->show_json_users($member);
+             break;
+          default:
+             $this->clientError(_('API method not found!'), $code = 404);
+         }
+     }
+
+     function is_member($args, $apidata)
+     {
+         parent::handle($args);
+
+         common_debug("in groups api action");
+
+         $this->auth_user = $apidata['user'];
+         $group = User_group::staticGet($args['group_id']);
+         if(! $group){
+            $this->clientError(_('Group not found'), $code = 500);
+         }
+         $user = User::staticGet('id', $args['user_id']);
+         if(! $user){
+            $this->clientError(_('User not found'), $code = 500);
+         }
+         
+         $is_member=$user->isMember($group);
+
+         switch($apidata['content-type']) {
+          case 'xml':
+             $this->init_document('xml');
+             $this->element('is_member', null, $is_member);
+             $this->end_document('xml');
+             break;
+          case 'json':
+             $this->init_document('json');
+             $this->show_json_objects(array('is_member'=>$is_member));
+             $this->end_document('json');
+             break;
+          default:
+             $this->clientError(_('API method not found!'), $code = 404);
+         }
+     }
 }
index c8099978fa46c57e3c61db759405b3da33b95916..638efba2415b56ac006247cffc37f942f9f0b59b 100644 (file)
@@ -791,6 +791,52 @@ class TwitterapiAction extends Action
         $this->end_document('xml');
     }
 
+    function show_twitter_xml_users($user)
+    {
+
+        $this->init_document('xml');
+        $this->elementStart('users', array('type' => 'array'));
+
+        if (is_array($user)) {
+            foreach ($group as $g) {
+                $twitter_user = $this->twitter_user_array($g);
+                $this->show_twitter_xml_user($twitter_user,'user');
+            }
+        } else {
+            while ($user->fetch()) {
+                $twitter_user = $this->twitter_user_array($user);
+                $this->show_twitter_xml_user($twitter_user);
+            }
+        }
+
+        $this->elementEnd('users');
+        $this->end_document('xml');
+    }
+
+    function show_json_users($user)
+    {
+
+        $this->init_document('json');
+
+        $users = array();
+
+        if (is_array($user)) {
+            foreach ($user as $u) {
+                $twitter_user = $this->twitter_user_array($u);
+                array_push($users, $twitter_user);
+            }
+        } else {
+            while ($user->fetch()) {
+                $twitter_user = $this->twitter_user_array($user);
+                array_push($users, $twitter_user);
+            }
+        }
+
+        $this->show_json_objects($users);
+
+        $this->end_document('json');
+    }
+
     function show_single_json_group($group)
     {
         $this->init_document('json');