use an array of profiles rather than a looping cursor for profile lists

This commit is contained in:
Evan Prodromou 2011-08-27 12:53:15 -04:00
parent 01fd24ce6a
commit f81c1f7554
4 changed files with 36 additions and 31 deletions

View File

@ -98,7 +98,7 @@ class Profile extends Managed_DataObject
return $this->_user;
}
protected $_avatars = array();
protected $_avatars;
function getAvatar($width, $height=null)
{
@ -106,6 +106,10 @@ class Profile extends Managed_DataObject
$height = $width;
}
if (!isset($this->_avatars)) {
$this->_avatars = array();
}
if (array_key_exists($width, $this->_avatars)) {
return $this->_avatars[$width];
}

View File

@ -85,14 +85,14 @@ class ProfileList extends Widget
function showProfiles()
{
$cnt = 0;
$profiles = $this->profile->fetchAll();
while ($this->profile->fetch()) {
$cnt++;
if($cnt > PROFILES_PER_PAGE) {
break;
}
$pli = $this->newListItem($this->profile);
$cnt = count($profiles);
$max = min($cnt, $this->maxProfiles());
for ($i = 0; $i < $max; $i++) {
$pli = $this->newListItem($profiles[$i]);
$pli->show();
}
@ -101,7 +101,17 @@ class ProfileList extends Widget
function newListItem($profile)
{
return new ProfileListItem($this->profile, $this->action);
return new ProfileListItem($profile, $this->action);
}
function maxProfiles()
{
return PROFILES_PER_PAGE;
}
function avatarSize()
{
return AVATAR_STREAM_SIZE;
}
}
@ -186,7 +196,7 @@ class ProfileListItem extends Widget
$avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
$aAttrs = $this->linkAttributes();
$this->out->elementStart('a', $aAttrs);
$this->out->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
$this->out->element('img', array('src' => (!empty($avatar)) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,

View File

@ -58,22 +58,15 @@ class ProfileMiniList extends ProfileList
return new ProfileMiniListItem($profile, $this->action);
}
function showProfiles()
function maxProfiles()
{
$cnt = 0;
while ($this->profile->fetch()) {
$cnt++;
if ($cnt > PROFILES_PER_MINILIST) {
break;
}
$pli = $this->newListItem($this->profile);
$pli->show();
return PROFILES_PER_MINILIST;
}
return $cnt;
function avatarSize()
{
return AVATAR_MINI_SIZE;
}
}
class ProfileMiniListItem extends ProfileListItem

View File

@ -130,17 +130,15 @@ class SortableSubscriptionList extends SubscriptionList
function showProfiles()
{
$cnt = 0;
$profiles = $this->profile->fetchAll();
while ($this->profile->fetch()) {
$cnt++;
if($cnt > PROFILES_PER_PAGE) {
break;
}
$cnt = count($profiles);
$odd = ($cnt % 2 == 0); // for zebra striping
$max = min($cnt, $this->maxProfiles());
$pli = $this->newListItem($this->profile, $odd);
for ($i = 0; $i < $max; $i++) {
$odd = ($i % 2 == 0); // for zebra striping
$pli = $this->newListItem($profiles[$i], $odd);
$pli->show();
}