From 785fb0a08fe74f746367d937be527b7f3f76fb8d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 21 Jan 2009 12:19:13 -0500 Subject: [PATCH] A widget for showing a list of groups --- lib/grouplist.php | 186 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 lib/grouplist.php diff --git a/lib/grouplist.php b/lib/grouplist.php new file mode 100644 index 0000000000..dd10a27535 --- /dev/null +++ b/lib/grouplist.php @@ -0,0 +1,186 @@ +. + * + * @category Public + * @package Laconica + * @author Evan Prodromou + * @copyright 2008-2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/widget.php'; + +define('groupS_PER_PAGE', 20); + +/** + * Widget to show a list of groups + * + * @category Public + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class GroupList extends Widget +{ + /** Current group, group query. */ + var $group = null; + /** Owner of this list */ + var $owner = null; + /** Action object using us. */ + var $action = null; + + function __construct($group, $owner=null, $action=null) + { + parent::__construct($action); + + $this->group = $group; + $this->owner = $owner; + $this->action = $action; + } + + function show() + { + $this->out->elementStart('ul', 'groups'); + + $cnt = 0; + + while ($this->group->fetch()) { + $cnt++; + if($cnt > groupS_PER_PAGE) { + break; + } + $this->showgroup(); + } + + $this->out->elementEnd('ul'); + + return $cnt; + } + + function showGroup() + { + $this->out->elementStart('li', array('class' => 'group', + 'id' => 'group-' . $this->group->id)); + + $user = common_current_user(); + + $this->out->elementStart('div', array('id' => 'group_group', + 'class' => 'vcard')); + + $logo = ($this->group->stream_logo) ? + $this->group->stream_logo : User_group::defaultLogo(AVATAR_STREAM_SIZE); + + $this->out->elementStart('a', array('href' => $this->group->homeUrl(), + 'class' => 'url')); + $this->out->element('img', array('src' => $logo, + 'class' => 'photo avatar', + 'width' => AVATAR_STREAM_SIZE, + 'height' => AVATAR_STREAM_SIZE, + 'alt' => + ($this->group->fullname) ? $this->group->fullname : + $this->group->nickname)); + $hasFN = ($this->group->fullname) ? 'nickname' : 'fn nickname'; + $this->out->elementStart('span', $hasFN); + $this->out->raw($this->highlight($this->group->nickname)); + $this->out->elementEnd('span'); + $this->out->elementEnd('a'); + + if ($this->group->fullname) { + $this->out->elementStart('dl', 'group_fn'); + $this->out->element('dt', null, 'Full name'); + $this->out->elementStart('dd'); + $this->out->elementStart('span', 'fn'); + $this->out->raw($this->highlight($this->group->fullname)); + $this->out->elementEnd('span'); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); + } + if ($this->group->location) { + $this->out->elementStart('dl', 'group_location'); + $this->out->element('dt', null, _('Location')); + $this->out->elementStart('dd', 'location'); + $this->out->raw($this->highlight($this->group->location)); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); + } + if ($this->group->homepage) { + $this->out->elementStart('dl', 'group_url'); + $this->out->element('dt', null, _('URL')); + $this->out->elementStart('dd'); + $this->out->elementStart('a', array('href' => $this->group->homepage, + 'class' => 'url')); + $this->out->raw($this->highlight($this->group->homepage)); + $this->out->elementEnd('a'); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); + } + if ($this->group->description) { + $this->out->elementStart('dl', 'group_note'); + $this->out->element('dt', null, _('Note')); + $this->out->elementStart('dd', 'note'); + $this->out->raw($this->highlight($this->group->description)); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); + } + + # If we're on a list with an owner (subscriptions or subscribers)... + + if ($user && $user->id == $this->owner->id) { + $this->showOwnerControls(); + } + + $this->out->elementEnd('div'); + + if ($user) { + # XXX: special-case for user looking at own + # subscriptions page + if ($user->isMember($this->group)) { + $lf = new LeaveForm($this->out, $this->group); + $lf->show(); + } else { + $jf = new JoinForm(); + $jf->show(); + } + } + + $this->out->elementEnd('li'); + } + + /* Override this in subclasses. */ + + function showOwnerControls() + { + return; + } + + function highlight($text) + { + return htmlspecialchars($text); + } +}