Debug some of the subscriptions+tags problems

This commit is contained in:
Evan Prodromou 2009-01-22 22:38:10 +00:00
parent 04d498784f
commit d6879bfe0c
5 changed files with 71 additions and 6 deletions

View File

@ -75,7 +75,11 @@ class SubscribersAction extends GalleryAction
$offset = ($this->page-1) * PROFILES_PER_PAGE; $offset = ($this->page-1) * PROFILES_PER_PAGE;
$limit = PROFILES_PER_PAGE + 1; $limit = PROFILES_PER_PAGE + 1;
if ($this->tag) {
$subscribers = $this->user->getTaggedSubscribers($this->tag, $offset, $limit);
} else {
$subscribers = $this->user->getSubscribers($offset, $limit); $subscribers = $this->user->getSubscribers($offset, $limit);
}
if ($subscribers) { if ($subscribers) {
$subscribers_list = new SubscribersList($subscribers, $this->user, $this); $subscribers_list = new SubscribersList($subscribers, $this->user, $this);

View File

@ -84,7 +84,11 @@ class SubscriptionsAction extends GalleryAction
$offset = ($this->page-1) * PROFILES_PER_PAGE; $offset = ($this->page-1) * PROFILES_PER_PAGE;
$limit = PROFILES_PER_PAGE + 1; $limit = PROFILES_PER_PAGE + 1;
if ($this->tag) {
$subscriptions = $this->user->getTaggedSubscriptions($this->tag, $offset, $limit);
} else {
$subscriptions = $this->user->getSubscriptions($offset, $limit); $subscriptions = $this->user->getSubscriptions($offset, $limit);
}
if ($subscriptions) { if ($subscriptions) {
$subscriptions_list = new SubscriptionsList($subscriptions, $this->user, $this); $subscriptions_list = new SubscriptionsList($subscriptions, $this->user, $this);

View File

@ -575,4 +575,58 @@ class User extends Memcached_DataObject
return $profile; return $profile;
} }
function getTaggedSubscribers($tag, $offset=0, $limit=null)
{
$qry =
'SELECT profile.* ' .
'FROM profile JOIN subscription ' .
'ON profile.id = subscription.subscriber ' .
'JOIN profile_tag ON (profile_tag.tagged = subscription.subscriber ' .
'AND profile_tag.tagger = subscription.subscribed) ' .
'WHERE subscription.subscribed = %d ' .
'AND profile_tag.tag = "%s" ' .
'AND subscription.subscribed != subscription.subscriber ' .
'ORDER BY subscription.created DESC ';
if ($offset) {
if (common_config('db','type') == 'pgsql') {
$qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
} else {
$qry .= ' LIMIT ' . $offset . ', ' . $limit;
}
}
$profile = new Profile();
$cnt = $profile->query(sprintf($qry, $this->id, $tag));
return $profile;
}
function getTaggedSubscriptions($tag, $offset=0, $limit=null)
{
$qry =
'SELECT profile.* ' .
'FROM profile JOIN subscription ' .
'ON profile.id = subscription.subscribed ' .
'JOIN profile_tag on (profile_tag.tagged = subscription.subscribed ' .
'AND profile_tag.tagger = subscription.subscriber) ' .
'WHERE subscription.subscriber = %d ' .
'AND profile_tag.tag = "%s" ' .
'AND subscription.subscribed != subscription.subscriber ' .
'ORDER BY subscription.created DESC ';
if (common_config('db','type') == 'pgsql') {
$qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
} else {
$qry .= ' LIMIT ' . $offset . ', ' . $limit;
}
$profile = new Profile();
$profile->query(sprintf($qry, $this->id, $tag));
return $profile;
}
} }

View File

@ -32,6 +32,7 @@ class GalleryAction extends Action
var $profile = null; var $profile = null;
var $user = null; var $user = null;
var $page = null; var $page = null;
var $tag = null;
function prepare($args) function prepare($args)
{ {
@ -69,6 +70,8 @@ class GalleryAction extends Action
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
$this->tag = $this->trimmed('tag');
return true; return true;
} }
@ -84,7 +87,7 @@ class GalleryAction extends Action
# Post from the tag dropdown; redirect to a GET # Post from the tag dropdown; redirect to a GET
if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($_SERVER['REQUEST_METHOD'] == 'POST') {
common_redirect($this->self_url(), 307); common_redirect($this->selfUrl(), 307);
return; return;
} }
@ -124,7 +127,7 @@ class GalleryAction extends Action
array('href' => array('href' =>
common_local_url($this->trimmed('action'), common_local_url($this->trimmed('action'),
array('nickname' => array('nickname' =>
$profile->nickname))), $this->user->nickname))),
_('All')); _('All'));
$this->elementEnd('li'); $this->elementEnd('li');
$this->elementStart('li', array('id'=>'filter_tags_item')); $this->elementStart('li', array('id'=>'filter_tags_item'));

View File

@ -169,9 +169,9 @@ class ProfileList extends Widget
$this->out->elementStart('ul', 'tags xoxo'); $this->out->elementStart('ul', 'tags xoxo');
foreach ($tags as $tag) { foreach ($tags as $tag) {
$this->out->elementStart('li'); $this->out->elementStart('li');
$this->element('span', 'mark_hash', '#'); $this->out->element('span', 'mark_hash', '#');
$this->out->element('a', array('rel' => 'tag', $this->out->element('a', array('rel' => 'tag',
'href' => common_local_url($this->action, 'href' => common_local_url($this->action->trimmed('action'),
array('nickname' => $this->owner->nickname, array('nickname' => $this->owner->nickname,
'tag' => $tag))), 'tag' => $tag))),
$tag); $tag);