[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/differential/conduit/ -> DifferentialUpdateRevisionConduitAPIMethod.php (source)

   1  <?php
   2  
   3  final class DifferentialUpdateRevisionConduitAPIMethod
   4    extends DifferentialConduitAPIMethod {
   5  
   6    public function getAPIMethodName() {
   7      return 'differential.updaterevision';
   8    }
   9  
  10    public function getMethodDescription() {
  11      return pht('Update a Differential revision.');
  12    }
  13  
  14    public function defineParamTypes() {
  15      return array(
  16        'id'        => 'required revisionid',
  17        'diffid'    => 'required diffid',
  18        'fields'    => 'required dict',
  19        'message'   => 'required string',
  20      );
  21    }
  22  
  23    public function defineReturnType() {
  24      return 'nonempty dict';
  25    }
  26  
  27    public function defineErrorTypes() {
  28      return array(
  29        'ERR_BAD_DIFF' => 'Bad diff ID.',
  30        'ERR_BAD_REVISION' => 'Bad revision ID.',
  31        'ERR_WRONG_USER' => 'You are not the author of this revision.',
  32        'ERR_CLOSED' => 'This revision has already been closed.',
  33      );
  34    }
  35  
  36    protected function execute(ConduitAPIRequest $request) {
  37      $viewer = $request->getUser();
  38  
  39      $diff = id(new DifferentialDiffQuery())
  40        ->setViewer($viewer)
  41        ->withIDs(array($request->getValue('diffid')))
  42        ->executeOne();
  43      if (!$diff) {
  44        throw new ConduitException('ERR_BAD_DIFF');
  45      }
  46  
  47      $revision = id(new DifferentialRevisionQuery())
  48        ->setViewer($request->getUser())
  49        ->withIDs(array($request->getValue('id')))
  50        ->needReviewerStatus(true)
  51        ->needActiveDiffs(true)
  52        ->requireCapabilities(
  53          array(
  54            PhabricatorPolicyCapability::CAN_VIEW,
  55            PhabricatorPolicyCapability::CAN_EDIT,
  56          ))
  57        ->executeOne();
  58      if (!$revision) {
  59        throw new ConduitException('ERR_BAD_REVISION');
  60      }
  61  
  62      if ($revision->getStatus() == ArcanistDifferentialRevisionStatus::CLOSED) {
  63        throw new ConduitException('ERR_CLOSED');
  64      }
  65  
  66      $this->applyFieldEdit(
  67        $request,
  68        $revision,
  69        $diff,
  70        $request->getValue('fields', array()),
  71        $request->getValue('message'));
  72  
  73      return array(
  74        'revisionid'  => $revision->getID(),
  75        'uri'         => PhabricatorEnv::getURI('/D'.$revision->getID()),
  76      );
  77    }
  78  
  79  }


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