id = $data['id']; $this->action = $data['action']; } public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $revision = id(new DifferentialRevision())->load($this->id); if (!$revision) { return new Aphront404Response(); } if (!$request->isFormPost()) { // TODO: This dialog is silly but we're CSRF-able otherwise. $dialog = new AphrontDialogView(); switch ($this->action) { case 'add': $button = 'Subscribe'; $title = 'Subscribe to Revision'; $prompt = 'Really subscribe to this revision?'; break; case 'rem': $button = 'Unsubscribe'; $title = 'Unsubscribe from Revision'; // TODO: Once herald is in, add a notice about not getting any more // herald notifications. $prompt = 'Really unsubscribe from this revision?'; break; default: return new Aphront400Response(); } $dialog ->setUser($user) ->setTitle($title) ->appendChild('
'.$prompt.'
') ->setSubmitURI($request->getRequestURI()) ->addSubmitButton($button) ->addCancelButton('/D'.$revision->getID()); return id(new AphrontDialogResponse())->setDialog($dialog); } $revision->loadRelationships(); $phid = $user->getPHID(); switch ($this->action) { case 'add': DifferentialRevisionEditor::addCC( $revision, $phid, $phid); $unsubscribed = $revision->getUnsubscribed(); if (isset($unsubscribed[$phid])) { unset($unsubscribed[$phid]); $revision->setUnsubscribed($unsubscribed); $revision->save(); } break; case 'rem': DifferentialRevisionEditor::removeCC( $revision, $user->getPHID(), $user->getPHID()); $unsubscribed = $revision->getUnsubscribed(); if (empty($unsubscribed[$phid])) { $unsubscribed[$phid] = true; $revision->setUnsubscribed($unsubscribed); $revision->save(); } break; default: return new Aphront400Response(); } return id(new AphrontRedirectResponse())->setURI('/D'.$revision->getID()); } }