assert($notice instanceof Notice);
$this->notice = $notice;
- $this->user = User::staticGet('id', $notice->profile_id);
+ $this->user = User::getKV('id', $notice->profile_id);
- $this->pushUser();
+ try {
+ $profile = $this->notice->getProfile();
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Can't get profile for notice; skipping: " . $e->getMessage());
+ return true;
+ }
+
+ if ($notice->isLocal()) {
+ // Notices generated on remote sites will have already
+ // been pushed to user's subscribers by their origin sites.
+ $this->pushUser();
+ }
foreach ($notice->getGroups() as $group) {
- $oprofile = Ostatus_profile::staticGet('group_id', $group->id);
+ $oprofile = Ostatus_profile::getKV('group_id', $group->id);
if ($oprofile) {
- $this->pingReply($oprofile);
+ // remote group
+ if ($notice->isLocal()) {
+ $this->pingReply($oprofile);
+ }
} else {
+ // local group
$this->pushGroup($group->id);
}
}
-
- foreach ($notice->getReplies() as $profile_id) {
- $oprofile = Ostatus_profile::staticGet('profile_id', $profile_id);
- if ($oprofile) {
- $this->pingReply($oprofile);
+
+ if ($notice->isLocal()) {
+ // Notices generated on other sites will have already
+ // pinged their reply-targets.
+
+ foreach ($notice->getReplies() as $profile_id) {
+ $oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
+ if ($oprofile) {
+ $this->pingReply($oprofile);
+ }
}
- }
- if (!empty($this->notice->reply_to)) {
- $replyTo = Notice::staticGet('id', $this->notice->reply_to);
- if (!empty($replyTo)) {
- foreach($replyTo->getReplies() as $profile_id) {
- $oprofile = Ostatus_profile::staticGet('profile_id', $profile_id);
- if ($oprofile) {
- $this->pingReply($oprofile);
+ if (!empty($this->notice->reply_to)) {
+ $replyTo = Notice::getKV('id', $this->notice->reply_to);
+ if (!empty($replyTo)) {
+ foreach($replyTo->getReplies() as $profile_id) {
+ $oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
+ if ($oprofile) {
+ $this->pingReply($oprofile);
+ }
}
}
}
- }
- foreach ($notice->getProfileTags() as $ptag) {
- $oprofile = Ostatus_profile::staticGet('peopletag_id', $ptag->id);
- if (!$oprofile) {
- $this->pushPeopletag($ptag);
+ foreach ($notice->getProfileTags() as $ptag) {
+ $oprofile = Ostatus_profile::getKV('peopletag_id', $ptag->id);
+ if (!$oprofile) {
+ $this->pushPeopletag($ptag);
+ }
}
}
$this->pushFeed($feed, array($this, 'peopletagFeedForNotice'), $ptag);
}
- function pingReply($oprofile)
+ function pingReply(OStatus_profile $oprofile)
{
if ($this->user) {
// For local posts, send a Salmon ping to the mentioned
// remote user or group.
// @fixme as an optimization we can skip this if the
// remote profile is subscribed to the author.
- $oprofile->notifyDeferred($this->notice, $this->user);
+ $oprofile->notifyDeferred($this->notice, $this->user->getProfile());
}
}
function groupFeedForNotice($group_id)
{
- $group = User_group::staticGet('id', $group_id);
+ $group = User_group::getKV('id', $group_id);
$atom = new AtomGroupNoticeFeed($group);
$atom->addEntryFromNotice($this->notice);