private function loadAdapter(AphrontRequest $request) { $viewer = $this->getViewer(); $object = $this->getTestObject(); $adapter_key = $request->getStr('adapter'); $adapters = HeraldAdapter::getAllAdapters(); $can_select = array(); $display_adapters = array(); foreach ($adapters as $key => $adapter) { if (!$adapter->isTestAdapterForObject($object)) { continue; } if (!$adapter->isAvailableToUser($viewer)) { continue; } $display_adapters[$key] = $adapter; if ($adapter->canCreateTestAdapterForObject($object)) { $can_select[$key] = $adapter; } } if ($request->isFormPost() && $adapter_key) { if (isset($can_select[$adapter_key])) { $adapter = $can_select[$adapter_key]->newTestAdapter($viewer, $object); $this->setTestAdapter($adapter); return null; } } $form = id(new AphrontFormView())->addHiddenInput('object_name', $request->getStr('object_name'))->setViewer($viewer); $cancel_uri = $this->getApplicationURI(); if (!$display_adapters) { $form->appendRemarkupInstructions(pht('//There are no available Herald events for this object.//'))->appendControl(id(new AphrontFormSubmitControl())->addCancelButton($cancel_uri)); } else { $adapter_control = id(new AphrontFormRadioButtonControl())->setLabel(pht('Event'))->setName('adapter')->setValue(head_key($can_select)); foreach ($display_adapters as $adapter_key => $adapter) { $is_disabled = empty($can_select[$adapter_key]); $adapter_control->addButton($adapter_key, $adapter->getAdapterContentName(), $adapter->getAdapterTestDescription(), null, $is_disabled); } $form->appendControl($adapter_control)->appendControl(id(new AphrontFormSubmitControl())->setValue(pht('Run Test'))); } return $this->buildTestConsoleResponse($form, array()); }
public static function getEnabledAdapterMap(PhabricatorUser $viewer) { $map = array(); $adapters = HeraldAdapter::getAllAdapters(); foreach ($adapters as $adapter) { if (!$adapter->isAvailableToUser($viewer)) { continue; } $type = $adapter->getAdapterContentType(); $name = $adapter->getAdapterContentName(); $map[$type] = $name; } return $map; }