public function processRequest() { $request = $this->getRequest(); $viewer = $request->getUser(); if ($this->id) { $dashboard = id(new PhabricatorDashboardQuery())->setViewer($viewer)->withIDs(array($this->id))->needPanels(true)->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne(); if (!$dashboard) { return new Aphront404Response(); } $v_projects = PhabricatorEdgeQuery::loadDestinationPHIDs($dashboard->getPHID(), PhabricatorProjectObjectHasProjectEdgeType::EDGECONST); $v_projects = array_reverse($v_projects); $is_new = false; } else { if (!$request->getStr('edit')) { if ($request->isFormPost()) { switch ($request->getStr('template')) { case 'empty': break; default: return $this->processBuildTemplateRequest($request); } } else { return $this->processTemplateRequest($request); } } $dashboard = PhabricatorDashboard::initializeNewDashboard($viewer); $v_projects = array(); $is_new = true; } $crumbs = $this->buildApplicationCrumbs(); if ($is_new) { $title = pht('Create Dashboard'); $header = pht('Create Dashboard'); $button = pht('Create Dashboard'); $cancel_uri = $this->getApplicationURI(); $crumbs->addTextCrumb(pht('Create Dashboard')); } else { $id = $dashboard->getID(); $cancel_uri = $this->getApplicationURI('manage/' . $id . '/'); $title = pht('Edit Dashboard %d', $dashboard->getID()); $header = pht('Edit Dashboard "%s"', $dashboard->getName()); $button = pht('Save Changes'); $crumbs->addTextCrumb(pht('Dashboard %d', $id), $cancel_uri); $crumbs->addTextCrumb(pht('Edit')); } $v_name = $dashboard->getName(); $v_layout_mode = $dashboard->getLayoutConfigObject()->getLayoutMode(); $e_name = true; $validation_exception = null; if ($request->isFormPost() && $request->getStr('edit')) { $v_name = $request->getStr('name'); $v_layout_mode = $request->getStr('layout_mode'); $v_view_policy = $request->getStr('viewPolicy'); $v_edit_policy = $request->getStr('editPolicy'); $v_projects = $request->getArr('projects'); $xactions = array(); $type_name = PhabricatorDashboardTransaction::TYPE_NAME; $type_layout_mode = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE; $type_view_policy = PhabricatorTransactions::TYPE_VIEW_POLICY; $type_edit_policy = PhabricatorTransactions::TYPE_EDIT_POLICY; $xactions[] = id(new PhabricatorDashboardTransaction())->setTransactionType($type_name)->setNewValue($v_name); $xactions[] = id(new PhabricatorDashboardTransaction())->setTransactionType($type_layout_mode)->setNewValue($v_layout_mode); $xactions[] = id(new PhabricatorDashboardTransaction())->setTransactionType($type_view_policy)->setNewValue($v_view_policy); $xactions[] = id(new PhabricatorDashboardTransaction())->setTransactionType($type_edit_policy)->setNewValue($v_edit_policy); $proj_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST; $xactions[] = id(new PhabricatorDashboardTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDGE)->setMetadataValue('edge:type', $proj_edge_type)->setNewValue(array('=' => array_fuse($v_projects))); try { $editor = id(new PhabricatorDashboardTransactionEditor())->setActor($viewer)->setContinueOnNoEffect(true)->setContentSourceFromRequest($request)->applyTransactions($dashboard, $xactions); $uri = $this->getApplicationURI('manage/' . $dashboard->getID() . '/'); return id(new AphrontRedirectResponse())->setURI($uri); } catch (PhabricatorApplicationTransactionValidationException $ex) { $validation_exception = $ex; $e_name = $validation_exception->getShortMessage($type_name); $dashboard->setViewPolicy($v_view_policy); $dashboard->setEditPolicy($v_edit_policy); } } $policies = id(new PhabricatorPolicyQuery())->setViewer($viewer)->setObject($dashboard)->execute(); $layout_mode_options = PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions(); $form = id(new AphrontFormView())->setUser($viewer)->addHiddenInput('edit', true)->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Name'))->setName('name')->setValue($v_name)->setError($e_name))->appendChild(id(new AphrontFormPolicyControl())->setName('viewPolicy')->setPolicyObject($dashboard)->setCapability(PhabricatorPolicyCapability::CAN_VIEW)->setPolicies($policies))->appendChild(id(new AphrontFormPolicyControl())->setName('editPolicy')->setPolicyObject($dashboard)->setCapability(PhabricatorPolicyCapability::CAN_EDIT)->setPolicies($policies))->appendChild(id(new AphrontFormSelectControl())->setLabel(pht('Layout Mode'))->setName('layout_mode')->setValue($v_layout_mode)->setOptions($layout_mode_options)); $form->appendControl(id(new AphrontFormTokenizerControl())->setLabel(pht('Projects'))->setName('projects')->setValue($v_projects)->setDatasource(new PhabricatorProjectDatasource())); $form->appendChild(id(new AphrontFormSubmitControl())->setValue($button)->addCancelButton($cancel_uri)); $box = id(new PHUIObjectBoxView())->setHeaderText($header)->setForm($form)->setValidationException($validation_exception); return $this->buildApplicationPage(array($crumbs, $box), array('title' => $title)); }
public function setLayoutConfigFromObject(PhabricatorDashboardLayoutConfig $object) { $this->setLayoutConfig($object->toDictionary()); return $this; }