From 05900a4cc990b0fc06b5b9c55dda99ef68b21d32 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 10 Dec 2018 14:33:23 -0800 Subject: [PATCH] Add a CLI workflow for testing that notifications are being delivered Summary: Depends on D19865. Ref T13222. See PHI996. Provide a `bin/aphlict notify --user ... --message ...` workflow for sending test notifications from the CLI. Test Plan: {F6058287} Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13222 Differential Revision: https://secure.phabricator.com/D19866 --- src/__phutil_library_map__.php | 2 + ...ricatorAphlictManagementNotifyWorkflow.php | 81 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 src/applications/aphlict/management/PhabricatorAphlictManagementNotifyWorkflow.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 9d7b783091..8bb0b89d0e 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2085,6 +2085,7 @@ phutil_register_library_map(array( 'PhabricatorAmazonAuthProvider' => 'applications/auth/provider/PhabricatorAmazonAuthProvider.php', 'PhabricatorAnchorView' => 'view/layout/PhabricatorAnchorView.php', 'PhabricatorAphlictManagementDebugWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementDebugWorkflow.php', + 'PhabricatorAphlictManagementNotifyWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementNotifyWorkflow.php', 'PhabricatorAphlictManagementRestartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementRestartWorkflow.php', 'PhabricatorAphlictManagementStartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStartWorkflow.php', 'PhabricatorAphlictManagementStatusWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStatusWorkflow.php', @@ -7702,6 +7703,7 @@ phutil_register_library_map(array( 'PhabricatorAmazonAuthProvider' => 'PhabricatorOAuth2AuthProvider', 'PhabricatorAnchorView' => 'AphrontView', 'PhabricatorAphlictManagementDebugWorkflow' => 'PhabricatorAphlictManagementWorkflow', + 'PhabricatorAphlictManagementNotifyWorkflow' => 'PhabricatorAphlictManagementWorkflow', 'PhabricatorAphlictManagementRestartWorkflow' => 'PhabricatorAphlictManagementWorkflow', 'PhabricatorAphlictManagementStartWorkflow' => 'PhabricatorAphlictManagementWorkflow', 'PhabricatorAphlictManagementStatusWorkflow' => 'PhabricatorAphlictManagementWorkflow', diff --git a/src/applications/aphlict/management/PhabricatorAphlictManagementNotifyWorkflow.php b/src/applications/aphlict/management/PhabricatorAphlictManagementNotifyWorkflow.php new file mode 100644 index 0000000000..a7653e74b5 --- /dev/null +++ b/src/applications/aphlict/management/PhabricatorAphlictManagementNotifyWorkflow.php @@ -0,0 +1,81 @@ +setName('notify') + ->setSynopsis(pht('Send a notification to a user.')) + ->setArguments( + array( + array( + 'name' => 'user', + 'param' => 'username', + 'help' => pht('User to notify.'), + ), + array( + 'name' => 'message', + 'param' => 'text', + 'help' => pht('Message to send.'), + ), + )); + } + + public function execute(PhutilArgumentParser $args) { + $viewer = $this->getViewer(); + + $username = $args->getArg('user'); + if (!strlen($username)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify a user to notify with "--user".')); + } + + $user = id(new PhabricatorPeopleQuery()) + ->setViewer($viewer) + ->withUsernames(array($username)) + ->executeOne(); + + if (!$user) { + throw new PhutilArgumentUsageException( + pht( + 'No user with username "%s" exists.', + $username)); + } + + $message = $args->getArg('message'); + if (!strlen($message)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify a message to send with "--message".')); + } + + $application_phid = id(new PhabricatorNotificationsApplication()) + ->getPHID(); + + $content_source = $this->newContentSource(); + + $xactions = array(); + + $xactions[] = id(new PhabricatorUserTransaction()) + ->setTransactionType( + PhabricatorUserNotifyTransaction::TRANSACTIONTYPE) + ->setNewValue($message) + ->setForceNotifyPHIDs(array($user->getPHID())); + + $editor = id(new PhabricatorUserTransactionEditor()) + ->setActor($viewer) + ->setActingAsPHID($application_phid) + ->setContentSource($content_source); + + $editor->applyTransactions($user, $xactions); + + echo tsprintf( + "%s\n", + pht('Sent notification.')); + + return 0; + } + +}