From f81c1f755491d25a2bd5b6f59eaa6e6c9e26256d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 27 Aug 2011 12:53:15 -0400 Subject: [PATCH] use an array of profiles rather than a looping cursor for profile lists --- classes/Profile.php | 6 +++- lib/profilelist.php | 28 +++++++++++++------ lib/profileminilist.php | 19 ++++--------- .../lib/sortablesubscriptionlist.php | 14 ++++------ 4 files changed, 36 insertions(+), 31 deletions(-) diff --git a/classes/Profile.php b/classes/Profile.php index 228a0ae202..06ea31c435 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -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]; } diff --git a/lib/profilelist.php b/lib/profilelist.php index 90e1c743a5..9039d1b6d8 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -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, diff --git a/lib/profileminilist.php b/lib/profileminilist.php index 36bfad770c..2c3fc4642d 100644 --- a/lib/profileminilist.php +++ b/lib/profileminilist.php @@ -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 $cnt; + return PROFILES_PER_MINILIST; } + function avatarSize() + { + return AVATAR_MINI_SIZE; + } } class ProfileMiniListItem extends ProfileListItem diff --git a/plugins/Directory/lib/sortablesubscriptionlist.php b/plugins/Directory/lib/sortablesubscriptionlist.php index 234923c003..b61f760ef4 100644 --- a/plugins/Directory/lib/sortablesubscriptionlist.php +++ b/plugins/Directory/lib/sortablesubscriptionlist.php @@ -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(); }