Differential D9204 Diff 31630 src/applications/spaces/controller/PhabricatorSpacesViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/spaces/controller/PhabricatorSpacesViewController.php
- This file was added.
| <?php | |||||
| final class PhabricatorSpacesViewController | |||||
| extends PhabricatorSpacesController { | |||||
| public function shouldAllowPublic() { | |||||
| return true; | |||||
| } | |||||
| public function handleRequest(AphrontRequest $request) { | |||||
| $viewer = $this->getViewer(); | |||||
| $space = id(new PhabricatorSpacesNamespaceQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withIDs(array($request->getURIData('id'))) | |||||
| ->executeOne(); | |||||
| if (!$space) { | |||||
| return new Aphront404Response(); | |||||
| } | |||||
| $action_list = $this->buildActionListView($space); | |||||
| $property_list = $this->buildPropertyListView($space); | |||||
| $property_list->setActionList($action_list); | |||||
| $xactions = id(new PhabricatorSpacesNamespaceTransactionQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withObjectPHIDs(array($space->getPHID())) | |||||
| ->execute(); | |||||
| $timeline = $this->buildTransactionTimeline( | |||||
| $space, | |||||
| new PhabricatorSpacesNamespaceTransactionQuery()); | |||||
| $timeline->setShouldTerminate(true); | |||||
| $header = id(new PHUIHeaderView()) | |||||
| ->setUser($viewer) | |||||
| ->setHeader($space->getNamespaceName()) | |||||
| ->setPolicyObject($space); | |||||
| $box = id(new PHUIObjectBoxView()) | |||||
| ->setHeader($header) | |||||
| ->addPropertyList($property_list); | |||||
| $crumbs = $this->buildApplicationCrumbs(); | |||||
| $crumbs->addTextCrumb($space->getMonogram()); | |||||
| return $this->buildApplicationPage( | |||||
| array( | |||||
| $crumbs, | |||||
| $box, | |||||
| $timeline, | |||||
| ), | |||||
| array( | |||||
| 'title' => array($space->getMonogram(), $space->getNamespaceName()), | |||||
| )); | |||||
| } | |||||
| private function buildPropertyListView(PhabricatorSpacesNamespace $space) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $list = id(new PHUIPropertyListView()) | |||||
| ->setUser($viewer); | |||||
| $list->addProperty( | |||||
| pht('Default Space'), | |||||
| $space->getIsDefaultNamespace() | |||||
| ? pht('Yes') | |||||
| : pht('No')); | |||||
| $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions( | |||||
| $viewer, | |||||
| $space); | |||||
| $list->addProperty( | |||||
| pht('Editable By'), | |||||
| $descriptions[PhabricatorPolicyCapability::CAN_EDIT]); | |||||
| return $list; | |||||
| } | |||||
| private function buildActionListView(PhabricatorSpacesNamespace $space) { | |||||
| $viewer = $this->getRequest()->getUser(); | |||||
| $list = id(new PhabricatorActionListView()) | |||||
| ->setUser($viewer) | |||||
| ->setObjectURI('/'.$space->getMonogram()); | |||||
| $can_edit = PhabricatorPolicyFilter::hasCapability( | |||||
| $viewer, | |||||
| $space, | |||||
| PhabricatorPolicyCapability::CAN_EDIT); | |||||
| $list->addAction( | |||||
| id(new PhabricatorActionView()) | |||||
| ->setName(pht('Edit Space')) | |||||
| ->setIcon('fa-pencil') | |||||
| ->setHref($this->getApplicationURI('edit/'.$space->getID().'/')) | |||||
| ->setWorkflow(!$can_edit) | |||||
| ->setDisabled(!$can_edit)); | |||||
| return $list; | |||||
| } | |||||
| } | |||||