Notice class local cache fixes

This commit is contained in:
Mikael Nordfeldth 2013-10-23 12:24:20 +02:00
parent a980f4ed33
commit 340740266c

View File

@ -145,22 +145,18 @@ class Notice extends Managed_DataObject
protected $_profile = -1; protected $_profile = -1;
function getProfile() public function getProfile()
{ {
if (is_int($this->_profile) && $this->_profile == -1) { if ($this->_profile === -1) {
$this->_setProfile(Profile::getKV('id', $this->profile_id)); $this->_setProfile(Profile::getKV('id', $this->profile_id));
if (empty($this->_profile)) {
// TRANS: Server exception thrown when a user profile for a notice cannot be found.
// TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
throw new ServerException(sprintf(_('No such profile (%1$d) for notice (%2$d).'), $this->profile_id, $this->id));
}
} }
if (!$this->_profile instanceof Profile) {
throw new NoProfileException($this->profile_id);
}
return $this->_profile; return $this->_profile;
} }
function _setProfile($profile) function _setProfile(Profile $profile)
{ {
$this->_profile = $profile; $this->_profile = $profile;
} }
@ -2530,17 +2526,15 @@ class Notice extends Managed_DataObject
return $groups; return $groups;
} }
protected $_parent = -1; // local object cache
public function getParent() public function getParent()
{ {
if (!empty($this->reply_to) && $this->_parent === -1) { $parent = Notice::getKV('id', $this->reply_to);
$this->_parent = Notice::getKV('id', $this->reply_to);
} if (!$parent instanceof Notice) {
if (!($this->_parent instanceof Notice)) {
throw new ServerException('Notice has no parent'); throw new ServerException('Notice has no parent');
} }
return $this->_parent;
return $parent;
} }
/** /**
@ -2556,7 +2550,7 @@ class Notice extends Managed_DataObject
function __sleep() function __sleep()
{ {
$vars = parent::__sleep(); $vars = parent::__sleep();
$skip = array('_parent', '_profile', '_groups', '_attachments', '_faves', '_replies', '_repeats'); $skip = array('_profile', '_groups', '_attachments', '_faves', '_replies', '_repeats');
return array_diff($vars, $skip); return array_diff($vars, $skip);
} }