Path: blob/master/src/applications/differential/controller/DifferentialRevisionInlinesController.php
12256 views
<?php12final class DifferentialRevisionInlinesController3extends DifferentialController {45public function shouldAllowPublic() {6return true;7}89public function handleRequest(AphrontRequest $request) {10$viewer = $this->getViewer();11$id = $request->getURIData('id');1213$revision = id(new DifferentialRevisionQuery())14->withIDs(array($id))15->setViewer($viewer)16->needDiffIDs(true)17->executeOne();18if (!$revision) {19return new Aphront404Response();20}2122$revision_monogram = $revision->getMonogram();23$revision_uri = $revision->getURI();24$revision_title = $revision->getTitle();2526$inlines = id(new DifferentialDiffInlineCommentQuery())27->setViewer($viewer)28->withRevisionPHIDs(array($revision->getPHID()))29->withPublishedComments(true)30->execute();31$inlines = mpull($inlines, 'newInlineCommentObject');3233$crumbs = $this->buildApplicationCrumbs();34$crumbs->addTextCrumb($revision_monogram, $revision_uri);35$crumbs->addTextCrumb(pht('Inline Comments'));36$crumbs->setBorder(true);3738$content = $this->renderInlineTable($revision, $inlines);39$header = $this->buildHeader($revision);4041$view = id(new PHUITwoColumnView())42->setHeader($header)43->setFooter($content);4445return $this->newPage()46->setTitle(47array(48"{$revision_monogram} {$revision_title}",49pht('Inlines'),50))51->setCrumbs($crumbs)52->appendChild($view);53}5455private function buildHeader(DifferentialRevision $revision) {56$viewer = $this->getViewer();5758$button = id(new PHUIButtonView())59->setTag('a')60->setIcon('fa-chevron-left')61->setHref($revision->getURI())62->setText(pht('Back to Revision'));6364return id(new PHUIHeaderView())65->setHeader($revision->getTitle())66->setUser($viewer)67->setHeaderIcon('fa-cog')68->addActionLink($button);69}7071private function renderInlineTable(72DifferentialRevision $revision,73array $inlines) {7475$viewer = $this->getViewer();76$inlines = id(new PHUIDiffInlineThreader())77->reorderAndThreadCommments($inlines);7879$handle_phids = array();80$changeset_ids = array();81foreach ($inlines as $inline) {82$handle_phids[] = $inline->getAuthorPHID();83$changeset_ids[] = $inline->getChangesetID();84}85$handles = $viewer->loadHandles($handle_phids);86$handles = iterator_to_array($handles);8788if ($changeset_ids) {89$changesets = id(new DifferentialChangesetQuery())90->setViewer($viewer)91->withIDs($changeset_ids)92->execute();93$changesets = mpull($changesets, null, 'getID');94} else {95$changesets = array();96}9798$current_changeset = head($revision->getDiffIDs());99100$rows = array();101foreach ($inlines as $inline) {102$status_icons = array();103104$c_id = $inline->getChangesetID();105$d_id = $changesets[$c_id]->getDiffID();106107if ($d_id == $current_changeset) {108$diff_id = phutil_tag('strong', array(), pht('Current'));109} else {110$diff_id = pht('Diff %d', $d_id);111}112113$reviewer = $handles[$inline->getAuthorPHID()]->renderLink();114$now = PhabricatorTime::getNow();115$then = $inline->getDateModified();116$datetime = phutil_format_relative_time($now - $then);117118$comment_href = $revision->getURI().'#inline-'.$inline->getID();119$comment = phutil_tag(120'a',121array(122'href' => $comment_href,123),124$inline->getContent());125126$state = $inline->getFixedState();127if ($state == PhabricatorInlineComment::STATE_DONE) {128$status_icons[] = id(new PHUIIconView())129->setIcon('fa-check green')130->addClass('mmr');131} else if ($inline->getReplyToCommentPHID() &&132$inline->getAuthorPHID() == $revision->getAuthorPHID()) {133$status_icons[] = id(new PHUIIconView())134->setIcon('fa-commenting-o blue')135->addClass('mmr');136} else {137$status_icons[] = id(new PHUIIconView())138->setIcon('fa-circle-o grey')139->addClass('mmr');140}141142143if ($inline->getReplyToCommentPHID()) {144$reply_icon = id(new PHUIIconView())145->setIcon('fa-reply mmr darkgrey');146$comment = array($reply_icon, $comment);147}148149$rows[] = array(150$diff_id,151$status_icons,152$reviewer,153AphrontTableView::renderSingleDisplayLine($comment),154$datetime,155);156}157158$table = new AphrontTableView($rows);159$table->setHeaders(160array(161pht('Diff'),162pht('Status'),163pht('Reviewer'),164pht('Comment'),165pht('Created'),166));167$table->setColumnClasses(168array(169'',170'',171'',172'wide',173'right',174));175$table->setColumnVisibility(176array(177true,178true,179true,180true,181true,182));183184return id(new PHUIObjectBoxView())185->setHeaderText(pht('Inline Comments'))186->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)187->setTable($table);188}189190}191192193