fillAvatars would avoid the *ProfileGetAvatar events

This commit is contained in:
Mikael Nordfeldth 2013-10-06 01:56:27 +02:00
parent 4cfd0d24c1
commit ac819e5738
2 changed files with 9 additions and 55 deletions

View File

@ -116,6 +116,8 @@ class Profile extends Managed_DataObject
return true; return true;
} }
protected $_avatars = array();
public function getAvatar($width, $height=null) public function getAvatar($width, $height=null)
{ {
$width = (int) floor($width); $width = (int) floor($width);
@ -124,10 +126,8 @@ class Profile extends Managed_DataObject
$height = $width; $height = $width;
} }
try { if (isset($this->_avatars[$width])) {
return $this->_getAvatar($width); return $this->_avatars[$width];
} catch (Exception $e) {
$avatar = null;
} }
if (Event::handle('StartProfileGetAvatar', array($this, $width, &$avatar))) { if (Event::handle('StartProfileGetAvatar', array($this, $width, &$avatar))) {
@ -144,40 +144,17 @@ class Profile extends Managed_DataObject
if (is_null($avatar)) { if (is_null($avatar)) {
// Obviously we can't find an avatar, so let's resize the original! // Obviously we can't find an avatar, so let's resize the original!
$avatar = Avatar::newSize($this, $width); $avatar = Avatar::newSize($this, $width);
} elseif (!($avatar instanceof Avatar)) {
throw new Exception('Bad Avatar retrieved');
} }
// cache the avatar for future use // cache the avatar for future use
$this->_fillAvatar($width, $avatar); $this->_avatars[$width] = $avatar;
return $avatar; return $avatar;
} }
protected $_avatars = array(); public function setOriginal($filename)
// XXX: @Fix me gargargar
function _getAvatar($width)
{
// GAR! I cannot figure out where _avatars gets pre-filled with the avatar from
// the previously used profile! Please shoot me now! --Zach
if (array_key_exists($width, $this->_avatars)) {
// Don't return cached avatar unless it's really for this profile
if ($this->_avatars[$width]->profile_id == $this->id) {
return $this->_avatars[$width];
}
}
throw new Exception('No cached avatar available for size ');
}
protected function _fillAvatar($width, $avatar)
{
// This avoids storing null values, a problem report in issue #3478
if (!empty($avatar)) {
$this->_avatars[$width] = $avatar;
}
}
function setOriginal($filename)
{ {
$imagefile = new ImageFile($this->id, Avatar::path($filename)); $imagefile = new ImageFile($this->id, Avatar::path($filename));
@ -1431,29 +1408,8 @@ class Profile extends Managed_DataObject
$skip = array('_user', '_avatars'); $skip = array('_user', '_avatars');
return array_diff($vars, $skip); return array_diff($vars, $skip);
} }
static function fillAvatars(&$profiles, $width)
{
$ids = array();
foreach ($profiles as $profile) {
if (!empty($profile)) {
$ids[] = $profile->id;
}
}
$avatars = Avatar::pivotGet('profile_id', $ids, array('width' => $width,
'height' => $width));
foreach ($profiles as $profile) {
if (!empty($profile)) { // ???
$profile->_fillAvatar($width, $avatars[$profile->id]);
}
}
}
// Can't seem to find how to fix this.
function getProfile() public function getProfile()
{ {
return $this; return $this;
} }

View File

@ -134,8 +134,6 @@ class NoticeList extends Widget
Notice::fillRepeats($notices); Notice::fillRepeats($notices);
// Prefill the profiles // Prefill the profiles
$profiles = Notice::fillProfiles($notices); $profiles = Notice::fillProfiles($notices);
// Prefill the avatars
Profile::fillAvatars($profiles, $avatarSize);
$p = Profile::current(); $p = Profile::current();