Dangerous non-dynamic profile fetching in Notice

For a Notice object with multiple results, ->getProfile() would ALWAYS
return the first profile in the list. For example our "popular notices"
stream ended up believing all notices were made by the same profile.
This commit is contained in:
Mikael Nordfeldth 2014-06-03 12:22:07 +02:00
parent c99d4eddb1
commit 629cbedee2

View File

@ -141,14 +141,14 @@ class Notice extends Managed_DataObject
const GROUP_SCOPE = 4; const GROUP_SCOPE = 4;
const FOLLOWER_SCOPE = 8; const FOLLOWER_SCOPE = 8;
protected $_profile = -1; protected $_profile = array();
public function getProfile() public function getProfile()
{ {
if ($this->_profile === -1) { if (!isset($this->_profile[$this->profile_id])) {
$this->_setProfile(Profile::getKV('id', $this->profile_id)); $this->_setProfile(Profile::getKV('id', $this->profile_id));
} }
return $this->_profile; return $this->_profile[$this->profile_id];
} }
public function _setProfile(Profile $profile=null) public function _setProfile(Profile $profile=null)
@ -156,7 +156,7 @@ class Notice extends Managed_DataObject
if (!$profile instanceof Profile) { if (!$profile instanceof Profile) {
throw new NoProfileException($this->profile_id); throw new NoProfileException($this->profile_id);
} }
$this->_profile = $profile; $this->_profile[$this->profile_id] = $profile;
} }
function delete($useWhere=false) function delete($useWhere=false)