[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class DiffusionRepositoryEditBasicController 4 extends DiffusionRepositoryEditController { 5 6 public function processRequest() { 7 $request = $this->getRequest(); 8 $user = $request->getUser(); 9 $drequest = $this->diffusionRequest; 10 $repository = $drequest->getRepository(); 11 12 $repository = id(new PhabricatorRepositoryQuery()) 13 ->setViewer($user) 14 ->requireCapabilities( 15 array( 16 PhabricatorPolicyCapability::CAN_VIEW, 17 PhabricatorPolicyCapability::CAN_EDIT, 18 )) 19 ->needProjectPHIDs(true) 20 ->withIDs(array($repository->getID())) 21 ->executeOne(); 22 23 if (!$repository) { 24 return new Aphront404Response(); 25 } 26 27 $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); 28 29 $v_name = $repository->getName(); 30 $v_desc = $repository->getDetail('description'); 31 $v_clone_name = $repository->getDetail('clone-name'); 32 $e_name = true; 33 $errors = array(); 34 35 if ($request->isFormPost()) { 36 $v_name = $request->getStr('name'); 37 $v_desc = $request->getStr('description'); 38 $v_projects = $request->getArr('projectPHIDs'); 39 40 if ($repository->isHosted()) { 41 $v_clone_name = $request->getStr('cloneName'); 42 } 43 44 if (!strlen($v_name)) { 45 $e_name = pht('Required'); 46 $errors[] = pht('Repository name is required.'); 47 } else { 48 $e_name = null; 49 } 50 51 if (!$errors) { 52 $xactions = array(); 53 $template = id(new PhabricatorRepositoryTransaction()); 54 55 $type_name = PhabricatorRepositoryTransaction::TYPE_NAME; 56 $type_desc = PhabricatorRepositoryTransaction::TYPE_DESCRIPTION; 57 $type_edge = PhabricatorTransactions::TYPE_EDGE; 58 $type_clone_name = PhabricatorRepositoryTransaction::TYPE_CLONE_NAME; 59 60 $xactions[] = id(clone $template) 61 ->setTransactionType($type_name) 62 ->setNewValue($v_name); 63 64 $xactions[] = id(clone $template) 65 ->setTransactionType($type_desc) 66 ->setNewValue($v_desc); 67 68 $xactions[] = id(clone $template) 69 ->setTransactionType($type_clone_name) 70 ->setNewValue($v_clone_name); 71 72 $xactions[] = id(clone $template) 73 ->setTransactionType($type_edge) 74 ->setMetadataValue( 75 'edge:type', 76 PhabricatorProjectObjectHasProjectEdgeType::EDGECONST) 77 ->setNewValue( 78 array( 79 '=' => array_fuse($v_projects), 80 )); 81 82 id(new PhabricatorRepositoryEditor()) 83 ->setContinueOnNoEffect(true) 84 ->setContentSourceFromRequest($request) 85 ->setActor($user) 86 ->applyTransactions($repository, $xactions); 87 88 return id(new AphrontRedirectResponse())->setURI($edit_uri); 89 } 90 } 91 92 $crumbs = $this->buildApplicationCrumbs(); 93 $crumbs->addTextCrumb(pht('Edit Basics')); 94 95 $title = pht('Edit %s', $repository->getName()); 96 $project_handles = $this->loadViewerHandles($repository->getProjectPHIDs()); 97 98 $form = id(new AphrontFormView()) 99 ->setUser($user) 100 ->appendChild( 101 id(new AphrontFormTextControl()) 102 ->setName('name') 103 ->setLabel(pht('Name')) 104 ->setValue($v_name) 105 ->setError($e_name)); 106 107 if ($repository->isHosted()) { 108 $form 109 ->appendChild( 110 id(new AphrontFormTextControl()) 111 ->setName('cloneName') 112 ->setLabel(pht('Clone/Checkout As')) 113 ->setValue($v_clone_name) 114 ->setCaption( 115 pht( 116 'Optional directory name to use when cloning or checking out '. 117 'this repository.'))); 118 } 119 120 $form 121 ->appendChild( 122 id(new PhabricatorRemarkupControl()) 123 ->setUser($user) 124 ->setName('description') 125 ->setLabel(pht('Description')) 126 ->setValue($v_desc)) 127 ->appendChild( 128 id(new AphrontFormTokenizerControl()) 129 ->setDatasource(new PhabricatorProjectDatasource()) 130 ->setName('projectPHIDs') 131 ->setLabel(pht('Projects')) 132 ->setValue($project_handles)) 133 ->appendChild( 134 id(new AphrontFormSubmitControl()) 135 ->setValue(pht('Save')) 136 ->addCancelButton($edit_uri)) 137 ->appendChild(id(new PHUIFormDividerControl())) 138 ->appendRemarkupInstructions($this->getReadmeInstructions()); 139 140 $object_box = id(new PHUIObjectBoxView()) 141 ->setHeaderText($title) 142 ->setForm($form) 143 ->setFormErrors($errors); 144 145 return $this->buildApplicationPage( 146 array( 147 $crumbs, 148 $object_box, 149 ), 150 array( 151 'title' => $title, 152 )); 153 } 154 155 private function getReadmeInstructions() { 156 return pht(<<<EOTEXT 157 You can also create a `README` file at the repository root (or in any 158 subdirectory) to provide information about the repository. These formats are 159 supported: 160 161 | File Name | Rendered As... | 162 |-----------------|----------------| 163 | `README` | Plain Text | 164 | `README.txt` | Plain Text | 165 | `README.remarkup` | Remarkup | 166 | `README.md` | Remarkup | 167 | `README.rainbow` | \xC2\xA1Fiesta! | 168 EOTEXT 169 ); 170 } 171 172 }
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 |