private function buildPropertyList(HarbormasterBuildStep $step, PhabricatorCustomFieldList $field_list)
 {
     $viewer = $this->getViewer();
     $view = id(new PHUIPropertyListView())->setUser($viewer);
     try {
         $implementation = $step->getStepImplementation();
     } catch (Exception $ex) {
         $implementation = null;
     }
     if ($implementation) {
         $type = $implementation->getName();
     } else {
         $type = phutil_tag('em', array(), pht('Invalid Implementation ("%s")!', $step->getClassName()));
     }
     $view->addProperty(pht('Step Type'), $type);
     $view->addProperty(pht('Created'), phabricator_datetime($step->getDateCreated(), $viewer));
     $field_list->appendFieldsToPropertyList($step, $viewer, $view);
     $description = $step->getDescription();
     if (strlen($description)) {
         $view->addSectionHeader(pht('Description'), PHUIPropertyListView::ICON_SUMMARY);
         $view->addTextContent(new PHUIRemarkupView($viewer, $description));
     }
     return id(new PHUIObjectBoxView())->setHeaderText(pht('Properties'))->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->appendChild($view);
 }
 public function getDependencies(HarbormasterBuildStep $build_step)
 {
     $dependencies = $build_step->getDetail('dependsOn', array());
     $inputs = $build_step->getStepImplementation()->getArtifactInputs();
     $inputs = ipull($inputs, null, 'key');
     $artifacts = $this->getAvailableArtifacts($build_step->getBuildPlan(), $build_step, null);
     foreach ($artifacts as $key => $type) {
         if (!array_key_exists($key, $inputs)) {
             unset($artifacts[$key]);
         }
     }
     $artifact_steps = ipull($artifacts, 'step');
     $artifact_steps = mpull($artifact_steps, 'getPHID');
     $dependencies = array_merge($dependencies, $artifact_steps);
     return $dependencies;
 }