[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/almanac/controller/ -> AlmanacNetworkEditController.php (source)

   1  <?php
   2  
   3  final class AlmanacNetworkEditController
   4    extends AlmanacNetworkController {
   5  
   6    public function handleRequest(AphrontRequest $request) {
   7      $viewer = $request->getViewer();
   8  
   9      $list_uri = $this->getApplicationURI('network/');
  10  
  11      $id = $request->getURIData('id');
  12      if ($id) {
  13        $network = id(new AlmanacNetworkQuery())
  14          ->setViewer($viewer)
  15          ->withIDs(array($id))
  16          ->requireCapabilities(
  17            array(
  18              PhabricatorPolicyCapability::CAN_VIEW,
  19              PhabricatorPolicyCapability::CAN_EDIT,
  20            ))
  21          ->executeOne();
  22        if (!$network) {
  23          return new Aphront404Response();
  24        }
  25  
  26        $is_new = false;
  27        $network_uri = $this->getApplicationURI('network/'.$network->getID().'/');
  28        $cancel_uri = $network_uri;
  29        $title = pht('Edit Network');
  30        $save_button = pht('Save Changes');
  31      } else {
  32        $this->requireApplicationCapability(
  33          AlmanacCreateNetworksCapability::CAPABILITY);
  34  
  35        $network = AlmanacNetwork::initializeNewNetwork();
  36        $is_new = true;
  37  
  38        $cancel_uri = $list_uri;
  39        $title = pht('Create Network');
  40        $save_button = pht('Create Network');
  41      }
  42  
  43      $v_name = $network->getName();
  44      $e_name = true;
  45      $validation_exception = null;
  46  
  47      if ($request->isFormPost()) {
  48        $v_name = $request->getStr('name');
  49        $v_view = $request->getStr('viewPolicy');
  50        $v_edit = $request->getStr('editPolicy');
  51  
  52        $type_name = AlmanacNetworkTransaction::TYPE_NAME;
  53        $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
  54        $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY;
  55  
  56        $xactions = array();
  57  
  58        $xactions[] = id(new AlmanacNetworkTransaction())
  59          ->setTransactionType($type_name)
  60          ->setNewValue($v_name);
  61  
  62        $xactions[] = id(new AlmanacNetworkTransaction())
  63          ->setTransactionType($type_view)
  64          ->setNewValue($v_view);
  65  
  66        $xactions[] = id(new AlmanacNetworkTransaction())
  67          ->setTransactionType($type_edit)
  68          ->setNewValue($v_edit);
  69  
  70        $editor = id(new AlmanacNetworkEditor())
  71          ->setActor($viewer)
  72          ->setContentSourceFromRequest($request)
  73          ->setContinueOnNoEffect(true);
  74  
  75        try {
  76          $editor->applyTransactions($network, $xactions);
  77  
  78          $id = $network->getID();
  79          $network_uri = $this->getApplicationURI("network/{$id}/");
  80          return id(new AphrontRedirectResponse())->setURI($network_uri);
  81        } catch (PhabricatorApplicationTransactionValidationException $ex) {
  82          $validation_exception = $ex;
  83          $e_name = $ex->getShortMessage($type_name);
  84  
  85          $network->setViewPolicy($v_view);
  86          $network->setEditPolicy($v_edit);
  87        }
  88      }
  89  
  90      $policies = id(new PhabricatorPolicyQuery())
  91        ->setViewer($viewer)
  92        ->setObject($network)
  93        ->execute();
  94  
  95      $form = id(new AphrontFormView())
  96        ->setUser($viewer)
  97        ->appendChild(
  98          id(new AphrontFormTextControl())
  99            ->setLabel(pht('Name'))
 100            ->setName('name')
 101            ->setValue($v_name)
 102            ->setError($e_name))
 103        ->appendChild(
 104          id(new AphrontFormPolicyControl())
 105            ->setName('viewPolicy')
 106            ->setPolicyObject($network)
 107            ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
 108            ->setPolicies($policies))
 109        ->appendChild(
 110          id(new AphrontFormPolicyControl())
 111            ->setName('editPolicy')
 112            ->setPolicyObject($network)
 113            ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
 114            ->setPolicies($policies))
 115        ->appendChild(
 116          id(new AphrontFormSubmitControl())
 117            ->addCancelButton($cancel_uri)
 118            ->setValue($save_button));
 119  
 120      $box = id(new PHUIObjectBoxView())
 121        ->setValidationException($validation_exception)
 122        ->setHeaderText($title)
 123        ->appendChild($form);
 124  
 125      $crumbs = $this->buildApplicationCrumbs();
 126      if ($is_new) {
 127        $crumbs->addTextCrumb(pht('Create Network'));
 128      } else {
 129        $crumbs->addTextCrumb($network->getName(), $network_uri);
 130        $crumbs->addTextCrumb(pht('Edit'));
 131      }
 132  
 133      return $this->buildApplicationPage(
 134        array(
 135          $crumbs,
 136          $box,
 137        ),
 138        array(
 139          'title' => $title,
 140        ));
 141    }
 142  
 143  }


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