diff --git a/src/applications/feed/controller/PhabricatorFeedDetailController.php b/src/applications/feed/controller/PhabricatorFeedDetailController.php --- a/src/applications/feed/controller/PhabricatorFeedDetailController.php +++ b/src/applications/feed/controller/PhabricatorFeedDetailController.php @@ -25,6 +25,15 @@ return id(new AphrontPlainTextResponse())->setContent($text); } + if ($request->getStr('hook')) { + $data = FeedPublisherHTTPWorker::getHookDataForStory($story); + + $json = new PhutilJSON(); + $json_data = $json->encodeFormatted($data); + + return id(new AphrontPlainTextResponse())->setContent($json_data); + } + $feed = array($story); $builder = new PhabricatorFeedBuilder($feed); $builder->setUser($user); diff --git a/src/applications/feed/worker/FeedPublisherHTTPWorker.php b/src/applications/feed/worker/FeedPublisherHTTPWorker.php --- a/src/applications/feed/worker/FeedPublisherHTTPWorker.php +++ b/src/applications/feed/worker/FeedPublisherHTTPWorker.php @@ -4,9 +4,32 @@ protected function doWork() { $story = $this->loadFeedStory(); - $data = $story->getStoryData(); + $post_data = self::getHookDataForStory($story); $uri = idx($this->getTaskData(), 'uri'); + id(new HTTPSFuture($uri, $post_data)) + ->setMethod('POST') + ->setTimeout(30) + ->resolvex(); + } + + public function getWaitBeforeRetry(PhabricatorWorkerTask $task) { + return max($task->getFailureCount(), 1) * 60; + } + + public static function getHookDataForStory(PhabricatorFeedStory $story) { + $data = $story->getStoryData(); + + $object_phid = $story->getPrimaryObjectPHID(); + $chronokey = $story->getChronologicalKey(); + + $handle = id(new PhabricatorHandleQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withPHIDs(array($object_phid)) + ->executeOne(); + + $object_uri = PhabricatorEnv::getProductionURI($handle->getURI()); + $story_uri = PhabricatorEnv::getProductionURI('/feed/'.$chronokey.'/'); $post_data = array( 'storyID' => $data->getID(), @@ -15,16 +38,14 @@ 'storyAuthorPHID' => $data->getAuthorPHID(), 'storyText' => $story->renderText(), 'epoch' => $data->getEpoch(), + + 'objectPHID' => $object_phid, + 'objectURI' => $object_uri, + 'storyURI' => $story_uri, ); - id(new HTTPSFuture($uri, $post_data)) - ->setMethod('POST') - ->setTimeout(30) - ->resolvex(); + return $post_data; } - public function getWaitBeforeRetry(PhabricatorWorkerTask $task) { - return max($task->getFailureCount(), 1) * 60; - } }