@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 129 lines 3.5 kB view raw
1<?php 2 3final class PhabricatorPackagesPackageViewController 4 extends PhabricatorPackagesPackageController { 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 17 $package = id(new PhabricatorPackagesPackageQuery()) 18 ->setViewer($viewer) 19 ->withFullKeys(array($full_key)) 20 ->executeOne(); 21 if (!$package) { 22 return new Aphront404Response(); 23 } 24 25 $publisher = $package->getPublisher(); 26 27 $crumbs = $this->buildApplicationCrumbs() 28 ->addTextCrumb($publisher->getName(), $publisher->getURI()) 29 ->addTextCrumb($package->getName()) 30 ->setBorder(true); 31 32 $header = $this->buildHeaderView($package); 33 $curtain = $this->buildCurtain($package); 34 35 $versions_view = $this->buildVersionsView($package); 36 37 $timeline = $this->buildTransactionTimeline( 38 $package, 39 new PhabricatorPackagesPackageTransactionQuery()); 40 $timeline->setShouldTerminate(true); 41 42 $package_view = id(new PHUITwoColumnView()) 43 ->setHeader($header) 44 ->setCurtain($curtain) 45 ->setMainColumn( 46 array( 47 $versions_view, 48 $timeline, 49 )); 50 51 return $this->newPage() 52 ->setCrumbs($crumbs) 53 ->setPageObjectPHIDs( 54 array( 55 $package->getPHID(), 56 )) 57 ->appendChild($package_view); 58 } 59 60 61 private function buildHeaderView(PhabricatorPackagesPackage $package) { 62 $viewer = $this->getViewer(); 63 $name = $package->getName(); 64 65 return id(new PHUIHeaderView()) 66 ->setViewer($viewer) 67 ->setHeader($name) 68 ->setPolicyObject($package) 69 ->setHeaderIcon('fa-gift'); 70 } 71 72 private function buildCurtain(PhabricatorPackagesPackage $package) { 73 $viewer = $this->getViewer(); 74 $curtain = $this->newCurtainView($package); 75 76 $can_edit = PhabricatorPolicyFilter::hasCapability( 77 $viewer, 78 $package, 79 PhabricatorPolicyCapability::CAN_EDIT); 80 81 $id = $package->getID(); 82 $edit_uri = $this->getApplicationURI("package/edit/{$id}/"); 83 84 $curtain->addAction( 85 id(new PhabricatorActionView()) 86 ->setName(pht('Edit Package')) 87 ->setIcon('fa-pencil') 88 ->setDisabled(!$can_edit) 89 ->setHref($edit_uri)); 90 91 return $curtain; 92 } 93 94 private function buildVersionsView(PhabricatorPackagesPackage $package) { 95 $viewer = $this->getViewer(); 96 97 $versions = id(new PhabricatorPackagesVersionQuery()) 98 ->setViewer($viewer) 99 ->withPackagePHIDs(array($package->getPHID())) 100 ->setLimit(25) 101 ->execute(); 102 103 $versions_list = id(new PhabricatorPackagesVersionListView()) 104 ->setViewer($viewer) 105 ->setVersions($versions); 106 107 $all_href = urisprintf( 108 'version/?package=%s#R', 109 $package->getPHID()); 110 $all_href = $this->getApplicationURI($all_href); 111 112 $view_all = id(new PHUIButtonView()) 113 ->setTag('a') 114 ->setIcon('fa-search') 115 ->setText(pht('View All')) 116 ->setHref($all_href); 117 118 $header = id(new PHUIHeaderView()) 119 ->setHeader(pht('Versions')) 120 ->addActionLink($view_all); 121 122 $versions_view = id(new PHUIObjectBoxView()) 123 ->setHeader($header) 124 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 125 ->setObjectList($versions_list); 126 127 return $versions_view; 128 } 129}