[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/differential/controller/ -> DifferentialDiffCreateController.php (source)

   1  <?php
   2  
   3  final class DifferentialDiffCreateController extends DifferentialController {
   4  
   5    public function processRequest() {
   6  
   7      $request = $this->getRequest();
   8      $viewer = $request->getUser();
   9  
  10      $diff = null;
  11      // This object is just for policy stuff
  12      $diff_object = DifferentialDiff::initializeNewDiff($viewer);
  13      $repository_phid = null;
  14      $repository_value = array();
  15      $errors = array();
  16      $e_diff = null;
  17      $e_file = null;
  18      $validation_exception = null;
  19      if ($request->isFormPost()) {
  20  
  21        $repository_tokenizer = $request->getArr(
  22          id(new DifferentialRepositoryField())->getFieldKey());
  23        if ($repository_tokenizer) {
  24          $repository_phid = reset($repository_tokenizer);
  25        }
  26  
  27        if ($request->getFileExists('diff-file')) {
  28          $diff = PhabricatorFile::readUploadedFileData($_FILES['diff-file']);
  29        } else {
  30          $diff = $request->getStr('diff');
  31        }
  32  
  33        if (!strlen($diff)) {
  34          $errors[] = pht(
  35            'You can not create an empty diff. Copy/paste a diff, or upload a '.
  36            'diff file.');
  37          $e_diff = pht('Required');
  38          $e_file = pht('Required');
  39        }
  40  
  41        if (!$errors) {
  42          try {
  43            $call = new ConduitCall(
  44              'differential.createrawdiff',
  45              array(
  46                'diff' => $diff,
  47                'repositoryPHID' => $repository_phid,
  48                'viewPolicy' => $request->getStr('viewPolicy'),));
  49            $call->setUser($viewer);
  50            $result = $call->execute();
  51            $path = id(new PhutilURI($result['uri']))->getPath();
  52            return id(new AphrontRedirectResponse())->setURI($path);
  53          } catch (PhabricatorApplicationTransactionValidationException $ex) {
  54            $validation_exception = $ex;
  55          }
  56        }
  57      }
  58  
  59      $form = new AphrontFormView();
  60      $arcanist_href = PhabricatorEnv::getDoclink('Arcanist User Guide');
  61      $arcanist_link = phutil_tag(
  62        'a',
  63        array(
  64          'href' => $arcanist_href,
  65          'target' => '_blank',
  66        ),
  67        'Arcanist');
  68  
  69      $cancel_uri = $this->getApplicationURI();
  70  
  71      if ($repository_phid) {
  72        $repository_value = $this->loadViewerHandles(array($repository_phid));
  73      }
  74  
  75      $policies = id(new PhabricatorPolicyQuery())
  76        ->setViewer($viewer)
  77        ->setObject($diff_object)
  78        ->execute();
  79  
  80      $form
  81        ->setAction('/differential/diff/create/')
  82        ->setEncType('multipart/form-data')
  83        ->setUser($viewer)
  84        ->appendInstructions(
  85          pht(
  86            'The best way to create a Differential diff is by using %s, but you '.
  87            'can also just paste a diff (for example, from %s, %s or %s) into '.
  88            'this box, or upload a diff file.',
  89            $arcanist_link,
  90            phutil_tag('tt', array(), 'svn diff'),
  91            phutil_tag('tt', array(), 'git diff'),
  92            phutil_tag('tt', array(), 'hg diff --git')))
  93        ->appendChild(
  94          id(new AphrontFormTextAreaControl())
  95            ->setLabel(pht('Raw Diff'))
  96            ->setName('diff')
  97            ->setValue($diff)
  98            ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
  99            ->setError($e_diff))
 100        ->appendChild(
 101          id(new AphrontFormFileControl())
 102            ->setLabel(pht('Raw Diff From File'))
 103            ->setName('diff-file')
 104            ->setError($e_file))
 105        ->appendChild(
 106          id(new AphrontFormTokenizerControl())
 107          ->setName(id(new DifferentialRepositoryField())->getFieldKey())
 108          ->setLabel(pht('Repository'))
 109          ->setDatasource(new DiffusionRepositoryDatasource())
 110          ->setValue($repository_value)
 111          ->setLimit(1))
 112        ->appendChild(
 113          id(new AphrontFormPolicyControl())
 114          ->setUser($viewer)
 115          ->setName('viewPolicy')
 116          ->setPolicyObject($diff_object)
 117          ->setPolicies($policies)
 118          ->setCapability(PhabricatorPolicyCapability::CAN_VIEW))
 119        ->appendChild(
 120          id(new AphrontFormSubmitControl())
 121            ->addCancelButton($cancel_uri)
 122            ->setValue(pht('Create Diff')));
 123  
 124      $form_box = id(new PHUIObjectBoxView())
 125        ->setHeaderText(pht('Create New Diff'))
 126        ->setValidationException($validation_exception)
 127        ->setForm($form)
 128        ->setFormErrors($errors);
 129  
 130      $crumbs = $this->buildApplicationCrumbs();
 131      $crumbs->addTextCrumb(pht('Create Diff'));
 132  
 133      return $this->buildApplicationPage(
 134        array(
 135          $crumbs,
 136          $form_box,
 137        ),
 138        array(
 139          'title' => pht('Create Diff'),
 140        ));
 141    }
 142  
 143  }


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