@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 92 lines 2.6 kB view raw
1<?php 2 3final class PhabricatorPackagesVersionViewController 4 extends PhabricatorPackagesVersionController { 5 6 public function shouldAllowPublic() { 7 return true; 8 } 9 10 public function handleRequest(AphrontRequest $request) { 11 $viewer = $request->getViewer(); 12 13 $publisher_key = $request->getURIData('publisherKey'); 14 $package_key = $request->getURIData('packageKey'); 15 $full_key = $publisher_key.'/'.$package_key; 16 $version_key = $request->getURIData('versionKey'); 17 18 $version = id(new PhabricatorPackagesVersionQuery()) 19 ->setViewer($viewer) 20 ->withFullKeys(array($full_key)) 21 ->withNames(array($version_key)) 22 ->executeOne(); 23 if (!$version) { 24 return new Aphront404Response(); 25 } 26 27 $package = $version->getPackage(); 28 $publisher = $package->getPublisher(); 29 30 $crumbs = $this->buildApplicationCrumbs() 31 ->addTextCrumb($publisher->getName(), $publisher->getURI()) 32 ->addTextCrumb($package->getName(), $package->getURI()) 33 ->addTextCrumb($version->getName()) 34 ->setBorder(true); 35 36 $header = $this->buildHeaderView($version); 37 $curtain = $this->buildCurtain($version); 38 39 $timeline = $this->buildTransactionTimeline( 40 $version, 41 new PhabricatorPackagesVersionTransactionQuery()); 42 $timeline->setShouldTerminate(true); 43 44 $version_view = id(new PHUITwoColumnView()) 45 ->setHeader($header) 46 ->setCurtain($curtain) 47 ->setMainColumn($timeline); 48 49 return $this->newPage() 50 ->setCrumbs($crumbs) 51 ->setPageObjectPHIDs( 52 array( 53 $version->getPHID(), 54 )) 55 ->appendChild($version_view); 56 } 57 58 59 private function buildHeaderView(PhabricatorPackagesVersion $version) { 60 $viewer = $this->getViewer(); 61 $name = $version->getName(); 62 63 return id(new PHUIHeaderView()) 64 ->setViewer($viewer) 65 ->setHeader($name) 66 ->setPolicyObject($version) 67 ->setHeaderIcon('fa-tag'); 68 } 69 70 private function buildCurtain(PhabricatorPackagesVersion $version) { 71 $viewer = $this->getViewer(); 72 $curtain = $this->newCurtainView($version); 73 74 $can_edit = PhabricatorPolicyFilter::hasCapability( 75 $viewer, 76 $version, 77 PhabricatorPolicyCapability::CAN_EDIT); 78 79 $id = $version->getID(); 80 $edit_uri = $this->getApplicationURI("version/edit/{$id}/"); 81 82 $curtain->addAction( 83 id(new PhabricatorActionView()) 84 ->setName(pht('Edit Version')) 85 ->setIcon('fa-pencil') 86 ->setDisabled(!$can_edit) 87 ->setHref($edit_uri)); 88 89 return $curtain; 90 } 91 92}