Changeset View
Changeset View
Standalone View
Standalone View
src/applications/packages/controller/PackagesViewController.php
- This file was added.
| <?php | |||||
| final class PackagesViewController | |||||
| extends PackagesController { | |||||
| public function shouldAllowPublic() { | |||||
| return true; | |||||
| } | |||||
| public function handleRequest(AphrontRequest $request) { | |||||
| $viewer = $request->getViewer(); | |||||
| $id = $request->getURIData('id'); | |||||
| $package = id(new PackagesPackageQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withIDs(array($id)) | |||||
| ->executeOne(); | |||||
| if (!$package) { | |||||
| return new Aphront404Response(); | |||||
| } | |||||
| $crumbs = $this->buildApplicationCrumbs(); | |||||
| $crumbs->addTextCrumb($package->getName()); | |||||
| $title = pht( | |||||
| '%s', | |||||
| $package->getName()); | |||||
| $status_icon = 'fa-archive'; | |||||
| $status_color = 'bluegrey'; | |||||
| $header = id(new PHUIHeaderView()) | |||||
| ->setHeader($package->getName()) | |||||
| ->setUser($viewer) | |||||
| ->setPolicyObject($package); | |||||
| $properties = $this->buildPropertyListView($package); | |||||
| $actions = $this->buildActionListView($package); | |||||
| $properties->setActionList($actions); | |||||
| $box = id(new PHUIObjectBoxView()) | |||||
| ->setHeader($header) | |||||
| ->addPropertyList($properties); | |||||
| $versions = $this->buildVersionsList($package); | |||||
| $timeline = $this->buildTransactionTimeline( | |||||
| $package, | |||||
| new FundInitiativeTransactionQuery()); | |||||
| $timeline | |||||
| ->setShouldTerminate(true); | |||||
| return $this->buildApplicationPage( | |||||
| array( | |||||
| $crumbs, | |||||
| $box, | |||||
| $versions, | |||||
| $timeline, | |||||
| ), | |||||
| array( | |||||
| 'title' => $title, | |||||
| 'pageObjects' => array($package->getPHID()), | |||||
| )); | |||||
| } | |||||
| private function buildPropertyListView(PackagesPackage $package) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $view = id(new PHUIPropertyListView()) | |||||
| ->setUser($viewer) | |||||
| ->setObject($package); | |||||
| $view->invokeWillRenderEvent(); | |||||
| $description = $package->getDescription(); | |||||
| 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(PackagesPackage $package) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $id = $package->getID(); | |||||
| $can_edit = PhabricatorPolicyFilter::hasCapability( | |||||
| $viewer, | |||||
| $package, | |||||
| PhabricatorPolicyCapability::CAN_EDIT); | |||||
| $view = id(new PhabricatorActionListView()) | |||||
| ->setUser($viewer) | |||||
| ->setObject($package); | |||||
| $view->addAction( | |||||
| id(new PhabricatorActionView()) | |||||
| ->setName(pht('Edit Package')) | |||||
| ->setIcon('fa-pencil') | |||||
| ->setDisabled(!$can_edit) | |||||
| ->setWorkflow(!$can_edit) | |||||
| ->setHref($this->getApplicationURI("package/edit/{$id}/"))); | |||||
| $view->addAction( | |||||
| id(new PhabricatorActionView()) | |||||
| ->setName(pht('See Versions')) | |||||
| ->setIcon('fa-search') | |||||
| ->setHref($this->getApplicationURI( | |||||
| "version/?packages={$package->getPHID()}"))); | |||||
| $view->addAction( | |||||
| id(new PhabricatorActionView()) | |||||
| ->setName(pht('Create a Version')) | |||||
| ->setIcon('fa-scissors') | |||||
| ->setDisabled(!$can_edit) | |||||
| ->setWorkflow(!$can_edit) | |||||
| ->setHref($this->getApplicationURI("version/create/?package={$id}"))); | |||||
| return $view; | |||||
| } | |||||
| private function buildVersionsList(PackagesPackage $package) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $versions = id(new PackagesVersionQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withPackagePHIDs(array($package->getPHID())) | |||||
| ->setOrder('newest') | |||||
| ->setLimit(6) | |||||
| ->execute(); | |||||
| $list = new PHUIObjectItemListView(); | |||||
| $list->setNoDataString(pht('This package has no versions.')); | |||||
| foreach ($versions as $version) { | |||||
| $item = id(new PHUIObjectItemView()) | |||||
| ->setHeader($version->getTitle()) | |||||
| ->setHref($version->getURI()); | |||||
| $description = $version->getProperty('version:description'); | |||||
| if (strlen($description)) { | |||||
| $description = PhabricatorMarkupEngine::renderOneObject( | |||||
| id(new PhabricatorMarkupOneOff())->setContent($description), | |||||
| 'default', | |||||
| $viewer); | |||||
| $item->addAttribute($description); | |||||
| } | |||||
| $list->addItem($item); | |||||
| } | |||||
| $box = id(new PHUIObjectBoxView()) | |||||
| ->setHeaderText('Latest Versions') | |||||
| ->setObjectList($list); | |||||
| return $box; | |||||
| } | |||||
| } | |||||