@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 95 lines 2.8 kB view raw
1<?php 2 3final class PhabricatorProjectMembersRemoveController 4 extends PhabricatorProjectController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 $id = $request->getURIData('id'); 9 $type = $request->getURIData('type'); 10 11 $project = id(new PhabricatorProjectQuery()) 12 ->setViewer($viewer) 13 ->withIDs(array($id)) 14 ->needMembers(true) 15 ->needWatchers(true) 16 ->requireCapabilities( 17 array( 18 PhabricatorPolicyCapability::CAN_VIEW, 19 PhabricatorPolicyCapability::CAN_EDIT, 20 )) 21 ->executeOne(); 22 if (!$project) { 23 return new Aphront404Response(); 24 } 25 26 if ($type == 'watchers') { 27 $is_watcher = true; 28 $edge_type = PhabricatorObjectHasWatcherEdgeType::EDGECONST; 29 } else { 30 if (!$project->supportsEditMembers()) { 31 return new Aphront404Response(); 32 } 33 34 $is_watcher = false; 35 $edge_type = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; 36 } 37 38 $members_uri = $this->getApplicationURI('members/'.$project->getID().'/'); 39 $remove_phid = $request->getStr('phid'); 40 41 if ($request->isFormPost()) { 42 $xactions = array(); 43 44 $xactions[] = id(new PhabricatorProjectTransaction()) 45 ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) 46 ->setMetadataValue('edge:type', $edge_type) 47 ->setNewValue( 48 array( 49 '-' => array($remove_phid => $remove_phid), 50 )); 51 52 $editor = id(new PhabricatorProjectTransactionEditor()) 53 ->setActor($viewer) 54 ->setContentSourceFromRequest($request) 55 ->setContinueOnNoEffect(true) 56 ->setContinueOnMissingFields(true) 57 ->applyTransactions($project, $xactions); 58 59 return id(new AphrontRedirectResponse()) 60 ->setURI($members_uri); 61 } 62 63 $handle = id(new PhabricatorHandleQuery()) 64 ->setViewer($viewer) 65 ->withPHIDs(array($remove_phid)) 66 ->executeOne(); 67 68 $target_name = phutil_tag('strong', array(), $handle->getName()); 69 $project_name = phutil_tag('strong', array(), $project->getName()); 70 71 if ($is_watcher) { 72 $title = pht('Remove Watcher'); 73 $body = pht( 74 'Remove %s as a watcher of %s?', 75 $target_name, 76 $project_name); 77 $button = pht('Remove Watcher'); 78 } else { 79 $title = pht('Remove Member'); 80 $body = pht( 81 'Remove %s as a project member of %s?', 82 $target_name, 83 $project_name); 84 $button = pht('Remove Member'); 85 } 86 87 return $this->newDialog() 88 ->setTitle($title) 89 ->addHiddenInput('phid', $remove_phid) 90 ->appendParagraph($body) 91 ->addCancelButton($members_uri) 92 ->addSubmitButton($button); 93 } 94 95}