예제 #1
0
 public function willRenderTimeline(PhabricatorApplicationTransactionView $timeline, AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $render_data = $timeline->getRenderData();
     $left = $request->getInt('left', idx($render_data, 'left'));
     $right = $request->getInt('right', idx($render_data, 'right'));
     $diffs = id(new DifferentialDiffQuery())->setViewer($request->getUser())->withIDs(array($left, $right))->execute();
     $diffs = mpull($diffs, null, 'getID');
     $left_diff = $diffs[$left];
     $right_diff = $diffs[$right];
     $old_ids = $request->getStr('old', idx($render_data, 'old'));
     $new_ids = $request->getStr('new', idx($render_data, 'new'));
     $old_ids = array_filter(explode(',', $old_ids));
     $new_ids = array_filter(explode(',', $new_ids));
     $type_inline = DifferentialTransaction::TYPE_INLINE;
     $changeset_ids = array_merge($old_ids, $new_ids);
     $inlines = array();
     foreach ($timeline->getTransactions() as $xaction) {
         if ($xaction->getTransactionType() == $type_inline) {
             $inlines[] = $xaction->getComment();
             $changeset_ids[] = $xaction->getComment()->getChangesetID();
         }
     }
     if ($changeset_ids) {
         $changesets = id(new DifferentialChangesetQuery())->setViewer($request->getUser())->withIDs($changeset_ids)->execute();
         $changesets = mpull($changesets, null, 'getID');
     } else {
         $changesets = array();
     }
     foreach ($inlines as $key => $inline) {
         $inlines[$key] = DifferentialInlineComment::newFromModernComment($inline);
     }
     $query = id(new DifferentialInlineCommentQuery())->needHidden(true)->setViewer($viewer);
     // NOTE: This is a bit sketchy: this method adjusts the inlines as a
     // side effect, which means it will ultimately adjust the transaction
     // comments and affect timeline rendering.
     $query->adjustInlinesForChangesets($inlines, array_select_keys($changesets, $old_ids), array_select_keys($changesets, $new_ids), $this);
     return $timeline->setChangesets($changesets)->setRevision($this)->setLeftDiff($left_diff)->setRightDiff($right_diff);
 }