[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |