Changeset View
Changeset View
Standalone View
Standalone View
src/applications/diffusion/view/DiffusionSourceLinkView.php
- This file was added.
| <?php | |||||
| final class DiffusionSourceLinkView | |||||
| extends AphrontView { | |||||
| private $repository; | |||||
| private $text; | |||||
| private $uri; | |||||
| private $blob; | |||||
| private $blobMap; | |||||
| private $refName; | |||||
| private $path; | |||||
| private $line; | |||||
| private $commit; | |||||
| public function setRepository($repository) { | |||||
| $this->repository = $repository; | |||||
| $this->blobMap = null; | |||||
| return $this; | |||||
| } | |||||
| public function getRepository() { | |||||
| return $this->repository; | |||||
| } | |||||
| public function setText($text) { | |||||
| $this->text = $text; | |||||
| return $this; | |||||
| } | |||||
| public function getText() { | |||||
| return $this->text; | |||||
| } | |||||
| public function setURI($uri) { | |||||
| $this->uri = $uri; | |||||
| return $this; | |||||
| } | |||||
| public function getURI() { | |||||
| return $this->uri; | |||||
| } | |||||
| public function setBlob($blob) { | |||||
| $this->blob = $blob; | |||||
| $this->blobMap = null; | |||||
| return $this; | |||||
| } | |||||
| public function getBlob() { | |||||
| return $this->blob; | |||||
| } | |||||
| public function setRefName($ref_name) { | |||||
| $this->refName = $ref_name; | |||||
| return $this; | |||||
| } | |||||
| public function getRefName() { | |||||
| return $this->refName; | |||||
| } | |||||
| public function setPath($path) { | |||||
| $this->path = $path; | |||||
| return $this; | |||||
| } | |||||
| public function getPath() { | |||||
| return $this->path; | |||||
| } | |||||
| public function setCommit($commit) { | |||||
| $this->commit = $commit; | |||||
| return $this; | |||||
| } | |||||
| public function getCommit() { | |||||
| return $this->commit; | |||||
| } | |||||
| public function setLine($line) { | |||||
| $this->line = $line; | |||||
| return $this; | |||||
| } | |||||
| public function getLine() { | |||||
| return $this->line; | |||||
| } | |||||
| public function getDisplayPath() { | |||||
| if ($this->path !== null) { | |||||
| return $this->path; | |||||
| } | |||||
| return $this->getBlobPath(); | |||||
| } | |||||
| public function getDisplayRefName() { | |||||
| if ($this->refName !== null) { | |||||
| return $this->refName; | |||||
| } | |||||
| return $this->getBlobRefName(); | |||||
| } | |||||
| public function getDisplayCommit() { | |||||
| if ($this->commit !== null) { | |||||
| return $this->commit; | |||||
| } | |||||
| return $this->getBlobCommit(); | |||||
| } | |||||
| public function getDisplayLine() { | |||||
| if ($this->line !== null) { | |||||
| return $this->line; | |||||
| } | |||||
| return $this->getBlobLine(); | |||||
| } | |||||
| private function getBlobPath() { | |||||
| return idx($this->getBlobMap(), 'path'); | |||||
| } | |||||
| private function getBlobRefName() { | |||||
| return idx($this->getBlobMap(), 'branch'); | |||||
| } | |||||
| private function getBlobLine() { | |||||
| return idx($this->getBlobMap(), 'line'); | |||||
| } | |||||
| private function getBlobCommit() { | |||||
| return idx($this->getBlobMap(), 'commit'); | |||||
| } | |||||
| private function getBlobMap() { | |||||
| if ($this->blobMap === null) { | |||||
| $repository = $this->getRepository(); | |||||
| $blob = $this->blob; | |||||
| if ($repository && ($blob !== null)) { | |||||
| $map = DiffusionRequest::parseRequestBlob( | |||||
| $blob, | |||||
| $repository->supportsRefs()); | |||||
| } else { | |||||
| $map = array(); | |||||
| } | |||||
| $this->blobMap = $map; | |||||
| } | |||||
| return $this->blobMap; | |||||
| } | |||||
| public function render() { | |||||
| $repository = $this->getRepository(); | |||||
| $uri = $this->getURI(); | |||||
| $color = 'blue'; | |||||
| $icon = 'fa-file-text-o'; | |||||
| $text = $this->getText(); | |||||
| if (!strlen($text)) { | |||||
| $path = $this->getDisplayPath(); | |||||
| $line = $this->getDisplayLine(); | |||||
| if ($line !== null) { | |||||
| $path = pht('%s:%s', $path, $line); | |||||
| } | |||||
| if ($repository) { | |||||
| $path = pht('%s %s', $repository->getMonogram(), $path); | |||||
| } | |||||
| if ($repository && $repository->supportsRefs()) { | |||||
| $default_ref = $repository->getDefaultBranch(); | |||||
| } else { | |||||
| $default_ref = null; | |||||
| } | |||||
| $ref_name = $this->getDisplayRefName(); | |||||
| if ($ref_name === $default_ref) { | |||||
| $ref_name = null; | |||||
| } | |||||
| $commit = $this->getDisplayCommit(); | |||||
| if ($ref_name !== null && $commit !== null) { | |||||
| $text = pht('%s (on %s at %s)', $path, $ref_name, $commit); | |||||
| } else if ($ref_name !== null) { | |||||
| $text = pht('%s (on %s)', $path, $ref_name); | |||||
| } else if ($commit !== null) { | |||||
| $text = pht('%s (at %s)', $path, $commit); | |||||
| } else { | |||||
| $text = $path; | |||||
| } | |||||
| } | |||||
| return id(new PHUITagView()) | |||||
| ->setType(PHUITagView::TYPE_SHADE) | |||||
| ->setColor($color) | |||||
| ->setIcon($icon) | |||||
| ->setHref($uri) | |||||
| ->setName($text); | |||||
| } | |||||
| } | |||||