[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/drydock/controller/ -> DrydockBlueprintEditController.php (source)

   1  <?php
   2  
   3  final class DrydockBlueprintEditController extends DrydockBlueprintController {
   4  
   5    private $id;
   6  
   7    public function willProcessRequest(array $data) {
   8      $this->id = idx($data, 'id');
   9    }
  10  
  11    public function processRequest() {
  12      $request = $this->getRequest();
  13      $viewer = $request->getUser();
  14  
  15      if ($this->id) {
  16        $blueprint = id(new DrydockBlueprintQuery())
  17          ->setViewer($viewer)
  18          ->withIDs(array($this->id))
  19          ->requireCapabilities(
  20            array(
  21              PhabricatorPolicyCapability::CAN_VIEW,
  22              PhabricatorPolicyCapability::CAN_EDIT,
  23            ))
  24          ->executeOne();
  25        if (!$blueprint) {
  26          return new Aphront404Response();
  27        }
  28  
  29        $impl = $blueprint->getImplementation();
  30        $cancel_uri = $this->getApplicationURI('blueprint/'.$this->id.'/');
  31      } else {
  32        $this->requireApplicationCapability(
  33          DrydockCreateBlueprintsCapability::CAPABILITY);
  34  
  35        $class = $request->getStr('class');
  36  
  37        $impl = DrydockBlueprintImplementation::getNamedImplementation($class);
  38        if (!$impl || !$impl->isEnabled()) {
  39          return new Aphront400Response();
  40        }
  41  
  42        $blueprint = DrydockBlueprint::initializeNewBlueprint($viewer);
  43        $blueprint->setClassName($class);
  44        $cancel_uri = $this->getApplicationURI('blueprint/');
  45      }
  46  
  47      $field_list = PhabricatorCustomField::getObjectFields(
  48        $blueprint,
  49        PhabricatorCustomField::ROLE_EDIT);
  50      $field_list
  51        ->setViewer($viewer)
  52        ->readFieldsFromStorage($blueprint);
  53  
  54      $v_name = $blueprint->getBlueprintName();
  55      $e_name = true;
  56      $errors = array();
  57      $validation_exception = null;
  58  
  59      if ($request->isFormPost()) {
  60        $v_view_policy = $request->getStr('viewPolicy');
  61        $v_edit_policy = $request->getStr('editPolicy');
  62        $v_name = $request->getStr('name');
  63        if (!strlen($v_name)) {
  64          $e_name = pht('Required');
  65          $errors[] = pht('You must name this blueprint.');
  66        }
  67  
  68        if (!$errors) {
  69          $xactions = array();
  70  
  71          $xactions = $field_list->buildFieldTransactionsFromRequest(
  72            new DrydockBlueprintTransaction(),
  73            $request);
  74  
  75          $xactions[] = id(new DrydockBlueprintTransaction())
  76            ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
  77            ->setNewValue($v_view_policy);
  78  
  79          $xactions[] = id(new DrydockBlueprintTransaction())
  80            ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)
  81            ->setNewValue($v_edit_policy);
  82  
  83          $xactions[] = id(new DrydockBlueprintTransaction())
  84            ->setTransactionType(DrydockBlueprintTransaction::TYPE_NAME)
  85            ->setNewValue($v_name);
  86  
  87          $editor = id(new DrydockBlueprintEditor())
  88            ->setActor($viewer)
  89            ->setContentSourceFromRequest($request)
  90            ->setContinueOnNoEffect(true);
  91  
  92          try {
  93            $editor->applyTransactions($blueprint, $xactions);
  94  
  95            $id = $blueprint->getID();
  96            $save_uri = $this->getApplicationURI("blueprint/{$id}/");
  97  
  98            return id(new AphrontRedirectResponse())->setURI($save_uri);
  99          } catch (PhabricatorApplicationTransactionValidationException $ex) {
 100            $validation_exception = $ex;
 101          }
 102        }
 103      }
 104  
 105      $policies = id(new PhabricatorPolicyQuery())
 106        ->setViewer($viewer)
 107        ->setObject($blueprint)
 108        ->execute();
 109  
 110      $form = id(new AphrontFormView())
 111        ->setUser($viewer)
 112        ->addHiddenInput('class', $request->getStr('class'))
 113        ->appendChild(
 114          id(new AphrontFormTextControl())
 115            ->setLabel(pht('Name'))
 116            ->setName('name')
 117            ->setValue($v_name)
 118            ->setError($e_name))
 119        ->appendChild(
 120          id(new AphrontFormStaticControl())
 121            ->setLabel(pht('Blueprint Type'))
 122            ->setValue($impl->getBlueprintName()))
 123        ->appendChild(
 124          id(new AphrontFormPolicyControl())
 125            ->setName('viewPolicy')
 126            ->setPolicyObject($blueprint)
 127            ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
 128            ->setPolicies($policies))
 129        ->appendChild(
 130          id(new AphrontFormPolicyControl())
 131            ->setName('editPolicy')
 132            ->setPolicyObject($blueprint)
 133            ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
 134            ->setPolicies($policies));
 135  
 136      $field_list->appendFieldsToForm($form);
 137  
 138      $crumbs = $this->buildApplicationCrumbs();
 139  
 140      if ($blueprint->getID()) {
 141        $title = pht('Edit Blueprint');
 142        $header = pht('Edit Blueprint %d', $blueprint->getID());
 143        $crumbs->addTextCrumb(pht('Blueprint %d', $blueprint->getID()));
 144        $crumbs->addTextCrumb(pht('Edit'));
 145        $submit = pht('Save Blueprint');
 146      } else {
 147        $title = pht('New Blueprint');
 148        $header = pht('New Blueprint');
 149        $crumbs->addTextCrumb(pht('New Blueprint'));
 150        $submit = pht('Create Blueprint');
 151      }
 152  
 153      $form->appendChild(
 154        id(new AphrontFormSubmitControl())
 155          ->setValue($submit)
 156          ->addCancelButton($cancel_uri));
 157  
 158      $box = id(new PHUIObjectBoxView())
 159        ->setHeaderText($header)
 160        ->setValidationException($validation_exception)
 161        ->setFormErrors($errors)
 162        ->setForm($form);
 163  
 164      return $this->buildApplicationPage(
 165        array(
 166          $crumbs,
 167          $box,
 168        ),
 169        array(
 170          'title' => $title,
 171        ));
 172    }
 173  
 174  }


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