forked from GNUsocial/gnu-social
		
	actions
accessadminpanel.php
accesstoken.php
all.php
allrss.php
apiaccountratelimitstatus.php
apiaccountupdatedeliverydevice.php
apiaccountupdateprofile.php
apiaccountupdateprofilebackgroundimage.php
apiaccountupdateprofilecolors.php
apiaccountupdateprofileimage.php
apiaccountverifycredentials.php
apiatomservice.php
apiblockcreate.php
apiblockdestroy.php
apidirectmessage.php
apidirectmessagenew.php
apifavoritecreate.php
apifavoritedestroy.php
apifriendshipscreate.php
apifriendshipsdestroy.php
apifriendshipsexists.php
apifriendshipsshow.php
apigroupcreate.php
apigroupismember.php
apigroupjoin.php
apigroupleave.php
apigrouplist.php
apigrouplistall.php
apigroupmembership.php
apigroupshow.php
apihelptest.php
apimediaupload.php
apioauthaccesstoken.php
apioauthauthorize.php
apioauthpin.php
apioauthrequesttoken.php
apisearchatom.php
apisearchjson.php
apistatusesdestroy.php
apistatusesretweet.php
apistatusesretweets.php
apistatusesshow.php
apistatusesupdate.php
apistatusnetconfig.php
apistatusnetversion.php
apisubscriptions.php
apitimelinefavorites.php
apitimelinefriends.php
apitimelinegroup.php
apitimelinehome.php
apitimelinementions.php
apitimelinepublic.php
apitimelineretweetedbyme.php
apitimelineretweetedtome.php
apitimelineretweetsofme.php
apitimelinetag.php
apitimelineuser.php
apitrends.php
apiuserfollowers.php
apiuserfriends.php
apiuserprofileimage.php
apiusershow.php
atompubfavoritefeed.php
atompubmembershipfeed.php
atompubshowfavorite.php
atompubshowmembership.php
atompubshowsubscription.php
atompubsubscriptionfeed.php
attachment.php
attachment_ajax.php
attachment_thumbnail.php
avatarbynickname.php
avatarsettings.php
backupaccount.php
block.php
blockedfromgroup.php
bookmarklet.php
confirmaddress.php
conversation.php
deleteaccount.php
deleteapplication.php
deletegroup.php
deletenotice.php
deleteuser.php
designadminpanel.php
disfavor.php
doc.php
editapplication.php
editgroup.php
emailsettings.php
favor.php
favorited.php
favoritesrss.php
featured.php
file.php
finishremotesubscribe.php
foaf.php
foafgroup.php
geocode.php
getfile.php
grantrole.php
groupblock.php
groupbyid.php
groupdesignsettings.php
grouplogo.php
groupmembers.php
grouprss.php
groups.php
groupsearch.php
groupunblock.php
hcard.php
hostmeta.php
imsettings.php
inbox.php
invite.php
joingroup.php
leavegroup.php
licenseadminpanel.php
login.php
logout.php
makeadmin.php
microsummary.php
newapplication.php
newgroup.php
newmessage.php
newnotice.php
noticesearch.php
noticesearchrss.php
nudge.php
oauthappssettings.php
oauthconnectionssettings.php
oembed.php
opensearch.php
othersettings.php
otp.php
outbox.php
passwordsettings.php
pathsadminpanel.php
peoplesearch.php
peopletag.php
postnotice.php
profilesettings.php
public.php
publicrss.php
publictagcloud.php
publicxrds.php
recoverpassword.php
register.php
remotesubscribe.php
repeat.php
replies.php
repliesrss.php
requesttoken.php
restoreaccount.php
revokerole.php
robotstxt.php
rsd.php
sandbox.php
sessionsadminpanel.php
showapplication.php
showfavorites.php
showgroup.php
showmessage.php
shownotice.php
showstream.php
silence.php
siteadminpanel.php
sitenoticeadminpanel.php
smssettings.php
snapshotadminpanel.php
subedit.php
subscribe.php
subscribers.php
subscriptions.php
sup.php
tag.php
tagother.php
tagrss.php
unblock.php
unsandbox.php
unsilence.php
unsubscribe.php
updateprofile.php
useradminpanel.php
userauthorization.php
userbyid.php
userdesignsettings.php
usergroups.php
userrss.php
userxrd.php
version.php
xrds.php
avatar
background
classes
db
doc-src
extlib
file
js
lib
local
locale
plugins
scripts
tests
theme
tpl
.gitignore
COPYING
EVENTS.txt
Makefile
README
apple-touch-icon.png
config.php.sample
favicon.ico
htaccess.sample
index.php
install.php
lighttpd.conf.example
		
			
				
	
	
		
			263 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * StatusNet, the distributed open-source microblogging tool
 | 
						|
 *
 | 
						|
 * Base class for showing subscription information in the API
 | 
						|
 *
 | 
						|
 * PHP version 5
 | 
						|
 *
 | 
						|
 * LICENCE: This program is free software: you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU Affero General Public License as published by
 | 
						|
 * the Free Software Foundation, either version 3 of the License, or
 | 
						|
 * (at your option) any later version.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful,
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
 * GNU Affero General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU Affero General Public License
 | 
						|
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 *
 | 
						|
 * @category  API
 | 
						|
 * @package   StatusNet
 | 
						|
 * @author    Dan Moore <dan@moore.cx>
 | 
						|
 * @author    Evan Prodromou <evan@status.net>
 | 
						|
 * @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
 | 
						|
 * @link      http://status.net/
 | 
						|
 */
 | 
						|
 | 
						|
if (!defined('STATUSNET')) {
 | 
						|
    exit(1);
 | 
						|
}
 | 
						|
 | 
						|
require_once INSTALLDIR . '/lib/apibareauth.php';
 | 
						|
 | 
						|
/**
 | 
						|
 * This class outputs a list of profiles as Twitter-style user and status objects.
 | 
						|
 * It is used by the API methods /api/statuses/(friends|followers). To support the
 | 
						|
 * social graph methods it also can output a simple list of IDs.
 | 
						|
 *
 | 
						|
 * @category API
 | 
						|
 * @package  StatusNet
 | 
						|
 * @author   Dan Moore <dan@moore.cx>
 | 
						|
 * @author   Evan Prodromou <evan@status.net>
 | 
						|
 * @author   Zach Copley <zach@status.net>
 | 
						|
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 | 
						|
 * @link     http://status.net/
 | 
						|
 */
 | 
						|
class ApiSubscriptionsAction extends ApiBareAuthAction
 | 
						|
{
 | 
						|
    var $profiles = null;
 | 
						|
    var $tag      = null;
 | 
						|
    var $lite     = null;
 | 
						|
    var $ids_only = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Take arguments for running
 | 
						|
     *
 | 
						|
     * @param array $args $_REQUEST args
 | 
						|
     *
 | 
						|
     * @return boolean success flag
 | 
						|
     */
 | 
						|
    function prepare($args)
 | 
						|
    {
 | 
						|
        parent::prepare($args);
 | 
						|
 | 
						|
        $this->tag      = $this->arg('tag');
 | 
						|
 | 
						|
        // Note: Twitter no longer supports 'lite'
 | 
						|
        $this->lite     = $this->arg('lite');
 | 
						|
 | 
						|
        $this->ids_only = $this->arg('ids_only');
 | 
						|
 | 
						|
        // If called as a social graph method, show 5000 per page, otherwise 100
 | 
						|
 | 
						|
        $this->count    = isset($this->ids_only) ?
 | 
						|
            5000 : (int)$this->arg('count', 100);
 | 
						|
 | 
						|
        $this->user = $this->getTargetUser($this->arg('id'));
 | 
						|
 | 
						|
        if (empty($this->user)) {
 | 
						|
            // TRANS: Client error displayed when requesting a list of followers for a non-existing user.
 | 
						|
            $this->clientError(_('No such user.'), 404, $this->format);
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        $this->profiles = $this->getProfiles();
 | 
						|
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Handle the request
 | 
						|
     *
 | 
						|
     * Show the profiles
 | 
						|
     *
 | 
						|
     * @param array $args $_REQUEST data (unused)
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    function handle($args)
 | 
						|
    {
 | 
						|
        parent::handle($args);
 | 
						|
 | 
						|
        if (!in_array($this->format, array('xml', 'json'))) {
 | 
						|
            // TRANS: Client error displayed when trying to handle an unknown API method.
 | 
						|
            $this->clientError(_('API method not found.'), $code = 404);
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        $this->initDocument($this->format);
 | 
						|
 | 
						|
        if (isset($this->ids_only)) {
 | 
						|
            $this->showIds();
 | 
						|
        } else {
 | 
						|
            $this->showProfiles(isset($this->lite) ? false : true);
 | 
						|
        }
 | 
						|
 | 
						|
        $this->endDocument($this->format);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get profiles - should get overrrided
 | 
						|
     *
 | 
						|
     * @return array Profiles
 | 
						|
     */
 | 
						|
    function getProfiles()
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Is this action read only?
 | 
						|
     *
 | 
						|
     * @param array $args other arguments
 | 
						|
     *
 | 
						|
     * @return boolean true
 | 
						|
     */
 | 
						|
    function isReadOnly($args)
 | 
						|
    {
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * When was this feed last modified?
 | 
						|
     *
 | 
						|
     * @return string datestamp of the latest profile in the stream
 | 
						|
     */
 | 
						|
    function lastModified()
 | 
						|
    {
 | 
						|
        if (!empty($this->profiles) && (count($this->profiles) > 0)) {
 | 
						|
            return strtotime($this->profiles[0]->created);
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * An entity tag for this action
 | 
						|
     *
 | 
						|
     * Returns an Etag based on the action name, language, user ID, and
 | 
						|
     * timestamps of the first and last profiles in the subscriptions list
 | 
						|
     * There's also an indicator to show whether this action is being called
 | 
						|
     * as /api/statuses/(friends|followers) or /api/(friends|followers)/ids
 | 
						|
     *
 | 
						|
     * @return string etag
 | 
						|
     */
 | 
						|
    function etag()
 | 
						|
    {
 | 
						|
        if (!empty($this->profiles) && (count($this->profiles) > 0)) {
 | 
						|
 | 
						|
            $last = count($this->profiles) - 1;
 | 
						|
 | 
						|
            return '"' . implode(
 | 
						|
                ':',
 | 
						|
                array($this->arg('action'),
 | 
						|
                      common_user_cache_hash($this->auth_user),
 | 
						|
                      common_language(),
 | 
						|
                      $this->user->id,
 | 
						|
                      // Caching tags.
 | 
						|
                      isset($this->ids_only) ? 'IDs' : 'Profiles',
 | 
						|
                      strtotime($this->profiles[0]->created),
 | 
						|
                      strtotime($this->profiles[$last]->created))
 | 
						|
            )
 | 
						|
            . '"';
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Show the profiles as Twitter-style useres and statuses
 | 
						|
     *
 | 
						|
     * @param boolean $include_statuses Whether to include the latest status
 | 
						|
     *                                  with each user. Default true.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    function showProfiles($include_statuses = true)
 | 
						|
    {
 | 
						|
        switch ($this->format) {
 | 
						|
        case 'xml':
 | 
						|
            $this->elementStart('users', array('type' => 'array',
 | 
						|
                                               'xmlns:statusnet' => 'http://status.net/schema/api/1/'));
 | 
						|
            foreach ($this->profiles as $profile) {
 | 
						|
                $this->showProfile(
 | 
						|
                    $profile,
 | 
						|
                    $this->format,
 | 
						|
                    null,
 | 
						|
                    $include_statuses
 | 
						|
                );
 | 
						|
            }
 | 
						|
            $this->elementEnd('users');
 | 
						|
            break;
 | 
						|
        case 'json':
 | 
						|
            $arrays = array();
 | 
						|
            foreach ($this->profiles as $profile) {
 | 
						|
                $arrays[] = $this->twitterUserArray(
 | 
						|
                    $profile,
 | 
						|
                    $include_statuses
 | 
						|
                );
 | 
						|
            }
 | 
						|
            print json_encode($arrays);
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            // TRANS: Client error displayed when requesting profiles of followers in an unsupported format.
 | 
						|
            $this->clientError(_('Unsupported format.'));
 | 
						|
            break;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Show the IDs of the profiles only. 5000 per page. To support
 | 
						|
     * the 'social graph' methods: /api/(friends|followers)/ids
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    function showIds()
 | 
						|
    {
 | 
						|
        switch ($this->format) {
 | 
						|
        case 'xml':
 | 
						|
            $this->elementStart('ids');
 | 
						|
            foreach ($this->profiles as $profile) {
 | 
						|
                $this->element('id', null, $profile->id);
 | 
						|
            }
 | 
						|
            $this->elementEnd('ids');
 | 
						|
            break;
 | 
						|
        case 'json':
 | 
						|
            $ids = array();
 | 
						|
            foreach ($this->profiles as $profile) {
 | 
						|
                $ids[] = (int)$profile->id;
 | 
						|
            }
 | 
						|
            print json_encode($ids);
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            // TRANS: Client error displayed when requesting IDs of followers in an unsupported format.
 | 
						|
            $this->clientError(_('Unsupported format.'));
 | 
						|
            break;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |