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
			
			
This commit is contained in:
		@@ -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',
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,81 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
final class PhabricatorAphlictManagementNotifyWorkflow
 | 
			
		||||
  extends PhabricatorAphlictManagementWorkflow {
 | 
			
		||||
 | 
			
		||||
  protected function didConstruct() {
 | 
			
		||||
    $this
 | 
			
		||||
      ->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;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user