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
|
$this->tag, $offset, $limit
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$subs = $this->user->getSubscriptions(
|
$subs = $this->user->getSubscribed(
|
||||||
$offset,
|
$offset,
|
||||||
$limit
|
$limit
|
||||||
);
|
);
|
||||||
|
@ -95,7 +95,7 @@ class SubscriptionsAction extends GalleryAction
|
|||||||
if ($this->tag) {
|
if ($this->tag) {
|
||||||
$subscriptions = $this->user->getTaggedSubscriptions($this->tag, $offset, $limit);
|
$subscriptions = $this->user->getTaggedSubscriptions($this->tag, $offset, $limit);
|
||||||
} else {
|
} else {
|
||||||
$subscriptions = $this->user->getSubscriptions($offset, $limit);
|
$subscriptions = $this->user->getSubscribed($offset, $limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($subscriptions) {
|
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,
|
$subs = Subscription::getSubscribedIDs($this->id, $offset, $limit);
|
||||||
$offset,
|
$profiles = Profile::listFind('id', $subs);
|
||||||
$limit);
|
return $profiles;
|
||||||
|
|
||||||
$profiles = array();
|
|
||||||
|
|
||||||
while ($subs->fetch()) {
|
|
||||||
$profile = Profile::getKV($subs->subscribed);
|
|
||||||
if ($profile) {
|
|
||||||
$profiles[] = $profile;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ArrayWrapper($profiles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSubscribers($offset=0, $limit=null)
|
function getSubscribers($offset=0, $limit=null)
|
||||||
{
|
{
|
||||||
$subs = Subscription::bySubscribed($this->id,
|
$subs = Subscription::getSubscriberIDs($this->id, $offset, $limit);
|
||||||
$offset,
|
$profiles = Profile::listFind('id', $subs);
|
||||||
$limit);
|
return $profiles;
|
||||||
|
|
||||||
$profiles = array();
|
|
||||||
|
|
||||||
while ($subs->fetch()) {
|
|
||||||
$profile = Profile::getKV($subs->subscriber);
|
|
||||||
if ($profile) {
|
|
||||||
$profiles[] = $profile;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ArrayWrapper($profiles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTaggedSubscribers($tag)
|
function getTaggedSubscribers($tag)
|
||||||
|
@ -287,117 +287,100 @@ class Subscription extends Managed_DataObject
|
|||||||
* chronological order. Has offset & limit to make paging
|
* chronological order. Has offset & limit to make paging
|
||||||
* easy.
|
* 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 $offset Offset from latest
|
||||||
* @param integer $limit Maximum number to fetch
|
* @param integer $limit Maximum number to fetch
|
||||||
*
|
*
|
||||||
* @return Subscription stream of subscriptions; use fetch() to iterate
|
* @return Subscription stream of subscriptions; use fetch() to iterate
|
||||||
*/
|
*/
|
||||||
static function bySubscriber($subscriberId,
|
public static function bySubscriber($profile_id, $offset = 0, $limit = PROFILES_PER_PAGE)
|
||||||
$offset = 0,
|
|
||||||
$limit = PROFILES_PER_PAGE)
|
|
||||||
{
|
{
|
||||||
if ($offset + $limit > self::CACHE_WINDOW) {
|
// "by subscriber" means it is the list of subscribed users we want
|
||||||
return new ArrayWrapper(self::realBySubscriber($subscriberId,
|
$ids = self::getSubscribedIDs($profile_id, $offset, $limit);
|
||||||
$offset,
|
return Subscription::listFind('subscribed', $ids);
|
||||||
$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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
* chronological order. Has offset & limit to make paging
|
||||||
* easy.
|
* 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 $offset Offset from latest
|
||||||
* @param integer $limit Maximum number to fetch
|
* @param integer $limit Maximum number to fetch
|
||||||
*
|
*
|
||||||
* @return Subscription stream of subscriptions; use fetch() to iterate
|
* @return Subscription stream of subscriptions; use fetch() to iterate
|
||||||
*/
|
*/
|
||||||
static function bySubscribed($subscribedId,
|
public static function bySubscribed($profile_id, $offset = 0, $limit = PROFILES_PER_PAGE)
|
||||||
$offset = 0,
|
|
||||||
$limit = PROFILES_PER_PAGE)
|
|
||||||
{
|
{
|
||||||
if ($offset + $limit > self::CACHE_WINDOW) {
|
// "by subscribed" means it is the list of subscribers we want
|
||||||
return new ArrayWrapper(self::realBySubscribed($subscribedId,
|
$ids = self::getSubscriberIDs($profile_id, $offset, $limit);
|
||||||
$offset,
|
return Subscription::listFind('subscriber', $ids);
|
||||||
$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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function realBySubscribed($subscribedId,
|
|
||||||
$offset,
|
// The following are helper functions to the subscription lists,
|
||||||
$limit)
|
// 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 = new Subscription();
|
||||||
|
$sub->$by_type = $profile_id;
|
||||||
$sub->subscribed = $subscribedId;
|
$sub->selectAdd($get_type);
|
||||||
|
$sub->whereAdd("{$get_type} != {$profile_id}");
|
||||||
$sub->whereAdd('subscriber != ' . $subscribedId);
|
|
||||||
|
|
||||||
$sub->orderBy('created DESC');
|
$sub->orderBy('created DESC');
|
||||||
$sub->limit($offset, $limit);
|
$sub->limit($queryoffset, $querylimit);
|
||||||
|
|
||||||
$sub->find();
|
if (!$sub->find()) {
|
||||||
|
return array();
|
||||||
$subs = array();
|
|
||||||
|
|
||||||
while ($sub->fetch()) {
|
|
||||||
$subs[] = clone($sub);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
return $profile->leaveGroup($group);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSubscriptions($offset=0, $limit=null)
|
function getSubscribed($offset=0, $limit=null)
|
||||||
{
|
{
|
||||||
$profile = $this->getProfile();
|
$profile = $this->getProfile();
|
||||||
return $profile->getSubscriptions($offset, $limit);
|
return $profile->getSubscribed($offset, $limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSubscribers($offset=0, $limit=null)
|
function getSubscribers($offset=0, $limit=null)
|
||||||
|
@ -931,7 +931,7 @@ class SubscriptionsCommand extends Command
|
|||||||
{
|
{
|
||||||
function handle($channel)
|
function handle($channel)
|
||||||
{
|
{
|
||||||
$profile = $this->user->getSubscriptions(0);
|
$profile = $this->user->getSubscribed(0);
|
||||||
$nicknames=array();
|
$nicknames=array();
|
||||||
while ($profile->fetch()) {
|
while ($profile->fetch()) {
|
||||||
$nicknames[]=$profile->nickname;
|
$nicknames[]=$profile->nickname;
|
||||||
|
@ -125,7 +125,7 @@ class ProfileAction extends Action
|
|||||||
|
|
||||||
function showSubscriptions()
|
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',
|
$this->elementStart('div', array('id' => 'entity_subscriptions',
|
||||||
'class' => 'section'));
|
'class' => 'section'));
|
||||||
|
@ -81,7 +81,7 @@ function updateOStatus($user)
|
|||||||
|
|
||||||
$up = $user->getProfile();
|
$up = $user->getProfile();
|
||||||
|
|
||||||
$sp = $user->getSubscriptions();
|
$sp = $up->getSubscribed();
|
||||||
|
|
||||||
$rps = array();
|
$rps = array();
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ function newNotice($i, $tagmax)
|
|||||||
$is_directed = rand(0, 4);
|
$is_directed = rand(0, 4);
|
||||||
|
|
||||||
if ($is_directed == 0) {
|
if ($is_directed == 0) {
|
||||||
$subs = $user->getSubscriptions(0, 100)->fetchAll();
|
$subs = $user->getSubscribed(0, 100)->fetchAll();
|
||||||
if (count($subs) > 0) {
|
if (count($subs) > 0) {
|
||||||
$seen = array();
|
$seen = array();
|
||||||
$f = rand(0, 9);
|
$f = rand(0, 9);
|
||||||
|
Loading…
Reference in New Issue
Block a user