From b8887ef4f668ff3e7f7217f47f998a8b6a04b0b4 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 Jan 2009 17:06:06 +0100 Subject: reformat profilelist code --- lib/galleryaction.php | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 lib/galleryaction.php (limited to 'lib/galleryaction.php') diff --git a/lib/galleryaction.php b/lib/galleryaction.php new file mode 100644 index 000000000..b36f1ea34 --- /dev/null +++ b/lib/galleryaction.php @@ -0,0 +1,168 @@ +. + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/profilelist.php'; + +// 10x8 + +define('AVATARS_PER_PAGE', 80); + +class GalleryAction extends Action +{ + var $profile = null; + var $user = null; + var $page = null; + + function prepare($args) + { + parent::prepare($args); + + // FIXME very similar code below + + $nickname_arg = $this->arg('nickname'); + $nickname = common_canonical_nickname($nickname_arg); + + // Permanent redirect on non-canonical nickname + + if ($nickname_arg != $nickname) { + $args = array('nickname' => $nickname); + if ($this->arg('page') && $this->arg('page') != 1) { + $args['page'] = $this->arg['page']; + } + common_redirect(common_local_url('subscriptions', $args), 301); + return false; + } + + $this->user = User::staticGet('nickname', $nickname); + + if (!$this->user) { + $this->clientError(_('No such user.'), 404); + return false; + } + + $this->profile = $this->user->getProfile(); + + if (!$this->profile) { + $this->serverError(_('User has no profile.')); + return false; + } + + $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; + + return true; + } + + function isReadOnly() + { + return true; + } + + function handle($args) + { + parent::handle($args); + + # Post from the tag dropdown; redirect to a GET + + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + common_redirect($this->self_url(), 307); + return; + } + + $this->showPage(); + } + + function showLocalNav() + { + $nav = new SubGroupNav($this, $this->user); + $nav->show(); + } + + function showContent() + { + $this->showTagsDropdown(); + } + + function showTagsDropdown() + { + $tag = $this->trimmed('tag'); + + $tags = $this->getAllTags(); + + $content = array(); + + foreach ($tags as $t) { + $content[$t] = $t; + } + if ($tags) { + $this->elementStart('dl', array('id'=>'filter_tags')); + $this->element('dt', null, _('Filter tags')); + $this->elementStart('dd'); + $this->elementStart('ul'); + $this->elementStart('li', array('id' => 'filter_tags_all', + 'class' => 'child_1')); + $this->element('a', + array('href' => + common_local_url($this->trimmed('action'), + array('nickname' => + $profile->nickname))), + _('All')); + $this->elementEnd('li'); + $this->elementStart('li', array('id'=>'filter_tags_item')); + $this->elementStart('form', array('name' => 'bytag', + 'id' => 'bytag', + 'method' => 'post')); + $this->dropdown('tag', _('Tag'), $content, + _('Choose a tag to narrow list'), false, $tag); + $this->submit('go', _('Go')); + $this->elementEnd('form'); + $this->elementEnd('li'); + $this->elementEnd('ul'); + $this->elementEnd('dd'); + $this->elementEnd('dl'); + } + } + + // Get list of tags we tagged other users with + + function getTags($lst, $usr) + { + $profile_tag = new Notice_tag(); + $profile_tag->query('SELECT DISTINCT(tag) ' . + 'FROM profile_tag, subscription ' . + 'WHERE tagger = ' . $profile->id . ' ' . + 'AND ' . $usr . ' = ' . $profile->id . ' ' . + 'AND ' . $lst . ' = tagged ' . + 'AND tagger != tagged'); + $tags = array(); + while ($profile_tag->fetch()) { + $tags[] = $profile_tag->tag; + } + $profile_tag->free(); + return $tags; + } + + function getAllTags() + { + return array(); + } +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf From 9d913150d4c3b967207837eb07afe890638944ac Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 Jan 2009 17:12:03 +0100 Subject: use profile attr in GalleryAction --- lib/galleryaction.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/galleryaction.php') diff --git a/lib/galleryaction.php b/lib/galleryaction.php index b36f1ea34..a277762a6 100644 --- a/lib/galleryaction.php +++ b/lib/galleryaction.php @@ -149,8 +149,8 @@ class GalleryAction extends Action $profile_tag = new Notice_tag(); $profile_tag->query('SELECT DISTINCT(tag) ' . 'FROM profile_tag, subscription ' . - 'WHERE tagger = ' . $profile->id . ' ' . - 'AND ' . $usr . ' = ' . $profile->id . ' ' . + 'WHERE tagger = ' . $this->profile->id . ' ' . + 'AND ' . $usr . ' = ' . $this->profile->id . ' ' . 'AND ' . $lst . ' = tagged ' . 'AND tagger != tagged'); $tags = array(); -- cgit v1.2.3-54-g00ecf From d6879bfe0c188b06f7b7730bb64af469d5c6e461 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 Jan 2009 22:38:10 +0000 Subject: Debug some of the subscriptions+tags problems --- actions/subscribers.php | 6 +++++- actions/subscriptions.php | 6 +++++- classes/User.php | 54 +++++++++++++++++++++++++++++++++++++++++++++++ lib/galleryaction.php | 7 ++++-- lib/profilelist.php | 4 ++-- 5 files changed, 71 insertions(+), 6 deletions(-) (limited to 'lib/galleryaction.php') 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); -- cgit v1.2.3-54-g00ecf