+
+ return $this->subscriptions($apidata, 'subscriber', 'subscribed');
+ }
+
+ function subscriptions($apidata, $other_attr, $user_attr) {
+
+ $user = $this->get_subs_user($apidata);
+
+ # XXX: id
+ # XXX: lite
+
+ $page = $this->trimmed('page');
+
+ if (!$page || !is_numeric($page)) {
+ $page = 1;
+ }
+
+ $profile = $user->getProfile();
+
+ if (!$profile) {
+ common_server_error(_('User has no profile.'));
+ return;
+ }
+
+ $sub = new Subscription();
+ $sub->$user_attr = $profile->id;
+ $sub->orderBy('created DESC');
+ $sub->limit(($page-1)*100, 100);
+
+ $others = array();
+
+ if ($sub->find()) {
+ while ($sub->fetch()) {
+ $others[] = Profile::staticGet($sub->$other_attr);
+ }
+ } else {
+ // user has no followers
+ }
+
+ $type = $apidata['content-type'];
+
+ $this->init_document($type);
+ $this->show_profiles($others, $type);
+ $this->end_document($type);
+ exit();
+ }
+
+ function get_subs_user($apidata) {
+
+ // function was called with an argument /statuses/user_timeline/api_arg.format
+ if (isset($apidata['api_arg'])) {
+
+ if (is_numeric($apidata['api_arg'])) {
+ $user = User::staticGet($apidata['api_arg']);
+ } else {
+ $nickname = common_canonical_nickname($apidata['api_arg']);
+ $user = User::staticGet('nickname', $nickname);
+ }
+ } else {
+
+ // if no user was specified, then we'll use the authenticated user
+ $user = $apidata['user'];
+ }
+
+ if (!$user) {
+ // Set the user to be the auth user if asked-for can't be found
+ // honestly! This is what Twitter does, I swear --Zach
+ $user = $apidata['user'];
+ }
+
+ return $user;
+ }
+
+ function show_profiles($profiles, $type) {
+ switch ($type) {
+ case 'xml':
+ common_element_start('users', array('type' => 'array'));
+ foreach ($profiles as $profile) {
+ $this->show_profile($profile);
+ }
+ common_element_end('users');
+ break;
+ case 'json':
+ $arrays = array();
+ foreach ($profiles as $profile) {
+ $arrays[] = $this->twitter_user_array($profile, true);
+ }
+ print json_encode($arrays);
+ break;
+ default:
+ $this->client_error(_('unsupported file type'));
+ exit();
+ }