@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at upstream/main 208 lines 4.2 kB view raw
1<?php 2 3final class DiffusionSourceLinkView 4 extends AphrontView { 5 6 private $repository; 7 private $text; 8 private $uri; 9 private $blob; 10 private $blobMap; 11 private $refName; 12 private $path; 13 private $line; 14 private $commit; 15 16 public function setRepository($repository) { 17 $this->repository = $repository; 18 $this->blobMap = null; 19 return $this; 20 } 21 22 public function getRepository() { 23 return $this->repository; 24 } 25 26 public function setText($text) { 27 $this->text = $text; 28 return $this; 29 } 30 31 public function getText() { 32 return $this->text; 33 } 34 35 public function setURI($uri) { 36 $this->uri = $uri; 37 return $this; 38 } 39 40 public function getURI() { 41 return $this->uri; 42 } 43 44 public function setBlob($blob) { 45 $this->blob = $blob; 46 $this->blobMap = null; 47 return $this; 48 } 49 50 public function getBlob() { 51 return $this->blob; 52 } 53 54 public function setRefName($ref_name) { 55 $this->refName = $ref_name; 56 return $this; 57 } 58 59 public function getRefName() { 60 return $this->refName; 61 } 62 63 public function setPath($path) { 64 $this->path = $path; 65 return $this; 66 } 67 68 public function getPath() { 69 return $this->path; 70 } 71 72 public function setCommit($commit) { 73 $this->commit = $commit; 74 return $this; 75 } 76 77 public function getCommit() { 78 return $this->commit; 79 } 80 81 public function setLine($line) { 82 $this->line = $line; 83 return $this; 84 } 85 86 public function getLine() { 87 return $this->line; 88 } 89 90 public function getDisplayPath() { 91 if ($this->path !== null) { 92 return $this->path; 93 } 94 95 return $this->getBlobPath(); 96 } 97 98 public function getDisplayRefName() { 99 if ($this->refName !== null) { 100 return $this->refName; 101 } 102 103 return $this->getBlobRefName(); 104 } 105 106 public function getDisplayCommit() { 107 if ($this->commit !== null) { 108 return $this->commit; 109 } 110 111 return $this->getBlobCommit(); 112 } 113 114 public function getDisplayLine() { 115 if ($this->line !== null) { 116 return $this->line; 117 } 118 119 return $this->getBlobLine(); 120 } 121 122 private function getBlobPath() { 123 return idx($this->getBlobMap(), 'path'); 124 } 125 126 private function getBlobRefName() { 127 return idx($this->getBlobMap(), 'branch'); 128 } 129 130 private function getBlobLine() { 131 return idx($this->getBlobMap(), 'line'); 132 } 133 134 private function getBlobCommit() { 135 return idx($this->getBlobMap(), 'commit'); 136 } 137 138 private function getBlobMap() { 139 if ($this->blobMap === null) { 140 $repository = $this->getRepository(); 141 $blob = $this->blob; 142 143 if ($repository && ($blob !== null)) { 144 $map = DiffusionRequest::parseRequestBlob( 145 $blob, 146 $repository->supportsRefs()); 147 } else { 148 $map = array(); 149 } 150 151 $this->blobMap = $map; 152 } 153 154 return $this->blobMap; 155 } 156 157 public function render() { 158 $repository = $this->getRepository(); 159 $uri = $this->getURI(); 160 161 $color = 'blue'; 162 $icon = 'fa-file-text-o'; 163 164 $text = $this->getText(); 165 if (!phutil_nonempty_string($text)) { 166 $path = $this->getDisplayPath(); 167 168 $line = $this->getDisplayLine(); 169 if ($line !== null) { 170 $path = pht('%s:%s', $path, $line); 171 } 172 173 if ($repository) { 174 $path = pht('%s %s', $repository->getMonogram(), $path); 175 } 176 177 if ($repository && $repository->supportsRefs()) { 178 $default_ref = $repository->getDefaultBranch(); 179 } else { 180 $default_ref = null; 181 } 182 183 $ref_name = $this->getDisplayRefName(); 184 if ($ref_name === $default_ref) { 185 $ref_name = null; 186 } 187 188 $commit = $this->getDisplayCommit(); 189 if ($ref_name !== null && $commit !== null) { 190 $text = pht('%s (on %s at %s)', $path, $ref_name, $commit); 191 } else if ($ref_name !== null) { 192 $text = pht('%s (on %s)', $path, $ref_name); 193 } else if ($commit !== null) { 194 $text = pht('%s (at %s)', $path, $commit); 195 } else { 196 $text = $path; 197 } 198 } 199 200 return id(new PHUITagView()) 201 ->setType(PHUITagView::TYPE_SHADE) 202 ->setColor($color) 203 ->setIcon($icon) 204 ->setHref($uri) 205 ->setName($text); 206 } 207 208}