showAvatar functions deduplicated into Widget class

This commit is contained in:
Mikael Nordfeldth 2014-06-21 23:22:41 +02:00
parent 10105a9965
commit e4f1c77d6b
12 changed files with 63 additions and 160 deletions

View File

@ -359,6 +359,8 @@ class ShowprofiletagAction extends Action
class Peopletag extends PeopletagListItem
{
protected $avatarSize = AVATAR_PROFILE_SIZE;
function showStart()
{
$mode = $this->peopletag->private ? 'private' : 'public';
@ -370,9 +372,4 @@ class Peopletag extends PeopletagListItem
{
$this->out->elementEnd('div');
}
function showAvatar()
{
parent::showAvatar(AVATAR_PROFILE_SIZE);
}
}

View File

@ -172,7 +172,7 @@ class SubscriptionsListItem extends SubscriptionListItem
function showProfile()
{
$this->startProfile();
$this->showAvatar();
$this->showAvatar($this->profile);
$this->showFullName();
$this->showLocation();
$this->showHomepage();

View File

@ -63,11 +63,6 @@ class AccountProfileBlock extends ProfileBlock
}
}
function avatar()
{
return $this->profile->avatarUrl(AVATAR_PROFILE_SIZE);
}
function name()
{
return $this->profile->getBestName();

View File

@ -52,12 +52,17 @@ class GroupProfileBlock extends ProfileBlock
{
parent::__construct($out);
$this->group = $group;
$this->profile = $this->group->getProfile();
}
function avatar()
protected function showAvatar(Profile $profile, $size=null)
{
return ($this->group->homepage_logo) ?
$this->group->homepage_logo : User_group::defaultLogo(AVATAR_PROFILE_SIZE);
$avatar_url = $profile->getGroup()->homepage_logo ?: User_group::defaultLogo($size ?: $this->avatarSize());
$this->out->element('img', array('src' => $avatar_url,
'class' => 'avatar u-photo',
'width' => $this->avatarSize(),
'height' => $this->avatarSize(),
'alt' => $profile->getBestName()));
}
function name()

View File

@ -218,9 +218,8 @@ class NoticeListItem extends Widget
'title' => $this->profile->nickname);
$this->out->elementStart('a', $attrs);
$this->showAvatar();
$this->out->text(' ');
$this->out->element('span',array('class' => 'fn'), $this->profile->getStreamName());
$this->showAvatar($this->profile);
$this->out->text($this->profile->getStreamName());
$this->out->elementEnd('a');
$this->out->elementEnd('span');
@ -275,35 +274,6 @@ class NoticeListItem extends Widget
return $this->notice->getReplyProfiles();
}
/**
* show the avatar of the notice's author
*
* This will use the default avatar if no avatar is assigned for the author.
* It makes a link to the author's profile.
*
* @return void
*/
function showAvatar()
{
$avatar_size = $this->avatarSize();
$avatarUrl = $this->profile->avatarUrl($avatar_size);
$this->out->element('img', array('src' => $avatarUrl,
'class' => 'avatar photo',
'width' => $avatar_size,
'height' => $avatar_size,
'alt' =>
($this->profile->fullname) ?
$this->profile->fullname :
$this->profile->nickname));
}
function avatarSize()
{
return AVATAR_STREAM_SIZE;
}
/**
* show the nickname of the author
*

View File

@ -231,11 +231,8 @@ class PeopletagListItem extends Widget
$attrs['title'] = $this->profile->fullname . ' (' . $this->profile->nickname . ')';
}
$this->out->elementStart('a', $attrs);
$this->showAvatar();
$this->out->text(' ');
$this->out->element('span', 'nickname fn',
htmlspecialchars($this->profile->nickname));
$this->showAvatar($this->profile);
$this->out->text($this->profile->getNickname());
$this->out->elementEnd('a');
$this->out->elementEnd('span');
}
@ -272,29 +269,6 @@ class PeopletagListItem extends Widget
$this->out->elementEnd('span');
}
/**
* show the avatar of the peopletag's creator
*
* This will use the default avatar if no avatar is assigned for the author.
* It makes a link to the author's profile.
*
* @return void
*/
function showAvatar($size=AVATAR_STREAM_SIZE)
{
$avatarUrl = $this->profile->avatarUrl($size);
$this->out->element('img', array('src' => $avatarUrl,
'class' => 'avatar photo',
'width' => $size,
'height' => $size,
'alt' =>
($this->profile->fullname) ?
$this->profile->fullname :
$this->profile->nickname));
}
function showActions()
{
$this->out->elementStart('div', 'entity_actions');

View File

@ -48,6 +48,8 @@ define('PEOPLETAGS_PER_SECTION', 6);
*/
class PeopletagSection extends Section
{
protected $avatarSize = AVATAR_MINI_SIZE;
function showContent()
{
$tags = $this->getPeopletags();
@ -135,9 +137,4 @@ class PeopletagSectionItem extends PeopletagListItem
htmlspecialchars($this->peopletag->tag));
$this->out->elementEnd('span');
}
function showAvatar()
{
parent::showAvatar(AVATAR_MINI_SIZE);
}
}

View File

@ -47,7 +47,8 @@ if (!defined('STATUSNET')) {
abstract class ProfileBlock extends Widget
{
abstract function avatar();
protected $avatarSize = AVATAR_PROFILE_SIZE;
abstract function name();
abstract function url();
abstract function location();
@ -57,7 +58,7 @@ abstract class ProfileBlock extends Widget
function show()
{
$this->showActions();
$this->showAvatar();
$this->showAvatar($this->profile);
$this->showName();
$this->showLocation();
$this->showHomepage();
@ -66,22 +67,6 @@ abstract class ProfileBlock extends Widget
$this->showTags();
}
function showAvatar()
{
$size = $this->avatarSize();
$this->out->element(
'img',
array(
'src' => $this->avatar(),
'class' => 'ur_face',
'alt' => $this->name(),
'width' => $size,
'height' => $size
)
);
}
function showName()
{
$name = $this->name();
@ -161,11 +146,6 @@ abstract class ProfileBlock extends Widget
}
}
function avatarSize()
{
return AVATAR_PROFILE_SIZE;
}
function showTags()
{
}

View File

@ -31,7 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/lib/widget.php';
require_once INSTALLDIR.'/lib/peopletags.php';
/**
@ -107,11 +106,6 @@ class ProfileList extends Widget
{
return PROFILES_PER_PAGE;
}
function avatarSize()
{
return AVATAR_STREAM_SIZE;
}
}
class ProfileListItem extends Widget
@ -157,7 +151,10 @@ class ProfileListItem extends Widget
$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->out->elementEnd('a');
Event::handle('EndProfileListItemAvatar', array($this));
}
if (Event::handle('StartProfileListItemFullName', array($this))) {
@ -190,26 +187,6 @@ class ProfileListItem extends Widget
$this->out->elementStart('div', 'entity_profile vcard entry-content');
}
function showAvatar()
{
$avatarUrl = $this->profile->avatarUrl(AVATAR_STREAM_SIZE);
$aAttrs = $this->linkAttributes();
$this->out->elementStart('a', $aAttrs);
$this->out->element('img', array('src' => $avatarUrl,
'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 = (!empty($this->profile->fullname)) ? 'nickname' : 'fn nickname';
$this->out->elementStart('span', $hasFN);
$this->out->raw($this->highlight($this->profile->nickname));
$this->out->elementEnd('span');
$this->out->elementEnd('a');
}
function showFullName()
{
if (!empty($this->profile->fullname)) {

View File

@ -76,7 +76,7 @@ class SubscriptionListItem extends ProfileListItem
function showProfile()
{
$this->startProfile();
$this->showAvatar();
$this->showAvatar($this->profile);
$this->showFullName();
$this->showLocation();
$this->showHomepage();

View File

@ -51,6 +51,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
class Widget
{
protected $avatarSize = AVATAR_STREAM_SIZE;
/**
* HTMLOutputter to use for output
*/
@ -105,4 +107,22 @@ class Widget
{
return call_user_func_array(array($this->out, $name), $arguments);
}
/**
* Default avatar size for this widget.
*/
public function avatarSize()
{
return $this->avatarSize;
}
protected function showAvatar(Profile $profile, $size=null)
{
$avatar_url = $profile->avatarUrl($size ?: $this->avatarSize());
$this->out->element('img', array('src' => $avatar_url,
'class' => 'avatar u-photo',
'width' => $this->avatarSize(),
'height' => $this->avatarSize(),
'alt' => $profile->getBestName()));
}
}

View File

@ -167,37 +167,15 @@ class SortableGroupListItem extends SortableSubscriptionListItem
}
function showAvatar()
function showAvatar(Profile $profile, $size=null)
{
$logo = ($this->profile->stream_logo) ?
$this->profile->stream_logo : User_group::defaultLogo(AVATAR_STREAM_SIZE);
$logo = $profile->getGroup()->stream_logo ?: User_group::defaultLogo($size ?: $this->avatarSize());
$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');
$this->out->element('img', array('src' => $logo,
'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
'alt' => $profile->getBestName()));
}
function show()
@ -226,7 +204,17 @@ class SortableGroupListItem extends SortableSubscriptionListItem
function showProfile()
{
$this->startProfile();
$this->showAvatar();
$hasFN = ($this->profile->fullname) ? 'nickname' : 'fn org nickname';
$this->out->elementStart('a', array('href' => $this->profile->homeUrl(),
'class' => 'h-card org nickname',
'rel' => 'contact group'));
// getProfile here is because $this->profile is a User_group, which it should stop
// being by making sure the group listing runs a ->getGroup when it's necessary.
$this->showAvatar($this->profile->getProfile());
$this->out->text($this->profile->getNickname());
$this->out->elementEnd('a');
$this->showFullName();
$this->showLocation();
$this->showHomepage();