[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/harbormaster/controller/ -> HarbormasterBuildableActionController.php (source)

   1  <?php
   2  
   3  final class HarbormasterBuildableActionController
   4    extends HarbormasterController {
   5  
   6    private $id;
   7    private $action;
   8  
   9    public function willProcessRequest(array $data) {
  10      $this->id = $data['id'];
  11      $this->action = $data['action'];
  12    }
  13  
  14    public function processRequest() {
  15      $request = $this->getRequest();
  16      $viewer = $request->getUser();
  17      $command = $this->action;
  18  
  19      $buildable = id(new HarbormasterBuildableQuery())
  20        ->setViewer($viewer)
  21        ->withIDs(array($this->id))
  22        ->needBuilds(true)
  23        ->requireCapabilities(
  24          array(
  25            PhabricatorPolicyCapability::CAN_VIEW,
  26            PhabricatorPolicyCapability::CAN_EDIT,
  27          ))
  28        ->executeOne();
  29      if (!$buildable) {
  30        return new Aphront404Response();
  31      }
  32  
  33      $issuable = array();
  34  
  35      foreach ($buildable->getBuilds() as $build) {
  36        switch ($command) {
  37          case HarbormasterBuildCommand::COMMAND_RESTART:
  38            if ($build->canRestartBuild()) {
  39              $issuable[] = $build;
  40            }
  41            break;
  42          case HarbormasterBuildCommand::COMMAND_STOP:
  43            if ($build->canStopBuild()) {
  44              $issuable[] = $build;
  45            }
  46            break;
  47          case HarbormasterBuildCommand::COMMAND_RESUME:
  48            if ($build->canResumeBuild()) {
  49              $issuable[] = $build;
  50            }
  51            break;
  52          default:
  53            return new Aphront400Response();
  54        }
  55      }
  56  
  57      $return_uri = '/'.$buildable->getMonogram();
  58      if ($request->isDialogFormPost() && $issuable) {
  59        $editor = id(new HarbormasterBuildableTransactionEditor())
  60          ->setActor($viewer)
  61          ->setContentSourceFromRequest($request)
  62          ->setContinueOnNoEffect(true)
  63          ->setContinueOnMissingFields(true);
  64  
  65        $xaction = id(new HarbormasterBuildableTransaction())
  66          ->setTransactionType(HarbormasterBuildableTransaction::TYPE_COMMAND)
  67          ->setNewValue($command);
  68  
  69        $editor->applyTransactions($buildable, array($xaction));
  70  
  71        $build_editor = id(new HarbormasterBuildTransactionEditor())
  72          ->setActor($viewer)
  73          ->setContentSourceFromRequest($request)
  74          ->setContinueOnNoEffect(true)
  75          ->setContinueOnMissingFields(true);
  76  
  77        foreach ($issuable as $build) {
  78          $xaction = id(new HarbormasterBuildTransaction())
  79            ->setTransactionType(HarbormasterBuildTransaction::TYPE_COMMAND)
  80            ->setNewValue($command);
  81          $build_editor->applyTransactions($build, array($xaction));
  82        }
  83  
  84        return id(new AphrontRedirectResponse())->setURI($return_uri);
  85      }
  86  
  87      switch ($command) {
  88        case HarbormasterBuildCommand::COMMAND_RESTART:
  89          if ($issuable) {
  90            $title = pht('Really restart all builds?');
  91            $body = pht(
  92              'Progress on all builds will be discarded, and all builds will '.
  93              'restart. Side effects of the builds will occur again. Really '.
  94              'restart all builds?');
  95            $submit = pht('Restart All Builds');
  96          } else {
  97            $title = pht('Unable to Restart Build');
  98            $body = pht('No builds can be restarted.');
  99          }
 100          break;
 101        case HarbormasterBuildCommand::COMMAND_STOP:
 102          if ($issuable) {
 103            $title = pht('Really stop all builds?');
 104            $body = pht(
 105              'If you stop all build, work will halt once the current steps '.
 106              'complete. You can resume the builds later.');
 107            $submit = pht('Stop All Builds');
 108          } else {
 109            $title = pht('Unable to Stop Build');
 110            $body = pht('No builds can be stopped.');
 111          }
 112          break;
 113        case HarbormasterBuildCommand::COMMAND_RESUME:
 114          if ($issuable) {
 115            $title = pht('Really resume all builds?');
 116            $body = pht('Work will continue on all builds. Really resume?');
 117            $submit = pht('Resume All Builds');
 118          } else {
 119            $title = pht('Unable to Resume Build');
 120            $body = pht('No builds can be resumed.');
 121          }
 122          break;
 123      }
 124  
 125      $dialog = id(new AphrontDialogView())
 126        ->setUser($viewer)
 127        ->setTitle($title)
 128        ->appendChild($body)
 129        ->addCancelButton($return_uri);
 130  
 131      if ($issuable) {
 132        $dialog->addSubmitButton($submit);
 133      }
 134  
 135      return id(new AphrontDialogResponse())->setDialog($dialog);
 136    }
 137  
 138  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1