Path: blob/master/src/applications/diffusion/controller/DiffusionDiffController.php
12242 views
<?php12final class DiffusionDiffController extends DiffusionController {34public function shouldAllowPublic() {5return true;6}78protected function getDiffusionBlobFromRequest(AphrontRequest $request) {9return $request->getStr('ref');10}1112public function handleRequest(AphrontRequest $request) {13$response = $this->loadDiffusionContext();14if ($response) {15return $response;16}1718$viewer = $this->getViewer();19$drequest = $this->getDiffusionRequest();2021if (!$request->isAjax()) {2223// This request came out of the dropdown menu, either "View Standalone"24// or "View Raw File".2526$view = $request->getStr('view');27if ($view == 'r') {28$uri = $drequest->generateURI(29array(30'action' => 'browse',31'params' => array(32'view' => 'raw',33),34));35} else {36$uri = $drequest->generateURI(37array(38'action' => 'change',39));40}4142return id(new AphrontRedirectResponse())->setURI($uri);43}4445$data = $this->callConduitWithDiffusionRequest(46'diffusion.diffquery',47array(48'commit' => $drequest->getCommit(),49'path' => $drequest->getPath(),50));51$drequest->updateSymbolicCommit($data['effectiveCommit']);52$raw_changes = ArcanistDiffChange::newFromConduit($data['changes']);53$diff = DifferentialDiff::newEphemeralFromRawChanges(54$raw_changes);55$changesets = $diff->getChangesets();56$changeset = reset($changesets);5758if (!$changeset) {59return new Aphront404Response();60}6162$commit = $drequest->loadCommit();6364$viewstate_engine = id(new PhabricatorChangesetViewStateEngine())65->setViewer($viewer)66->setObjectPHID($commit->getPHID())67->setChangeset($changeset);6869$viewstate = $viewstate_engine->newViewStateFromRequest($request);7071if ($viewstate->getDiscardResponse()) {72return new AphrontAjaxResponse();73}7475$parser = id(new DifferentialChangesetParser())76->setViewer($viewer)77->setChangeset($changeset)78->setViewState($viewstate);7980$parser->setRenderingReference($drequest->generateURI(81array(82'action' => 'rendering-ref',83)));8485$coverage = $drequest->loadCoverage();86if ($coverage) {87$parser->setCoverage($coverage);88}8990$pquery = new DiffusionPathIDQuery(array($changeset->getFilename()));91$ids = $pquery->loadPathIDs();92$path_id = $ids[$changeset->getFilename()];9394$parser->setLeftSideCommentMapping($path_id, false);95$parser->setRightSideCommentMapping($path_id, true);96$parser->setCanMarkDone(97($commit->getAuthorPHID()) &&98($viewer->getPHID() == $commit->getAuthorPHID()));99$parser->setObjectOwnerPHID($commit->getAuthorPHID());100101$inlines = id(new DiffusionDiffInlineCommentQuery())102->setViewer($viewer)103->withCommitPHIDs(array($commit->getPHID()))104->withPathIDs(array($path_id))105->withPublishedComments(true)106->withPublishableComments(true)107->execute();108$inlines = mpull($inlines, 'newInlineCommentObject');109110if ($inlines) {111foreach ($inlines as $inline) {112$parser->parseInlineComment($inline);113}114115$phids = mpull($inlines, 'getAuthorPHID');116$handles = $this->loadViewerHandles($phids);117$parser->setHandles($handles);118}119120$engine = new PhabricatorMarkupEngine();121$engine->setViewer($viewer);122123foreach ($inlines as $inline) {124$engine->addObject(125$inline,126PhabricatorInlineComment::MARKUP_FIELD_BODY);127}128129$engine->process();130131$parser->setMarkupEngine($engine);132133$spec = $request->getStr('range');134list($range_s, $range_e, $mask) =135DifferentialChangesetParser::parseRangeSpecification($spec);136137$parser->setRange($range_s, $range_e);138$parser->setMask($mask);139140return $parser->newChangesetResponse();141}142}143144145