[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phortune/controller/ -> PhortuneAccountEditController.php (source)

   1  <?php
   2  
   3  final class PhortuneAccountEditController extends PhortuneController {
   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        $account = id(new PhortuneAccountQuery())
  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 (!$account) {
  26          return new Aphront404Response();
  27        }
  28        $is_new = false;
  29      } else {
  30        $account = PhortuneAccount::initializeNewAccount($viewer);
  31        $account->attachMemberPHIDs(array($viewer->getPHID()));
  32        $is_new = true;
  33      }
  34  
  35      $v_name = $account->getName();
  36      $e_name = true;
  37  
  38      $v_members = $account->getMemberPHIDs();
  39      $e_members = null;
  40  
  41      $validation_exception = null;
  42  
  43      if ($request->isFormPost()) {
  44        $v_name = $request->getStr('name');
  45        $v_members = $request->getArr('memberPHIDs');
  46  
  47        $type_name = PhortuneAccountTransaction::TYPE_NAME;
  48        $type_edge = PhabricatorTransactions::TYPE_EDGE;
  49  
  50        $xactions = array();
  51        $xactions[] = id(new PhortuneAccountTransaction())
  52          ->setTransactionType($type_name)
  53          ->setNewValue($v_name);
  54  
  55        $xactions[] = id(new PhortuneAccountTransaction())
  56          ->setTransactionType($type_edge)
  57          ->setMetadataValue(
  58            'edge:type',
  59            PhortuneAccountHasMemberEdgeType::EDGECONST)
  60          ->setNewValue(
  61            array(
  62              '=' => array_fuse($v_members),
  63            ));
  64  
  65        $editor = id(new PhortuneAccountEditor())
  66          ->setActor($viewer)
  67          ->setContentSourceFromRequest($request)
  68          ->setContinueOnNoEffect(true);
  69  
  70        try {
  71          $editor->applyTransactions($account, $xactions);
  72  
  73          $account_uri = $this->getApplicationURI($account->getID().'/');
  74          return id(new AphrontRedirectResponse())->setURI($account_uri);
  75        } catch (PhabricatorApplicationTransactionValidationException $ex) {
  76          $validation_exception = $ex;
  77          $e_name = $ex->getShortMessage($type_name);
  78          $e_members = $ex->getShortMessage($type_edge);
  79        }
  80      }
  81  
  82      $crumbs = $this->buildApplicationCrumbs();
  83  
  84      if ($is_new) {
  85        $cancel_uri = $this->getApplicationURI('account/');
  86        $crumbs->addTextCrumb(pht('Accounts'), $cancel_uri);
  87        $crumbs->addTextCrumb(pht('Create Account'));
  88  
  89        $title = pht('Create Payment Account');
  90        $submit_button = pht('Create Account');
  91      } else {
  92        $cancel_uri = $this->getApplicationURI($account->getID().'/');
  93        $crumbs->addTextCrumb($account->getName(), $cancel_uri);
  94        $crumbs->addTextCrumb(pht('Edit'));
  95  
  96        $title = pht('Edit %s', $account->getName());
  97        $submit_button = pht('Save Changes');
  98      }
  99  
 100      $member_handles = $this->loadViewerHandles($v_members);
 101  
 102      $form = id(new AphrontFormView())
 103        ->setUser($viewer)
 104        ->appendChild(
 105          id(new AphrontFormTextControl())
 106            ->setName('name')
 107            ->setLabel(pht('Name'))
 108            ->setValue($v_name)
 109            ->setError($e_name))
 110        ->appendChild(
 111          id(new AphrontFormTokenizerControl())
 112            ->setDatasource(new PhabricatorPeopleDatasource())
 113            ->setLabel(pht('Members'))
 114            ->setName('memberPHIDs')
 115            ->setValue($member_handles)
 116            ->setError($e_members))
 117        ->appendChild(
 118          id(new AphrontFormSubmitControl())
 119            ->setValue($submit_button)
 120            ->addCancelButton($cancel_uri));
 121  
 122      $box = id(new PHUIObjectBoxView())
 123        ->setHeaderText($title)
 124        ->setValidationException($validation_exception)
 125        ->appendChild($form);
 126  
 127      return $this->buildApplicationPage(
 128        array(
 129          $crumbs,
 130          $box,
 131        ),
 132        array(
 133          'title' => $title,
 134        ));
 135    }
 136  
 137  }


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