Something went wrong. Try again.
@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
Something went wrong. Try again.
2.6 kB · 87 lines
PHP
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788<?php
final class PhabricatorProjectSilenceController extends PhabricatorProjectController {
public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); $id = $request->getURIData('id'); $action = $request->getURIData('action');
$project = id(new PhabricatorProjectQuery()) ->setViewer($viewer) ->withIDs(array($id)) ->needMembers(true) ->executeOne(); if (!$project) { return new Aphront404Response(); }
$edge_type = PhabricatorProjectSilencedEdgeType::EDGECONST; $done_uri = "/project/members/{$id}/"; $viewer_phid = $viewer->getPHID();
if (!$project->isUserMember($viewer_phid)) { return $this->newDialog() ->setTitle(pht('Not a Member')) ->appendParagraph( pht( 'You are not a project member, so you do not receive mail sent '. 'to members of this project.')) ->addCancelButton($done_uri); }
$silenced = PhabricatorEdgeQuery::loadDestinationPHIDs( $project->getPHID(), $edge_type); $silenced = array_fuse($silenced); $is_silenced = isset($silenced[$viewer_phid]);
if ($request->isDialogFormPost()) { if ($is_silenced) { $edge_action = '-'; } else { $edge_action = '+'; }
$xactions = array(); $xactions[] = id(new PhabricatorProjectTransaction()) ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) ->setMetadataValue('edge:type', $edge_type) ->setNewValue( array( $edge_action => array($viewer_phid => $viewer_phid), ));
$editor = id(new PhabricatorProjectTransactionEditor()) ->setActor($viewer) ->setContentSourceFromRequest($request) ->setContinueOnNoEffect(true) ->setContinueOnMissingFields(true) ->applyTransactions($project, $xactions);
return id(new AphrontRedirectResponse())->setURI($done_uri); }
if ($is_silenced) { $title = pht('Enable Mail'); $body = pht( 'When mail is sent to members of this project, you will receive a '. 'copy.'); $button = pht('Enable Project Mail'); } else { $title = pht('Disable Mail'); $body = pht( 'When mail is sent to members of this project, you will no longer '. 'receive a copy.'); $button = pht('Disable Project Mail'); }
return $this->newDialog() ->setTitle($title) ->appendParagraph($body) ->addCancelButton($done_uri) ->addSubmitButton($button); }
}