[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorProjectMembersEditController 4 extends PhabricatorProjectController { 5 6 private $id; 7 8 public function willProcessRequest(array $data) { 9 $this->id = $data['id']; 10 } 11 12 public function processRequest() { 13 $request = $this->getRequest(); 14 $user = $request->getUser(); 15 16 $project = id(new PhabricatorProjectQuery()) 17 ->setViewer($user) 18 ->withIDs(array($this->id)) 19 ->needMembers(true) 20 ->requireCapabilities( 21 array( 22 PhabricatorPolicyCapability::CAN_VIEW, 23 PhabricatorPolicyCapability::CAN_EDIT, 24 )) 25 ->executeOne(); 26 if (!$project) { 27 return new Aphront404Response(); 28 } 29 30 $member_phids = $project->getMemberPHIDs(); 31 32 if ($request->isFormPost()) { 33 $member_spec = array(); 34 35 $remove = $request->getStr('remove'); 36 if ($remove) { 37 $member_spec['-'] = array_fuse(array($remove)); 38 } 39 40 $add_members = $request->getArr('phids'); 41 if ($add_members) { 42 $member_spec['+'] = array_fuse($add_members); 43 } 44 45 $type_member = PhabricatorEdgeConfig::TYPE_PROJ_MEMBER; 46 47 $xactions = array(); 48 49 $xactions[] = id(new PhabricatorProjectTransaction()) 50 ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) 51 ->setMetadataValue('edge:type', $type_member) 52 ->setNewValue($member_spec); 53 54 $editor = id(new PhabricatorProjectTransactionEditor($project)) 55 ->setActor($user) 56 ->setContentSourceFromRequest($request) 57 ->setContinueOnNoEffect(true) 58 ->setContinueOnMissingFields(true) 59 ->applyTransactions($project, $xactions); 60 61 return id(new AphrontRedirectResponse()) 62 ->setURI($request->getRequestURI()); 63 } 64 65 $member_phids = array_reverse($member_phids); 66 $handles = $this->loadViewerHandles($member_phids); 67 68 $state = array(); 69 foreach ($handles as $handle) { 70 $state[] = array( 71 'phid' => $handle->getPHID(), 72 'name' => $handle->getFullName(), 73 ); 74 } 75 76 $header_name = pht('Edit Members'); 77 $title = pht('Edit Members'); 78 79 $form = new AphrontFormView(); 80 $form 81 ->setUser($user) 82 ->appendChild( 83 id(new AphrontFormTokenizerControl()) 84 ->setName('phids') 85 ->setLabel(pht('Add Members')) 86 ->setDatasource(new PhabricatorPeopleDatasource())) 87 ->appendChild( 88 id(new AphrontFormSubmitControl()) 89 ->addCancelButton('/project/view/'.$project->getID().'/') 90 ->setValue(pht('Add Members'))); 91 92 $member_list = $this->renderMemberList($project, $handles); 93 94 $form_box = id(new PHUIObjectBoxView()) 95 ->setHeaderText($title) 96 ->setForm($form); 97 98 $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView()) 99 ->addTextCrumb( 100 $project->getName(), 101 '/project/view/'.$project->getID().'/') 102 ->addTextCrumb(pht('Edit Members'), $this->getApplicationURI()); 103 104 return $this->buildApplicationPage( 105 array( 106 $crumbs, 107 $form_box, 108 $member_list, 109 ), 110 array( 111 'title' => $title, 112 )); 113 } 114 115 private function renderMemberList( 116 PhabricatorProject $project, 117 array $handles) { 118 119 $request = $this->getRequest(); 120 $viewer = $request->getUser(); 121 122 $list = id(new PHUIObjectItemListView()) 123 ->setNoDataString(pht('This project does not have any members.')); 124 125 foreach ($handles as $handle) { 126 $remove_uri = $this->getApplicationURI( 127 '/members/'.$project->getID().'/remove/?phid='.$handle->getPHID()); 128 129 $item = id(new PHUIObjectItemView()) 130 ->setHeader($handle->getFullName()) 131 ->setHref($handle->getURI()) 132 ->setImageURI($handle->getImageURI()); 133 134 $item->addAction( 135 id(new PHUIListItemView()) 136 ->setIcon('fa-times') 137 ->setName(pht('Remove')) 138 ->setHref($remove_uri) 139 ->setWorkflow(true)); 140 141 $list->addItem($item); 142 } 143 144 return $list; 145 } 146 }
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 |