private function buildActionView(PhabricatorDashboard $dashboard)
 {
     $viewer = $this->getRequest()->getUser();
     $id = $dashboard->getID();
     $actions = id(new PhabricatorActionListView())->setObjectURI($this->getApplicationURI('view/' . $dashboard->getID() . '/'))->setObject($dashboard)->setUser($viewer);
     $can_edit = PhabricatorPolicyFilter::hasCapability($viewer, $dashboard, PhabricatorPolicyCapability::CAN_EDIT);
     $actions->addAction(id(new PhabricatorActionView())->setName(pht('View Dashboard'))->setIcon('fa-columns')->setHref($this->getApplicationURI("view/{$id}/")));
     $actions->addAction(id(new PhabricatorActionView())->setName(pht('Edit Dashboard'))->setIcon('fa-pencil')->setHref($this->getApplicationURI("edit/{$id}/"))->setDisabled(!$can_edit));
     if ($dashboard->isArchived()) {
         $actions->addAction(id(new PhabricatorActionView())->setName(pht('Activate Dashboard'))->setIcon('fa-check')->setHref($this->getApplicationURI("archive/{$id}/"))->setDisabled(!$can_edit)->setWorkflow($can_edit));
     } else {
         $actions->addAction(id(new PhabricatorActionView())->setName(pht('Archive Dashboard'))->setIcon('fa-ban')->setHref($this->getApplicationURI("archive/{$id}/"))->setDisabled(!$can_edit)->setWorkflow($can_edit));
     }
     $actions->addAction(id(new PhabricatorActionView())->setName(pht('Copy Dashboard'))->setIcon('fa-files-o')->setHref($this->getApplicationURI("copy/{$id}/"))->setWorkflow(true));
     $installed_dashboard = id(new PhabricatorDashboardInstall())->loadOneWhere('objectPHID = %s AND applicationClass = %s', $viewer->getPHID(), 'PhabricatorHomeApplication');
     if ($installed_dashboard && $installed_dashboard->getDashboardPHID() == $dashboard->getPHID()) {
         $title_install = pht('Uninstall Dashboard');
         $href_install = "uninstall/{$id}/";
     } else {
         $title_install = pht('Install Dashboard');
         $href_install = "install/{$id}/";
     }
     $actions->addAction(id(new PhabricatorActionView())->setName($title_install)->setIcon('fa-wrench')->setHref($this->getApplicationURI($href_install))->setWorkflow(true));
     $actions->addAction(id(new PhabricatorActionView())->setName(pht('View History'))->setIcon('fa-history')->setHref($this->getApplicationURI("history/{$id}/")));
     return $actions;
 }
 private function processPanelCloneRequest(AphrontRequest $request, PhabricatorDashboard $dashboard, PhabricatorDashboardPanel $panel)
 {
     $viewer = $request->getUser();
     $manage_uri = $this->getApplicationURI('manage/' . $dashboard->getID() . '/');
     return $this->newDialog()->setTitle(pht('Copy Panel?'))->addHiddenInput('copy', true)->addHiddenInput('dashboardID', $request->getInt('dashboardID'))->addHiddenInput('column', $request->getInt('column'))->appendParagraph(pht('You do not have permission to edit this dashboard panel, but you ' . 'can make a copy and edit that instead. If you choose to copy the ' . 'panel, the original will be replaced with the new copy on this ' . 'dashboard.'))->appendParagraph(pht('Do you want to make a copy of this panel?'))->addCancelButton($manage_uri)->addSubmitButton(pht('Copy Panel'));
 }