Path: blob/master/src/applications/diffusion/controller/DiffusionLastModifiedController.php
12242 views
<?php12final class DiffusionLastModifiedController 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$paths = $request->getStr('paths');1819try {20$paths = phutil_json_decode($paths);21} catch (PhutilJSONParserException $ex) {22return new Aphront400Response();23}2425$modified_map = $this->callConduitWithDiffusionRequest(26'diffusion.lastmodifiedquery',27array(28'paths' => array_fill_keys($paths, $drequest->getCommit()),29));3031if ($modified_map) {32$commit_map = id(new DiffusionCommitQuery())33->setViewer($viewer)34->withRepository($drequest->getRepository())35->withIdentifiers(array_values($modified_map))36->needCommitData(true)37->needIdentities(true)38->execute();39$commit_map = mpull($commit_map, null, 'getCommitIdentifier');40} else {41$commit_map = array();42}4344$commits = array();45foreach ($paths as $path) {46$modified_at = idx($modified_map, $path);47if ($modified_at) {48$commit = idx($commit_map, $modified_at);49if ($commit) {50$commits[$path] = $commit;51}52}53}5455$branch = $drequest->loadBranch();56if ($branch && $commits) {57$lint_query = id(new DiffusionLintCountQuery())58->withBranchIDs(array($branch->getID()))59->withPaths(array_keys($commits));6061if ($drequest->getLint()) {62$lint_query->withCodes(array($drequest->getLint()));63}6465$lint = $lint_query->execute();66} else {67$lint = array();68}6970$output = array();71foreach ($commits as $path => $commit) {72$prequest = clone $drequest;73$prequest->setPath($path);7475$output[$path] = $this->renderColumns(76$prequest,77$commit,78idx($lint, $path));79}8081return id(new AphrontAjaxResponse())->setContent($output);82}8384private function renderColumns(85DiffusionRequest $drequest,86PhabricatorRepositoryCommit $commit = null,87$lint = null) {88$viewer = $this->getViewer();8990if ($commit) {91$epoch = $commit->getEpoch();92$modified = DiffusionView::linkCommit(93$drequest->getRepository(),94$commit->getCommitIdentifier());95$date = $viewer->formatShortDateTime($epoch);96} else {97$modified = '';98$date = '';99}100101$data = $commit->getCommitData();102$details = DiffusionView::linkDetail(103$drequest->getRepository(),104$commit->getCommitIdentifier(),105$data->getSummary());106$details = AphrontTableView::renderSingleDisplayLine($details);107108$return = array(109'commit' => $modified,110'date' => $date,111'details' => $details,112);113114if ($lint !== null) {115$return['lint'] = phutil_tag(116'a',117array(118'href' => $drequest->generateURI(array(119'action' => 'lint',120'lint' => null,121)),122),123number_format($lint));124}125126// The client treats these results as markup, so make sure they have been127// escaped correctly.128foreach ($return as $key => $value) {129$return[$key] = hsprintf('%s', $value);130}131132return $return;133}134135}136137138