forked from GNUsocial/gnu-social
Subscription "get by" functions now don't use ArrayWrappers
They were getting in the way of some strict-typing stuff.
This commit is contained in:
parent
39f21d63af
commit
63306081bc
@ -65,7 +65,7 @@ class ApiUserFriendsAction extends ApiSubscriptionsAction
|
||||
$this->tag, $offset, $limit
|
||||
);
|
||||
} else {
|
||||
$subs = $this->user->getSubscriptions(
|
||||
$subs = $this->user->getSubscribed(
|
||||
$offset,
|
||||
$limit
|
||||
);
|
||||
|
@ -95,7 +95,7 @@ class SubscriptionsAction extends GalleryAction
|
||||
if ($this->tag) {
|
||||
$subscriptions = $this->user->getTaggedSubscriptions($this->tag, $offset, $limit);
|
||||
} else {
|
||||
$subscriptions = $this->user->getSubscriptions($offset, $limit);
|
||||
$subscriptions = $this->user->getSubscribed($offset, $limit);
|
||||
}
|
||||
|
||||
if ($subscriptions) {
|
||||
|
@ -646,40 +646,18 @@ class Profile extends Managed_DataObject
|
||||
}
|
||||
}
|
||||
|
||||
function getSubscriptions($offset=0, $limit=null)
|
||||
function getSubscribed($offset=0, $limit=null)
|
||||
{
|
||||
$subs = Subscription::bySubscriber($this->id,
|
||||
$offset,
|
||||
$limit);
|
||||
|
||||
$profiles = array();
|
||||
|
||||
while ($subs->fetch()) {
|
||||
$profile = Profile::getKV($subs->subscribed);
|
||||
if ($profile) {
|
||||
$profiles[] = $profile;
|
||||
}
|
||||
}
|
||||
|
||||
return new ArrayWrapper($profiles);
|
||||
$subs = Subscription::getSubscribedIDs($this->id, $offset, $limit);
|
||||
$profiles = Profile::listFind('id', $subs);
|
||||
return $profiles;
|
||||
}
|
||||
|
||||
function getSubscribers($offset=0, $limit=null)
|
||||
{
|
||||
$subs = Subscription::bySubscribed($this->id,
|
||||
$offset,
|
||||
$limit);
|
||||
|
||||
$profiles = array();
|
||||
|
||||
while ($subs->fetch()) {
|
||||
$profile = Profile::getKV($subs->subscriber);
|
||||
if ($profile) {
|
||||
$profiles[] = $profile;
|
||||
}
|
||||
}
|
||||
|
||||
return new ArrayWrapper($profiles);
|
||||
$subs = Subscription::getSubscriberIDs($this->id, $offset, $limit);
|
||||
$profiles = Profile::listFind('id', $subs);
|
||||
return $profiles;
|
||||
}
|
||||
|
||||
function getTaggedSubscribers($tag)
|
||||
|
@ -287,117 +287,100 @@ class Subscription extends Managed_DataObject
|
||||
* chronological order. Has offset & limit to make paging
|
||||
* easy.
|
||||
*
|
||||
* @param integer $subscriberId Profile ID of the subscriber
|
||||
* @param integer $profile_id ID of the subscriber profile
|
||||
* @param integer $offset Offset from latest
|
||||
* @param integer $limit Maximum number to fetch
|
||||
*
|
||||
* @return Subscription stream of subscriptions; use fetch() to iterate
|
||||
*/
|
||||
static function bySubscriber($subscriberId,
|
||||
$offset = 0,
|
||||
$limit = PROFILES_PER_PAGE)
|
||||
public static function bySubscriber($profile_id, $offset = 0, $limit = PROFILES_PER_PAGE)
|
||||
{
|
||||
if ($offset + $limit > self::CACHE_WINDOW) {
|
||||
return new ArrayWrapper(self::realBySubscriber($subscriberId,
|
||||
$offset,
|
||||
$limit));
|
||||
} else {
|
||||
$key = 'subscription:by-subscriber:'.$subscriberId;
|
||||
$window = self::cacheGet($key);
|
||||
if ($window === false) {
|
||||
$window = self::realBySubscriber($subscriberId,
|
||||
0,
|
||||
self::CACHE_WINDOW);
|
||||
self::cacheSet($key, $window);
|
||||
}
|
||||
return new ArrayWrapper(array_slice($window,
|
||||
$offset,
|
||||
$limit));
|
||||
}
|
||||
}
|
||||
|
||||
private static function realBySubscriber($subscriberId,
|
||||
$offset,
|
||||
$limit)
|
||||
{
|
||||
$sub = new Subscription();
|
||||
|
||||
$sub->subscriber = $subscriberId;
|
||||
|
||||
$sub->whereAdd('subscribed != ' . $subscriberId);
|
||||
|
||||
$sub->orderBy('created DESC');
|
||||
$sub->limit($offset, $limit);
|
||||
|
||||
$sub->find();
|
||||
|
||||
$subs = array();
|
||||
|
||||
while ($sub->fetch()) {
|
||||
$subs[] = clone($sub);
|
||||
}
|
||||
|
||||
return $subs;
|
||||
// "by subscriber" means it is the list of subscribed users we want
|
||||
$ids = self::getSubscribedIDs($profile_id, $offset, $limit);
|
||||
return Subscription::listFind('subscribed', $ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stream of subscriptions with the same subscribed profile
|
||||
* Stream of subscriptions with the same subscriber
|
||||
*
|
||||
* Useful for showing pages that list subscribers in reverse
|
||||
* Useful for showing pages that list subscriptions in reverse
|
||||
* chronological order. Has offset & limit to make paging
|
||||
* easy.
|
||||
*
|
||||
* @param integer $subscribedId Profile ID of the subscribed
|
||||
* @param integer $profile_id ID of the subscribed profile
|
||||
* @param integer $offset Offset from latest
|
||||
* @param integer $limit Maximum number to fetch
|
||||
*
|
||||
* @return Subscription stream of subscriptions; use fetch() to iterate
|
||||
*/
|
||||
static function bySubscribed($subscribedId,
|
||||
$offset = 0,
|
||||
$limit = PROFILES_PER_PAGE)
|
||||
public static function bySubscribed($profile_id, $offset = 0, $limit = PROFILES_PER_PAGE)
|
||||
{
|
||||
if ($offset + $limit > self::CACHE_WINDOW) {
|
||||
return new ArrayWrapper(self::realBySubscribed($subscribedId,
|
||||
$offset,
|
||||
$limit));
|
||||
} else {
|
||||
$key = 'subscription:by-subscribed:'.$subscribedId;
|
||||
$window = self::cacheGet($key);
|
||||
if ($window === false) {
|
||||
$window = self::realBySubscribed($subscribedId,
|
||||
0,
|
||||
self::CACHE_WINDOW);
|
||||
self::cacheSet($key, $window);
|
||||
}
|
||||
return new ArrayWrapper(array_slice($window,
|
||||
$offset,
|
||||
$limit));
|
||||
}
|
||||
// "by subscribed" means it is the list of subscribers we want
|
||||
$ids = self::getSubscriberIDs($profile_id, $offset, $limit);
|
||||
return Subscription::listFind('subscriber', $ids);
|
||||
}
|
||||
|
||||
private static function realBySubscribed($subscribedId,
|
||||
$offset,
|
||||
$limit)
|
||||
|
||||
// The following are helper functions to the subscription lists,
|
||||
// notably the public ones get used in places such as Profile
|
||||
public static function getSubscribedIDs($profile_id, $offset, $limit) {
|
||||
return self::getSubscriptionIDs('subscribed', $profile_id, $offset, $limit);
|
||||
}
|
||||
|
||||
public static function getSubscriberIDs($profile_id, $offset, $limit) {
|
||||
return self::getSubscriptionIDs('subscriber', $profile_id, $offset, $limit);
|
||||
}
|
||||
|
||||
private static function getSubscriptionIDs($get_type, $profile_id, $offset, $limit)
|
||||
{
|
||||
switch ($get_type) {
|
||||
case 'subscribed':
|
||||
$by_type = 'subscriber';
|
||||
break;
|
||||
case 'subscriber':
|
||||
$by_type = 'subscribed';
|
||||
break;
|
||||
default:
|
||||
throw new Exception('Bad type argument to getSubscriptionIDs');
|
||||
}
|
||||
|
||||
$cacheKey = 'subscription:by-'.$by_type.':'.$profile_id;
|
||||
|
||||
$queryoffset = $offset;
|
||||
$querylimit = $limit;
|
||||
|
||||
if ($offset + $limit <= self::CACHE_WINDOW) {
|
||||
// Oh, it seems it should be cached
|
||||
$ids = self::cacheGet($cacheKey);
|
||||
if (is_array($ids)) {
|
||||
return array_slice($ids, $offset, $limit);
|
||||
}
|
||||
// Being here indicates we didn't find anything cached
|
||||
// so we'll have to fill it up simultaneously
|
||||
$queryoffset = 0;
|
||||
$querylimit = self::CACHE_WINDOW;
|
||||
}
|
||||
|
||||
$sub = new Subscription();
|
||||
|
||||
$sub->subscribed = $subscribedId;
|
||||
|
||||
$sub->whereAdd('subscriber != ' . $subscribedId);
|
||||
|
||||
$sub->$by_type = $profile_id;
|
||||
$sub->selectAdd($get_type);
|
||||
$sub->whereAdd("{$get_type} != {$profile_id}");
|
||||
$sub->orderBy('created DESC');
|
||||
$sub->limit($offset, $limit);
|
||||
$sub->limit($queryoffset, $querylimit);
|
||||
|
||||
$sub->find();
|
||||
|
||||
$subs = array();
|
||||
|
||||
while ($sub->fetch()) {
|
||||
$subs[] = clone($sub);
|
||||
if (!$sub->find()) {
|
||||
return array();
|
||||
}
|
||||
|
||||
return $subs;
|
||||
$ids = $sub->fetchAll($get_type);
|
||||
|
||||
// If we're simultaneously filling up cache, remember to slice
|
||||
if ($offset === 0 && $querylimit === self::CACHE_WINDOW) {
|
||||
self::cacheSet($cacheKey, $ids);
|
||||
return array_slice($ids, $offset, $limit);
|
||||
}
|
||||
|
||||
return $ids;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -701,10 +701,10 @@ class User extends Managed_DataObject
|
||||
return $profile->leaveGroup($group);
|
||||
}
|
||||
|
||||
function getSubscriptions($offset=0, $limit=null)
|
||||
function getSubscribed($offset=0, $limit=null)
|
||||
{
|
||||
$profile = $this->getProfile();
|
||||
return $profile->getSubscriptions($offset, $limit);
|
||||
return $profile->getSubscribed($offset, $limit);
|
||||
}
|
||||
|
||||
function getSubscribers($offset=0, $limit=null)
|
||||
|
@ -931,7 +931,7 @@ class SubscriptionsCommand extends Command
|
||||
{
|
||||
function handle($channel)
|
||||
{
|
||||
$profile = $this->user->getSubscriptions(0);
|
||||
$profile = $this->user->getSubscribed(0);
|
||||
$nicknames=array();
|
||||
while ($profile->fetch()) {
|
||||
$nicknames[]=$profile->nickname;
|
||||
|
@ -125,7 +125,7 @@ class ProfileAction extends Action
|
||||
|
||||
function showSubscriptions()
|
||||
{
|
||||
$profile = $this->profile->getSubscriptions(0, PROFILES_PER_MINILIST + 1);
|
||||
$profile = $this->profile->getSubscribed(0, PROFILES_PER_MINILIST + 1);
|
||||
|
||||
$this->elementStart('div', array('id' => 'entity_subscriptions',
|
||||
'class' => 'section'));
|
||||
|
@ -81,7 +81,7 @@ function updateOStatus($user)
|
||||
|
||||
$up = $user->getProfile();
|
||||
|
||||
$sp = $user->getSubscriptions();
|
||||
$sp = $up->getSubscribed();
|
||||
|
||||
$rps = array();
|
||||
|
||||
|
@ -118,7 +118,7 @@ function newNotice($i, $tagmax)
|
||||
$is_directed = rand(0, 4);
|
||||
|
||||
if ($is_directed == 0) {
|
||||
$subs = $user->getSubscriptions(0, 100)->fetchAll();
|
||||
$subs = $user->getSubscribed(0, 100)->fetchAll();
|
||||
if (count($subs) > 0) {
|
||||
$seen = array();
|
||||
$f = rand(0, 9);
|
||||
|
Loading…
Reference in New Issue
Block a user