public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); $id = $request->getURIData('id'); $dashboard = id(new PhabricatorDashboardQuery())->setViewer($viewer)->withIDs(array($id))->needPanels(true)->executeOne(); if (!$dashboard) { return new Aphront404Response(); } $manage_uri = $this->getApplicationURI('manage/' . $dashboard->getID() . '/'); if ($request->isFormPost()) { $copy = PhabricatorDashboard::initializeNewDashboard($viewer); $copy = PhabricatorDashboard::copyDashboard($copy, $dashboard); $copy->setName(pht('Copy of %s', $copy->getName())); // Set up all the edges for the new dashboard. $xactions = array(); $xactions[] = id(new PhabricatorDashboardTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDGE)->setMetadataValue('edge:type', PhabricatorDashboardDashboardHasPanelEdgeType::EDGECONST)->setNewValue(array('=' => array_fuse($dashboard->getPanelPHIDs()))); $editor = id(new PhabricatorDashboardTransactionEditor())->setActor($viewer)->setContentSourceFromRequest($request)->setContinueOnMissingFields(true)->setContinueOnNoEffect(true)->applyTransactions($copy, $xactions); $manage_uri = $this->getApplicationURI('edit/' . $copy->getID() . '/'); return id(new AphrontRedirectResponse())->setURI($manage_uri); } return $this->newDialog()->setTitle(pht('Copy Dashboard'))->appendParagraph(pht('Create a copy of the dashboard "%s"?', phutil_tag('strong', array(), $dashboard->getName())))->addCancelButton($manage_uri)->addSubmitButton(pht('Create Copy')); }