Pending subscription requests now work as they should

A slight layout issue with the buttons still persists
This commit is contained in:
Mikael Nordfeldth 2016-01-03 20:27:53 +01:00
parent b374e5f08b
commit c19964094b
6 changed files with 61 additions and 65 deletions

View File

@ -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');
}
}

View File

@ -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;
// 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);
}
}
$members = new Profile();
$members->query(sprintf($qry, $this->id));
return $members;
return $subqueue;
}
function subscriptionCount()

View File

@ -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()

View File

@ -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()

11
lib/subqueuelist.php Normal file
View File

@ -0,0 +1,11 @@
<?php
if (!defined('GNUSOCIAL')) { exit(1); }
class SubQueueList extends ProfileList
{
public function newListItem(Profile $target)
{
return new SubQueueListItem($target, $this->action);
}
}

24
lib/subqueuelistitem.php Normal file
View File

@ -0,0 +1,24 @@
<?php
if (!defined('GNUSOCIAL')) { exit(1); }
class SubQueueListItem extends ProfileListItem
{
public function showActions()
{
$this->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');
}
}