. * * @category Public * @package StatusNet * @author Zach Copley * @copyright 2011 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ if (!defined('STATUSNET')) { exit(1); } require_once INSTALLDIR . '/lib/subscriptionlist.php'; /** * Widget to show a sortable list of subscriptions * * @category Public * @package StatusNet * @author Zach Copley * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ class SortableGroupList extends SortableSubscriptionList { /** Owner of this list */ var $owner = null; function __construct($profile, $owner=null, $action=null) { parent::__construct($profile, $owner, $action); $this->owner = $owner; } function startList() { $this->out->elementStart('table', array('class' => 'profile_list xoxo')); $this->out->elementStart('thead'); $this->out->elementStart('tr'); $tableHeaders = array( 'nickname' => _m('Nickname'), 'created' => _m('Created') ); foreach ($tableHeaders as $id => $label) { $attrs = array('id' => $id); $current = (!empty($this->action->sort) && $this->action->sort == $id); if ($current || empty($this->action->sort) && $id == 'nickname') { $attrs['class'] = 'current'; } if ($current && $this->action->reverse) { $attrs['class'] .= ' reverse'; $attrs['class'] = trim($attrs['class']); } $this->out->elementStart('th', $attrs); $linkAttrs = array(); $params = array('sort' => $id); if (!empty($this->action->q)) { $params['q'] = $this->action->q; } if ($current && !$this->action->reverse) { $params['reverse'] = 'true'; } $args = array(); $filter = $this->action->arg('filter'); if (!empty($filter)) { $args['filter'] = $filter; } $linkAttrs['href'] = common_local_url( $this->action->arg('action'), $args, $params ); $this->out->element('a', $linkAttrs, $label); $this->out->elementEnd('th'); } $this->out->element('th', array('id' => 'Members'), _m('Members')); $this->out->element('th', array('id' => 'controls'), null); $this->out->elementEnd('tr'); $this->out->elementEnd('thead'); $this->out->elementStart('tbody'); } function newListItem($profile, $odd) { return new SortableGroupListItem($profile, $this->owner, $this->action, $odd); } } class SortableGroupListItem extends SortableSubscriptionListItem { /** Owner of this list */ var $owner = null; function __construct($profile, $owner, $action, $alt) { parent::__construct($profile, $owner, $action, $alt); $this->alt = $alt; // is this row alternate? $this->owner = $owner; } function showHomepage() { if (!empty($this->profile->homepage)) { $this->out->text(' '); $aAttrs = $this->homepageAttributes(); $this->out->elementStart('a', $aAttrs); $this->out->raw($this->highlight($this->profile->homeUrl())); $this->out->elementEnd('a'); } } function showAvatar() { $logo = ($this->profile->stream_logo) ? $this->profile->stream_logo : User_group::defaultLogo(AVATAR_STREAM_SIZE); $this->out->elementStart( 'a', array( 'href' => $this->profile->homeUrl(), 'class' => 'url entry-title', 'rel' => 'contact group' ) ); $this->out->element( 'img', array( 'src' => $logo, 'class' => 'photo avatar', 'width' => AVATAR_STREAM_SIZE, 'height' => AVATAR_STREAM_SIZE, 'alt' => ($this->profile->fullname) ? $this->profile->fullname : $this->profile->nickname ) ); $this->out->text(' '); $hasFN = ($this->profile->fullname) ? 'nickname' : 'fn org nickname'; $this->out->elementStart('span', $hasFN); $this->out->raw($this->highlight($this->profile->nickname)); $this->out->elementEnd('span'); $this->out->elementEnd('a'); } function show() { if (Event::handle('StartProfileListItem', array($this))) { $this->startItem(); if (Event::handle('StartProfileListItemProfile', array($this))) { $this->showProfile(); Event::handle('EndProfileListItemProfile', array($this)); } // XXX Add events? $this->showCreatedDate(); $this->showMemberCount(); if (Event::handle('StartProfileListItemActions', array($this))) { $this->showActions(); Event::handle('EndProfileListItemActions', array($this)); } $this->endItem(); Event::handle('EndProfileListItem', array($this)); } } function showActions() { $this->startActions(); if (Event::handle('StartProfileListItemActionElements', array($this))) { $this->showJoinButton(); Event::handle('EndProfileListItemActionElements', array($this)); } $this->endActions(); } function showJoinButton() { $user = $this->owner; if ($user) { $this->out->elementStart('li', 'entity_subscribe'); // XXX: special-case for user looking at own // subscriptions page if ($user->isMember($this->profile)) { $lf = new LeaveForm($this->out, $this->profile); $lf->show(); } else if (!Group_block::isBlocked($this->profile, $user->getProfile())) { $jf = new JoinForm($this->out, $this->profile); $jf->show(); } $this->out->elementEnd('li'); } } function showMemberCount() { $this->out->elementStart('td', 'entry_member_count'); $this->out->raw($this->profile->getMemberCount()); $this->out->elementEnd('td'); } function showCreatedDate() { $this->out->elementStart('td', 'entry_created'); $this->out->raw(date('j M Y', strtotime($this->profile->created))); $this->out->elementEnd('td'); } function showAdmins() { $this->out->elementStart('td', 'entry_admins'); // @todo $this->out->raw('gargargar'); $this->out->elementEnd('td'); } /** * Only show the tags if we're logged in */ function showTags() { if (common_logged_in()) { parent::showTags(); } } }