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());
 }
예제 #2
0
 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;
 }