Differential D14152 Diff 34437 src/applications/packages/controller/PackagesVersionViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/packages/controller/PackagesVersionViewController.php
- This file was added.
| <?php | |||||
| final class PackagesVersionViewController | |||||
| extends PackagesController { | |||||
| public function shouldAllowPublic() { | |||||
| return true; | |||||
| } | |||||
| public function handleRequest(AphrontRequest $request) { | |||||
| $viewer = $request->getViewer(); | |||||
| $id = $request->getURIData('id'); | |||||
| $version = id(new PackagesVersionQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withIDs(array($id)) | |||||
| ->executeOne(); | |||||
| if (!$version) { | |||||
| return 'no'; | |||||
| } | |||||
| $package = id(new PackagesPackageQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withPHIDs(array($version->getPackagePHID())) | |||||
| ->executeOne(); | |||||
| $crumbs = $this->buildApplicationCrumbs(); | |||||
| $crumbs->addTextCrumb($package->getName(), $package->getURI()); | |||||
| $crumbs->addTextCrumb($version->getTitle()); | |||||
| $title = pht( | |||||
| '%s', | |||||
| $version->getTitle()); | |||||
| $header = id(new PHUIHeaderView()) | |||||
| ->setHeader($package->getName().' '.$version->getTitle()) | |||||
| ->setUser($viewer) | |||||
| ->setPolicyObject($version); | |||||
| $properties = $this->buildPropertyListView($version); | |||||
| $actions = $this->buildActionListView($version); | |||||
| $properties->setActionList($actions); | |||||
| $box = id(new PHUIObjectBoxView()) | |||||
| ->setHeader($header) | |||||
| ->addPropertyList($properties); | |||||
| $signatures = $this->buildSignaturesList($version); | |||||
| $timeline = $this->buildTransactionTimeline( | |||||
| $version, | |||||
| new FundInitiativeTransactionQuery()); | |||||
| $timeline | |||||
| ->setShouldTerminate(true); | |||||
| return $this->buildApplicationPage( | |||||
| array( | |||||
| $crumbs, | |||||
| $box, | |||||
| $signatures, | |||||
| $timeline, | |||||
| ), | |||||
| array( | |||||
| 'title' => $title, | |||||
| 'pageObjects' => array($version->getPHID()), | |||||
| )); | |||||
| } | |||||
| private function buildPropertyListView(PackagesVersion $version) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $view = id(new PHUIPropertyListView()) | |||||
| ->setUser($viewer) | |||||
| ->setObject($version); | |||||
| $view->invokeWillRenderEvent(); | |||||
| $view->addProperty( | |||||
| pht('Package'), | |||||
| $viewer->renderHandle($version->getPackagePHID())); | |||||
| $view->addProperty( | |||||
| pht('Commit Hash'), | |||||
| $version->getProperty('version:commithash')); | |||||
| $view->addProperty( | |||||
| pht('Release Date'), | |||||
| $version->getProperty('version:releasedate')); | |||||
| $description = $version->getProperty('version:description'); | |||||
| if (strlen($description)) { | |||||
| $description = PhabricatorMarkupEngine::renderOneObject( | |||||
| id(new PhabricatorMarkupOneOff())->setContent($description), | |||||
| 'default', | |||||
| $viewer); | |||||
| $view->addSectionHeader(pht('Description')); | |||||
| $view->addTextContent($description); | |||||
| } | |||||
| return $view; | |||||
| } | |||||
| private function buildActionListView(PackagesVersion $version) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $id = $version->getID(); | |||||
| $can_edit = PhabricatorPolicyFilter::hasCapability( | |||||
| $viewer, | |||||
| $version, | |||||
| PhabricatorPolicyCapability::CAN_EDIT); | |||||
| $view = id(new PhabricatorActionListView()) | |||||
| ->setUser($viewer) | |||||
| ->setObject($version); | |||||
| $view->addAction( | |||||
| id(new PhabricatorActionView()) | |||||
| ->setName(pht('Edit Version')) | |||||
| ->setIcon('fa-pencil') | |||||
| ->setDisabled(!$can_edit) | |||||
| ->setWorkflow(!$can_edit) | |||||
| ->setHref($this->getApplicationURI("version/edit/{$id}/"))); | |||||
| return $view; | |||||
| } | |||||
| private function buildSignaturesList(PackagesVersion $version) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $signatures = id(new PackagesSignatureQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withVersionPHIDs(array($version->getPHID())) | |||||
| ->execute(); | |||||
| $list = new PHUIObjectItemListView(); | |||||
| $list->setNoDataString(pht('Nobody.')); | |||||
| foreach ($signatures as $sig) { | |||||
| $item = id(new PHUIObjectItemView()) | |||||
| ->setHeader($viewer->renderHandle($sig->getSignerPHID())) | |||||
| ->addAttribute($sig->getDescription()); | |||||
| $list->addItem($item); | |||||
| } | |||||
| $box = id(new PHUIObjectBoxView()) | |||||
| ->setHeaderText('Vouched For By') | |||||
| ->setObjectList($list); | |||||
| return $box; | |||||
| } | |||||
| } | |||||