Path: blob/master/src/applications/diffusion/controller/DiffusionChangeController.php
12242 views
<?php12final class DiffusionChangeController extends DiffusionController {34public function shouldAllowPublic() {5return true;6}78public function handleRequest(AphrontRequest $request) {9$response = $this->loadDiffusionContext();10if ($response) {11return $response;12}1314$viewer = $this->getViewer();15$drequest = $this->getDiffusionRequest();1617$data = $this->callConduitWithDiffusionRequest(18'diffusion.diffquery',19array(20'commit' => $drequest->getCommit(),21'path' => $drequest->getPath(),22));2324$drequest->updateSymbolicCommit($data['effectiveCommit']);2526$raw_changes = ArcanistDiffChange::newFromConduit($data['changes']);27$diff = DifferentialDiff::newEphemeralFromRawChanges(28$raw_changes);29$changesets = $diff->getChangesets();30$changeset = reset($changesets);3132if (!$changeset) {33// TODO: Refine this.34return new Aphront404Response();35}3637$repository = $drequest->getRepository();38$changesets = array(390 => $changeset,40);4142$changeset_header = $this->buildChangesetHeader($drequest);4344$changeset_view = new DifferentialChangesetListView();45$changeset_view->setChangesets($changesets);46$changeset_view->setBackground(PHUIObjectBoxView::BLUE_PROPERTY);47$changeset_view->setVisibleChangesets($changesets);48$changeset_view->setRenderingReferences(49array(500 => $drequest->generateURI(array('action' => 'rendering-ref')),51));5253$raw_params = array(54'action' => 'browse',55'params' => array(56'view' => 'raw',57),58);5960$right_uri = $drequest->generateURI($raw_params);61$raw_params['params']['before'] = $drequest->getStableCommit();62$left_uri = $drequest->generateURI($raw_params);63$changeset_view->setRawFileURIs($left_uri, $right_uri);6465$changeset_view->setRenderURI($repository->getPathURI('diff/'));66$changeset_view->setUser($viewer);67$changeset_view->setHeader($changeset_header);6869// TODO: This is pretty awkward, unify the CSS between Diffusion and70// Differential better.71require_celerity_resource('differential-core-view-css');7273$crumbs = $this->buildCrumbs(74array(75'branch' => true,76'path' => true,77'view' => 'change',78));79$crumbs->setBorder(true);8081$links = $this->renderPathLinks($drequest, $mode = 'browse');82$header = $this->buildHeader($drequest, $links);8384$view = id(new PHUITwoColumnView())85->setHeader($header)86->setMainColumn(array(87))88->setFooter(array(89$changeset_view,90));9192return $this->newPage()93->setTitle(94array(95basename($drequest->getPath()),96$repository->getDisplayName(),97))98->setCrumbs($crumbs)99->appendChild(100array(101$view,102));103}104105private function buildHeader(106DiffusionRequest $drequest,107$links) {108$viewer = $this->getViewer();109110$tag = $this->renderCommitHashTag($drequest);111112$header = id(new PHUIHeaderView())113->setHeader($links)114->setUser($viewer)115->setPolicyObject($drequest->getRepository())116->addTag($tag);117118return $header;119}120121private function buildChangesetHeader(DiffusionRequest $drequest) {122$viewer = $this->getViewer();123124$header = id(new PHUIHeaderView())125->setHeader(pht('Changes'));126127$history_uri = $drequest->generateURI(128array(129'action' => 'history',130));131132$header->addActionLink(133id(new PHUIButtonView())134->setTag('a')135->setText(pht('View History'))136->setHref($history_uri)137->setIcon('fa-clock-o'));138139$browse_uri = $drequest->generateURI(140array(141'action' => 'browse',142));143144$header->addActionLink(145id(new PHUIButtonView())146->setTag('a')147->setText(pht('Browse Content'))148->setHref($browse_uri)149->setIcon('fa-files-o'));150151return $header;152}153154protected function buildPropertyView(155DiffusionRequest $drequest,156PhabricatorActionListView $actions) {157158$viewer = $this->getRequest()->getUser();159160$view = id(new PHUIPropertyListView())161->setUser($viewer)162->setActionList($actions);163164$stable_commit = $drequest->getStableCommit();165166$view->addProperty(167pht('Commit'),168phutil_tag(169'a',170array(171'href' => $drequest->generateURI(172array(173'action' => 'commit',174'commit' => $stable_commit,175)),176),177$drequest->getRepository()->formatCommitName($stable_commit)));178179return $view;180}181182}183184185