Path: blob/master/src/applications/dashboard/controller/PhabricatorDashboardQueryPanelInstallController.php
12242 views
<?php12final class PhabricatorDashboardQueryPanelInstallController3extends PhabricatorDashboardController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();78$v_dashboard = null;9$e_dashboard = null;1011$v_name = null;12$e_name = true;1314$v_engine = $request->getStr('engine');15if (!strlen($v_engine)) {16$v_engine = $request->getURIData('engineKey');17}1819$v_query = $request->getStr('query');20if (!strlen($v_query)) {21$v_query = $request->getURIData('queryKey');22}2324$engines = PhabricatorApplicationSearchEngine::getAllEngines();25$engine = idx($engines, $v_engine);26if ($engine) {27$engine = id(clone $engine)28->setViewer($viewer);2930$redirect_uri = $engine->getQueryResultsPageURI($v_query);3132$named_query = idx($engine->loadEnabledNamedQueries(), $v_query);33if ($named_query) {34$v_name = $named_query->getQueryName();35}36} else {37$redirect_uri = '/';38}3940$errors = array();4142$xaction_name = PhabricatorDashboardPanelNameTransaction::TRANSACTIONTYPE;43$xaction_engine =44PhabricatorDashboardQueryPanelApplicationTransaction::TRANSACTIONTYPE;45$xaction_query =46PhabricatorDashboardQueryPanelQueryTransaction::TRANSACTIONTYPE;4748if ($request->isFormPost()) {49$v_name = $request->getStr('name');50if (!$v_name) {51$errors[] = pht('You must provide a name for this panel.');52$e_name = pht('Required');53}5455$v_dashboard = head($request->getArr('dashboardPHIDs'));56if (!$v_dashboard) {57$errors[] = pht('You must select a dashboard.');58$e_dashboard = pht('Required');59} else {60$dashboard = id(new PhabricatorDashboardQuery())61->setViewer($viewer)62->withPHIDs(array($v_dashboard))63->executeOne();64if (!$dashboard) {65$errors[] = pht('You must select a valid dashboard.');66$e_dashboard = pht('Invalid');67}6869$can_edit = PhabricatorPolicyFilter::hasCapability(70$viewer,71$dashboard,72PhabricatorPolicyCapability::CAN_EDIT);73if (!$can_edit) {74$errors[] = pht(75'You must select a dashboard you have permission to edit.');76}77}7879if (!$errors) {80$done_uri = $dashboard->getURI();8182// First, create a new panel.8384$panel_type = id(new PhabricatorDashboardQueryPanelType())85->getPanelTypeKey();8687$panel = PhabricatorDashboardPanel::initializeNewPanel($viewer)88->setPanelType($panel_type);8990$xactions = array();9192$xactions[] = $panel->getApplicationTransactionTemplate()93->setTransactionType($xaction_engine)94->setNewValue($v_engine);9596$xactions[] = $panel->getApplicationTransactionTemplate()97->setTransactionType($xaction_query)98->setNewValue($v_query);99100$xactions[] = $panel->getApplicationTransactionTemplate()101->setTransactionType($xaction_name)102->setNewValue($v_name);103104$editor = $panel->getApplicationTransactionEditor()105->setActor($viewer)106->setContentSourceFromRequest($request)107->applyTransactions($panel, $xactions);108109// Now that we've created a panel, add it to the dashboard.110111$xactions = array();112113$ref_list = clone $dashboard->getPanelRefList();114$ref_list->newPanelRef($panel);115$new_panels = $ref_list->toDictionary();116117$xactions[] = $dashboard->getApplicationTransactionTemplate()118->setTransactionType(119PhabricatorDashboardPanelsTransaction::TRANSACTIONTYPE)120->setNewValue($new_panels);121122$editor = $dashboard->getApplicationTransactionEditor()123->setActor($viewer)124->setContentSourceFromRequest($request)125->setContinueOnNoEffect(true)126->setContinueOnMissingFields(true)127->applyTransactions($dashboard, $xactions);128129return id(new AphrontRedirectResponse())->setURI($done_uri);130}131}132133if ($v_dashboard) {134$dashboard_phids = array($v_dashboard);135} else {136$dashboard_phids = array();137}138139$form = id(new AphrontFormView())140->setViewer($viewer)141->appendControl(142id(new AphrontFormTextControl())143->setLabel(pht('Name'))144->setName('name')145->setValue($v_name)146->setError($e_name))147->appendControl(148id(new AphrontFormTokenizerControl())149->setValue($dashboard_phids)150->setError($e_dashboard)151->setName('dashboardPHIDs')152->setLimit(1)153->setDatasource(new PhabricatorDashboardDatasource())154->setLabel(pht('Dashboard')));155156return $this->newDialog()157->setTitle(pht('Add Panel to Dashboard'))158->setErrors($errors)159->setWidth(AphrontDialogView::WIDTH_FORM)160->addHiddenInput('engine', $v_engine)161->addHiddenInput('query', $v_query)162->appendForm($form)163->addCancelButton($redirect_uri)164->addSubmitButton(pht('Add Panel'));165166}167168}169170171