diff --git a/src/applications/spaces/controller/PhabricatorSpacesEditController.php b/src/applications/spaces/controller/PhabricatorSpacesEditController.php index 4dfeeed7ed..3f7dae9e82 100644 --- a/src/applications/spaces/controller/PhabricatorSpacesEditController.php +++ b/src/applications/spaces/controller/PhabricatorSpacesEditController.php @@ -1,186 +1,194 @@ getUser(); $make_default = false; $id = $request->getURIData('id'); if ($id) { $space = id(new PhabricatorSpacesNamespaceQuery()) ->setViewer($viewer) ->withIDs(array($id)) ->requireCapabilities( array( PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT, )) ->executeOne(); if (!$space) { return new Aphront404Response(); } $is_new = false; $cancel_uri = '/'.$space->getMonogram(); $header_text = pht('Edit %s', $space->getNamespaceName()); $title = pht('Edit Space'); $button_text = pht('Save Changes'); } else { $this->requireApplicationCapability( PhabricatorSpacesCapabilityCreateSpaces::CAPABILITY); $space = PhabricatorSpacesNamespace::initializeNewNamespace($viewer); $is_new = true; $cancel_uri = $this->getApplicationURI(); $header_text = pht('Create Space'); $title = pht('Create Space'); $button_text = pht('Create Space'); $default = id(new PhabricatorSpacesNamespaceQuery()) ->setViewer(PhabricatorUser::getOmnipotentUser()) ->withIsDefaultNamespace(true) ->execute(); if (!$default) { $make_default = true; } } $validation_exception = null; $e_name = true; $v_name = $space->getNamespaceName(); $v_desc = $space->getDescription(); $v_view = $space->getViewPolicy(); $v_edit = $space->getEditPolicy(); if ($request->isFormPost()) { $xactions = array(); $e_name = null; $v_name = $request->getStr('name'); $v_desc = $request->getStr('description'); $v_view = $request->getStr('viewPolicy'); $v_edit = $request->getStr('editPolicy'); $type_name = PhabricatorSpacesNamespaceTransaction::TYPE_NAME; $type_desc = PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION; $type_default = PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT; $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) ->setTransactionType($type_name) ->setNewValue($v_name); $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) ->setTransactionType($type_desc) ->setNewValue($v_desc); $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) ->setTransactionType($type_view) ->setNewValue($v_view); $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) ->setTransactionType($type_edit) ->setNewValue($v_edit); if ($make_default) { $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) ->setTransactionType($type_default) ->setNewValue(1); } $editor = id(new PhabricatorSpacesNamespaceEditor()) ->setActor($viewer) ->setContinueOnNoEffect(true) ->setContentSourceFromRequest($request); try { $editor->applyTransactions($space, $xactions); return id(new AphrontRedirectResponse()) ->setURI('/'.$space->getMonogram()); } catch (PhabricatorApplicationTransactionValidationException $ex) { $validation_exception = $ex; $e_name = $ex->getShortMessage($type_name); } } $policies = id(new PhabricatorPolicyQuery()) ->setViewer($viewer) ->setObject($space) ->execute(); $form = id(new AphrontFormView()) ->setUser($viewer); if ($make_default) { $form->appendRemarkupInstructions( pht( 'NOTE: You are creating the **default space**. All existing '. 'objects will be put into this space. You must create a default '. 'space before you can create other spaces.')); } $form ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Name')) ->setName('name') ->setValue($v_name) ->setError($e_name)) ->appendControl( id(new PhabricatorRemarkupControl()) ->setLabel(pht('Description')) ->setName('description') ->setValue($v_desc)) ->appendChild( id(new AphrontFormPolicyControl()) ->setUser($viewer) ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) ->setPolicyObject($space) ->setPolicies($policies) ->setValue($v_view) ->setName('viewPolicy')) ->appendChild( id(new AphrontFormPolicyControl()) ->setUser($viewer) ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) ->setPolicyObject($space) ->setPolicies($policies) ->setValue($v_edit) ->setName('editPolicy')) ->appendChild( id(new AphrontFormSubmitControl()) ->setValue($button_text) ->addCancelButton($cancel_uri)); $box = id(new PHUIObjectBoxView()) - ->setHeaderText($header_text) + ->setHeaderText(pht('Space')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setValidationException($validation_exception) ->appendChild($form); $crumbs = $this->buildApplicationCrumbs(); if (!$is_new) { $crumbs->addTextCrumb( $space->getMonogram(), $cancel_uri); } $crumbs->addTextCrumb($title); - - return $this->buildApplicationPage( - array( - $crumbs, - $box, - ), - array( - 'title' => $title, - )); + $crumbs->setBorder(true); + + $header = id(new PHUIHeaderView()) + ->setHeader($header_text) + ->setHeaderIcon('fa-pencil'); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $box, + )); + + return $this->newPage() + ->setTitle($title) + ->setCrumbs($crumbs) + ->appendChild($view); } } diff --git a/src/applications/spaces/controller/PhabricatorSpacesViewController.php b/src/applications/spaces/controller/PhabricatorSpacesViewController.php index 25bb70f646..8319f19a6e 100644 --- a/src/applications/spaces/controller/PhabricatorSpacesViewController.php +++ b/src/applications/spaces/controller/PhabricatorSpacesViewController.php @@ -1,138 +1,144 @@ getViewer(); $space = id(new PhabricatorSpacesNamespaceQuery()) ->setViewer($viewer) ->withIDs(array($request->getURIData('id'))) ->executeOne(); if (!$space) { return new Aphront404Response(); } - $action_list = $this->buildActionListView($space); + $curtain = $this->buildCurtain($space); $property_list = $this->buildPropertyListView($space); - $property_list->setActionList($action_list); + $title = array($space->getMonogram(), $space->getNamespaceName()); $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); + ->setPolicyObject($space) + ->setHeaderIcon('fa-th-large'); if ($space->getIsArchived()) { $header->setStatus('fa-ban', 'red', pht('Archived')); } else { $header->setStatus('fa-check', 'bluegrey', pht('Active')); } $box = id(new PHUIObjectBoxView()) - ->setHeader($header) + ->setHeaderText(pht('DETAILS')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($property_list); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb($space->getMonogram()); + $crumbs->setBorder(true); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setMainColumn(array( + $box, + $timeline, + )) + ->setCurtain($curtain); + + return $this->newPage() + ->setTitle($title) + ->setCrumbs($crumbs) + ->appendChild($view); - 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]); $description = $space->getDescription(); if (strlen($description)) { $description = new PHUIRemarkupView($viewer, $description); $list->addSectionHeader( pht('Description'), PHUIPropertyListView::ICON_SUMMARY); $list->addTextContent($description); } return $list; } - private function buildActionListView(PhabricatorSpacesNamespace $space) { + private function buildCurtain(PhabricatorSpacesNamespace $space) { $viewer = $this->getRequest()->getUser(); - $list = id(new PhabricatorActionListView()) - ->setUser($viewer); + $curtain = $this->newCurtainView($space); $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $space, PhabricatorPolicyCapability::CAN_EDIT); - $list->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName(pht('Edit Space')) ->setIcon('fa-pencil') ->setHref($this->getApplicationURI('edit/'.$space->getID().'/')) ->setWorkflow(!$can_edit) ->setDisabled(!$can_edit)); $id = $space->getID(); if ($space->getIsArchived()) { - $list->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName(pht('Activate Space')) ->setIcon('fa-check') ->setHref($this->getApplicationURI("activate/{$id}/")) ->setDisabled(!$can_edit) ->setWorkflow(true)); } else { - $list->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName(pht('Archive Space')) ->setIcon('fa-ban') ->setHref($this->getApplicationURI("archive/{$id}/")) ->setDisabled(!$can_edit) ->setWorkflow(true)); } - return $list; + return $curtain; } }