diff --git a/src/applications/notification/controller/PhabricatorNotificationIndividualController.php b/src/applications/notification/controller/PhabricatorNotificationIndividualController.php index 0024b09b1a..684d83c274 100644 --- a/src/applications/notification/controller/PhabricatorNotificationIndividualController.php +++ b/src/applications/notification/controller/PhabricatorNotificationIndividualController.php @@ -1,34 +1,53 @@ getRequest(); - $user = $request->getUser(); + $viewer = $request->getUser(); $stories = id(new PhabricatorNotificationQuery()) - ->setViewer($user) - ->withUserPHIDs(array($user->getPHID())) + ->setViewer($viewer) + ->withUserPHIDs(array($viewer->getPHID())) ->withKeys(array($request->getStr('key'))) ->execute(); if (!$stories) { - return id(new AphrontAjaxResponse())->setContent( - array( - 'pertinent' => false, - )); + return $this->buildEmptyResponse(); } - $builder = new PhabricatorNotificationBuilder($stories); + $story = head($stories); + if ($story->getAuthorPHID() === $viewer->getPHID()) { + // Don't show the user individual notifications about their own + // actions. Primarily, this stops pages from showing notifications + // immediately after you click "Submit" on a comment form if the + // notification server returns faster than the web server. + + // TODO: It would be nice to retain the "page updated" bubble on copies + // of the page that are open in other tabs, but there isn't an obvious + // way to do this easily. + + return $this->buildEmptyResponse(); + } + + $builder = new PhabricatorNotificationBuilder(array($story)); $content = $builder->buildView()->render(); $response = array( 'pertinent' => true, - 'primaryObjectPHID' => head($stories)->getPrimaryObjectPHID(), + 'primaryObjectPHID' => $story->getPrimaryObjectPHID(), 'content' => hsprintf('%s', $content), ); return id(new AphrontAjaxResponse())->setContent($response); } + + private function buildEmptyResponse() { + return id(new AphrontAjaxResponse())->setContent( + array( + 'pertinent' => false, + )); + } + }