summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/subscribers.php6
-rw-r--r--actions/subscriptions.php6
-rw-r--r--classes/User.php54
-rw-r--r--lib/galleryaction.php7
-rw-r--r--lib/profilelist.php4
5 files changed, 71 insertions, 6 deletions
diff --git a/actions/subscribers.php b/actions/subscribers.php
index 408829b54..be9df2b12 100644
--- a/actions/subscribers.php
+++ b/actions/subscribers.php
@@ -75,7 +75,11 @@ class SubscribersAction extends GalleryAction
$offset = ($this->page-1) * PROFILES_PER_PAGE;
$limit = PROFILES_PER_PAGE + 1;
- $subscribers = $this->user->getSubscribers($offset, $limit);
+ if ($this->tag) {
+ $subscribers = $this->user->getTaggedSubscribers($this->tag, $offset, $limit);
+ } else {
+ $subscribers = $this->user->getSubscribers($offset, $limit);
+ }
if ($subscribers) {
$subscribers_list = new SubscribersList($subscribers, $this->user, $this);
diff --git a/actions/subscriptions.php b/actions/subscriptions.php
index bcc557891..d7ba0d624 100644
--- a/actions/subscriptions.php
+++ b/actions/subscriptions.php
@@ -84,7 +84,11 @@ class SubscriptionsAction extends GalleryAction
$offset = ($this->page-1) * PROFILES_PER_PAGE;
$limit = PROFILES_PER_PAGE + 1;
- $subscriptions = $this->user->getSubscriptions($offset, $limit);
+ if ($this->tag) {
+ $subscriptions = $this->user->getTaggedSubscriptions($this->tag, $offset, $limit);
+ } else {
+ $subscriptions = $this->user->getSubscriptions($offset, $limit);
+ }
if ($subscriptions) {
$subscriptions_list = new SubscriptionsList($subscriptions, $this->user, $this);
diff --git a/classes/User.php b/classes/User.php
index 5dadd6b44..5f4fb9b6f 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -575,4 +575,58 @@ class User extends Memcached_DataObject
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;
+ }
}
diff --git a/lib/galleryaction.php b/lib/galleryaction.php
index a277762a6..25a5e3fd5 100644
--- a/lib/galleryaction.php
+++ b/lib/galleryaction.php
@@ -32,6 +32,7 @@ class GalleryAction extends Action
var $profile = null;
var $user = null;
var $page = null;
+ var $tag = null;
function prepare($args)
{
@@ -69,6 +70,8 @@ class GalleryAction extends Action
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+ $this->tag = $this->trimmed('tag');
+
return true;
}
@@ -84,7 +87,7 @@ class GalleryAction extends Action
# Post from the tag dropdown; redirect to a GET
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
- common_redirect($this->self_url(), 307);
+ common_redirect($this->selfUrl(), 307);
return;
}
@@ -124,7 +127,7 @@ class GalleryAction extends Action
array('href' =>
common_local_url($this->trimmed('action'),
array('nickname' =>
- $profile->nickname))),
+ $this->user->nickname))),
_('All'));
$this->elementEnd('li');
$this->elementStart('li', array('id'=>'filter_tags_item'));
diff --git a/lib/profilelist.php b/lib/profilelist.php
index a510c518c..499d74f7b 100644
--- a/lib/profilelist.php
+++ b/lib/profilelist.php
@@ -169,9 +169,9 @@ class ProfileList extends Widget
$this->out->elementStart('ul', 'tags xoxo');
foreach ($tags as $tag) {
$this->out->elementStart('li');
- $this->element('span', 'mark_hash', '#');
+ $this->out->element('span', 'mark_hash', '#');
$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,
'tag' => $tag))),
$tag);