From c19964094baeb777a1bfd333a94bcb843f525274 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Sun, 3 Jan 2016 20:27:53 +0100 Subject: [PATCH] Pending subscription requests now work as they should A slight layout issue with the buttons still persists --- actions/subqueue.php | 56 ++++++++++------------------------------ classes/Profile.php | 29 +++++++-------------- lib/profilelist.php | 6 ++--- lib/profilelistitem.php | 2 +- lib/subqueuelist.php | 11 ++++++++ lib/subqueuelistitem.php | 24 +++++++++++++++++ 6 files changed, 62 insertions(+), 66 deletions(-) create mode 100644 lib/subqueuelist.php create mode 100644 lib/subqueuelistitem.php diff --git a/actions/subqueue.php b/actions/subqueue.php index ba47345600..e4dcb02513 100644 --- a/actions/subqueue.php +++ b/actions/subqueue.php @@ -27,11 +27,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once(INSTALLDIR.'/lib/profilelist.php'); +if (!defined('GNUSOCIAL')) { exit(1); } /** * List of group members @@ -50,9 +46,9 @@ class SubqueueAction extends GalleryAction { parent::prepare($args); - if ($this->scoped->id != $this->target->id) { + if (!$this->target->sameAs($this->scoped)) { // TRANS: Client error displayed when trying to approve group applicants without being a group administrator. - $this->clientError(_('You may only approve your own pending subscriptions.')); + throw new ClientException(_('You may only approve your own pending subscriptions.')); } return true; } @@ -88,47 +84,21 @@ class SubqueueAction extends GalleryAction $cnt = 0; - $members = $this->target->getRequests($offset, $limit); - - if ($members) { - // @fixme change! - $member_list = new SubQueueList($members, $this); - $cnt = $member_list->show(); + try { + $subqueue = $this->target->getRequests($offset, $limit); + } catch (NoResultException $e) { + // TRANS: If no pending subscription requests are found + $this->element('div', null, _m('You have no pending subscription requests.')); + return; } - $members->free(); + $list = new SubQueueList($subqueue, $this); + $cnt = $list->show(); + + $subqueue->free(); $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE, $this->page, 'subqueue', array('nickname' => $this->target->getNickname())); // urgh } } - -class SubQueueList extends ProfileList -{ - function newListItem($profile) - { - return new SubQueueListItem($profile, $this->action); - } -} - -class SubQueueListItem extends ProfileListItem -{ - function showActions() - { - $this->startActions(); - if (Event::handle('StartProfileListItemActionElements', array($this))) { - $this->showApproveButtons(); - Event::handle('EndProfileListItemActionElements', array($this)); - } - $this->endActions(); - } - - function showApproveButtons() - { - $this->out->elementStart('li', 'entity_approval'); - $form = new ApproveSubForm($this->out, $this->profile); - $form->show(); - $this->out->elementEnd('li'); - } -} diff --git a/classes/Profile.php b/classes/Profile.php index f4452391c2..619f5e3c7c 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -682,25 +682,16 @@ class Profile extends Managed_DataObject */ function getRequests($offset=0, $limit=null) { - $qry = - 'SELECT profile.* ' . - 'FROM profile JOIN subscription_queue '. - 'ON profile.id = subscription_queue.subscriber ' . - 'WHERE subscription_queue.subscribed = %d ' . - 'ORDER BY subscription_queue.created DESC '; - - if ($limit != null) { - if (common_config('db','type') == 'pgsql') { - $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; - } else { - $qry .= ' LIMIT ' . $offset . ', ' . $limit; - } - } - - $members = new Profile(); - - $members->query(sprintf($qry, $this->id)); - return $members; + // FIXME: mysql only + $subqueue = new Profile(); + $subqueue->joinAdd(array('id', 'subscription_queue:subscriber')); + $subqueue->whereAdd(sprintf('subscription_queue.subscribed = %d', $this->getID())); + $subqueue->limit($offset, $limit); + $subqueue->orderBy('subscription_queue.created', 'DESC'); + if (!$subqueue->find()) { + throw new NoResultException($subqueue); + } + return $subqueue; } function subscriptionCount() diff --git a/lib/profilelist.php b/lib/profilelist.php index 177560cdf5..9f735b1b88 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -46,7 +46,7 @@ class ProfileList extends Widget /** Action object using us. */ var $action = null; - function __construct($profile, $action=null) + function __construct($profile, HTMLOutputter $action=null) { parent::__construct($action); @@ -93,9 +93,9 @@ class ProfileList extends Widget return $cnt; } - function newListItem($profile) + function newListItem(Profile $target) { - return new ProfileListItem($profile, $this->action); + return new ProfileListItem($target, $this->action); } function maxProfiles() diff --git a/lib/profilelistitem.php b/lib/profilelistitem.php index 6fe7b99c7b..e0e2838f58 100644 --- a/lib/profilelistitem.php +++ b/lib/profilelistitem.php @@ -72,7 +72,7 @@ class ProfileListItem extends Widget function startItem() { $this->out->elementStart('li', array('class' => 'profile', - 'id' => 'profile-' . $this->profile->id)); + 'id' => 'profile-' . $this->getTarget()->getID())); } function showProfile() diff --git a/lib/subqueuelist.php b/lib/subqueuelist.php new file mode 100644 index 0000000000..e4f77423df --- /dev/null +++ b/lib/subqueuelist.php @@ -0,0 +1,11 @@ +action); + } +} diff --git a/lib/subqueuelistitem.php b/lib/subqueuelistitem.php new file mode 100644 index 0000000000..f42624170c --- /dev/null +++ b/lib/subqueuelistitem.php @@ -0,0 +1,24 @@ +startActions(); + if (Event::handle('StartProfileListItemActionElements', array($this))) { + $this->showApproveButtons(); + Event::handle('EndProfileListItemActionElements', array($this)); + } + $this->endActions(); + } + + public function showApproveButtons() + { + $this->out->elementStart('li', 'entity_approval'); + $form = new ApproveSubForm($this->out, $this->profile); + $form->show(); + $this->out->elementEnd('li'); + } +} -- 2.39.2