. * * @category Public * @package StatusNet * @author Evan Prodromou * @copyright 2008-2009 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('GNUSOCIAL')) { exit(1); } class ProfileListItem extends Widget { /** Current profile. */ protected $target = null; var $profile = null; /** Action object using us. */ var $action = null; // FIXME: Directory plugin sends a User_group here, but should send a Profile and handle User_group specifics itself? function __construct($target, HTMLOutputter $action, Profile $owner = null) { parent::__construct($action); $this->target = $target; if ($owner !== null) { $this->profile = $owner; } else { $this->profile = $this->target; } $this->action = $action; } function getTarget() { return $this->target; } function show() { if (Event::handle('StartProfileListItem', array($this))) { $this->startItem(); if (Event::handle('StartProfileListItemProfile', array($this))) { $this->showProfile(); Event::handle('EndProfileListItemProfile', array($this)); } if (Event::handle('StartProfileListItemActions', array($this))) { $this->showActions(); Event::handle('EndProfileListItemActions', array($this)); } $this->endItem(); Event::handle('EndProfileListItem', array($this)); } } function startItem() { $this->out->elementStart('li', array('class' => 'profile', 'id' => 'profile-' . $this->getTarget()->getID())); } function showProfile() { $this->startProfile(); if (Event::handle('StartProfileListItemProfileElements', array($this))) { if (Event::handle('StartProfileListItemAvatar', array($this))) { $aAttrs = $this->linkAttributes(); $this->out->elementStart('a', $aAttrs); $this->showAvatar($this->profile); $this->out->elementEnd('a'); Event::handle('EndProfileListItemAvatar', array($this)); } if (Event::handle('StartProfileListItemNickname', array($this))) { $this->showNickname(); Event::handle('EndProfileListItemNickname', array($this)); } if (Event::handle('StartProfileListItemFullName', array($this))) { $this->showFullName(); Event::handle('EndProfileListItemFullName', array($this)); } if (Event::handle('StartProfileListItemLocation', array($this))) { $this->showLocation(); Event::handle('EndProfileListItemLocation', array($this)); } if (Event::handle('StartProfileListItemHomepage', array($this))) { $this->showHomepage(); Event::handle('EndProfileListItemHomepage', array($this)); } if (Event::handle('StartProfileListItemBio', array($this))) { $this->showBio(); Event::handle('EndProfileListItemBio', array($this)); } if (Event::handle('StartProfileListItemTags', array($this))) { $this->showTags(); Event::handle('EndProfileListItemTags', array($this)); } Event::handle('EndProfileListItemProfileElements', array($this)); } $this->endProfile(); } function startProfile() { $this->out->elementStart('div', 'entity_profile h-card'); } function showNickname() { $this->out->element('a', array('href'=>$this->profile->getUrl(), 'class'=>'p-nickname'), $this->profile->getNickname()); } function showFullName() { if (!empty($this->profile->fullname)) { $this->out->element('span', 'p-name', $this->profile->fullname); } } function showLocation() { if (!empty($this->profile->location)) { $this->out->element('span', 'label p-locality', $this->profile->location); } } 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->homepage)); $this->out->elementEnd('a'); } } function showBio() { if (!empty($this->profile->bio)) { $this->out->elementStart('p', 'note'); $this->out->raw($this->highlight($this->profile->bio)); $this->out->elementEnd('p'); } } function showTags() { $user = common_current_user(); if (!empty($user)) { if ($user->id == $this->profile->getID()) { $tags = new SelftagsWidget($this->out, $user, $this->profile); $tags->show(); } else if ($user->getProfile()->canTag($this->profile)) { $tags = new PeopletagsWidget($this->out, $user, $this->profile); $tags->show(); } } } function endProfile() { $this->out->elementEnd('div'); } function showActions() { $this->startActions(); if (Event::handle('StartProfileListItemActionElements', array($this))) { $this->showSubscribeButton(); Event::handle('EndProfileListItemActionElements', array($this)); } $this->endActions(); } function startActions() { $this->out->elementStart('div', 'entity_actions'); $this->out->elementStart('ul'); } function showSubscribeButton() { // Is this a logged-in user, looking at someone else's // profile? $user = common_current_user(); if (!empty($user) && $this->profile->id != $user->id) { $this->out->elementStart('li', 'entity_subscribe'); if ($user->isSubscribed($this->profile)) { $usf = new UnsubscribeForm($this->out, $this->profile); $usf->show(); } else { if (Event::handle('StartShowProfileListSubscribeButton', array($this))) { $sf = new SubscribeForm($this->out, $this->profile); $sf->show(); Event::handle('EndShowProfileListSubscribeButton', array($this)); } } $this->out->elementEnd('li'); } } function endActions() { $this->out->elementEnd('ul'); $this->out->elementEnd('div'); } function endItem() { $this->out->elementEnd('li'); } function highlight($text) { return htmlspecialchars($text); } function linkAttributes() { return array('href' => $this->profile->profileurl, 'class' => 'u-url', 'rel' => 'contact'); } function homepageAttributes() { return array('href' => $this->profile->homepage, 'class' => 'u-url'); } }