protected function newEditableObject()
 {
     $viewer = $this->getViewer();
     $panel = PhabricatorDashboardPanel::initializeNewPanel($viewer);
     if ($this->panelType) {
         $panel->setPanelType($this->panelType);
     }
     return $panel;
 }
 private function newPanel(AphrontRequest $request, PhabricatorUser $viewer, $type, $name, array $properties)
 {
     $panel = PhabricatorDashboardPanel::initializeNewPanel($viewer)->setPanelType($type)->setProperties($properties);
     $xactions = array();
     $xactions[] = id(new PhabricatorDashboardPanelTransaction())->setTransactionType(PhabricatorDashboardPanelTransaction::TYPE_NAME)->setNewValue($name);
     $editor = id(new PhabricatorDashboardPanelTransactionEditor())->setActor($viewer)->setContinueOnNoEffect(true)->setContentSourceFromRequest($request)->applyTransactions($panel, $xactions);
     return $panel;
 }
 private function copyPanel(AphrontRequest $request, PhabricatorDashboard $dashboard, PhabricatorDashboardPanel $panel)
 {
     $viewer = $request->getUser();
     $copy = PhabricatorDashboardPanel::initializeNewPanel($viewer);
     $copy = PhabricatorDashboardPanel::copyPanel($copy, $panel);
     $copy->openTransaction();
     $copy->save();
     // TODO: This should record a transaction on the panel copy, too.
     $xactions = array();
     $xactions[] = id(new PhabricatorDashboardTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDGE)->setMetadataValue('edge:type', PhabricatorDashboardDashboardHasPanelEdgeType::EDGECONST)->setNewValue(array('+' => array($copy->getPHID() => $copy->getPHID()), '-' => array($panel->getPHID() => $panel->getPHID())));
     $layout_config = $dashboard->getLayoutConfigObject();
     $layout_config->replacePanel($panel->getPHID(), $copy->getPHID());
     $dashboard->setLayoutConfigFromObject($layout_config);
     $dashboard->save();
     $editor = id(new PhabricatorDashboardTransactionEditor())->setActor($viewer)->setContentSourceFromRequest($request)->setContinueOnMissingFields(true)->setContinueOnNoEffect(true)->applyTransactions($dashboard, $xactions);
     $copy->saveTransaction();
     return $copy;
 }