diff --git a/src/applications/conduit/method/differential/ConduitAPI_differential_getrevisioncomments_Method.php b/src/applications/conduit/method/differential/ConduitAPI_differential_getrevisioncomments_Method.php index 2220601b2f..5f09a73fb8 100644 --- a/src/applications/conduit/method/differential/ConduitAPI_differential_getrevisioncomments_Method.php +++ b/src/applications/conduit/method/differential/ConduitAPI_differential_getrevisioncomments_Method.php @@ -1,72 +1,110 @@ 'required list', + 'inlines' => 'optional bool', ); } public function defineReturnType() { return 'nonempty list>'; } public function defineErrorTypes() { return array( ); } protected function execute(ConduitAPIRequest $request) { $results = array(); $revision_ids = $request->getValue('ids'); if (!$revision_ids) { return $results; } $comments = id(new DifferentialComment())->loadAllWhere( 'revisionID IN (%Ld)', $revision_ids); + $with_inlines = $request->getValue('inlines'); + if ($with_inlines) { + $inlines = id(new DifferentialInlineComment())->loadAllWhere( + 'revisionID IN (%Ld)', + $revision_ids); + $changesets = array(); + if ($inlines) { + $changesets = id(new DifferentialChangeset())->loadAllWhere( + 'id IN (%Ld)', + array_unique(mpull($inlines, 'getChangesetID'))); + $inlines = mgroup($inlines, 'getCommentID'); + } + } + foreach ($comments as $comment) { $revision_id = $comment->getRevisionID(); - if (!array_key_exists($revision_id, $results)) { - $results[$revision_id] = array(); - } - $results[$revision_id][] = array( + $result = array( 'revisionID' => $revision_id, 'action' => $comment->getAction(), 'authorPHID' => $comment->getAuthorPHID(), 'dateCreated' => $comment->getDateCreated(), 'content' => $comment->getContent(), ); + + if ($with_inlines) { + $result['inlines'] = array(); + foreach (idx($inlines, $comment->getID(), array()) as $inline) { + $file_path = null; + $diff_id = null; + $changeset = idx($changesets, $inline->getChangesetID()); + if ($changeset) { + $file_path = ($inline->getIsNewFile() ? + $changeset->getFilename() : + $changeset->getOldFile()); + $diff_id = $changeset->getDiffID(); + } + $result['inlines'][] = array( + 'filePath' => $file_path, + 'isNewFile' => $inline->getIsNewFile(), + 'lineNumber' => $inline->getLineNumber(), + 'lineLength' => $inline->getLineLength(), + 'diffID' => $diff_id, + 'content' => $inline->getContent(), + ); + } + // TODO: Put synthetic inlines without an attached comment somewhere. + } + + $results[$revision_id][] = $result; } return $results; } }