Files
2026-07-02 15:54:39 -06:00

95 lines
2.8 KiB
PHP

<?php
namespace Gravity_Forms\Gravity_SMTP\Alerts\Endpoints;
use Gravity_Forms\Gravity_SMTP\Alerts\Connectors\Alert_Connector;
use Gravity_Forms\Gravity_SMTP\Users\Roles;
use Gravity_Forms\Gravity_Tools\Endpoints\Endpoint;
class Send_Test_Alert_Endpoint extends Endpoint {
const PARAM_DATA = 'data';
const PARAM_DATA_TYPE = 'type';
const PARAM_DATA_SETTINGS = 'settings';
const ACTION_NAME = 'send_test_alert';
protected $minimum_cap = Roles::VIEW_TOOLS_SENDATEST;
/**
* @var Alert_Connector[]
*/
protected $connectors;
protected $required_params = array(
self::PARAM_DATA,
);
public function __construct( $connectors ) {
$this->connectors = $connectors;
}
protected function get_nonce_name() {
return self::ACTION_NAME;
}
public function handle() {
if ( ! $this->validate() ) {
wp_send_json_error( __( 'Missing required parameters.', 'gravitysmtp' ), 400 );
}
$data = filter_input( INPUT_POST, self::PARAM_DATA, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
if ( empty( $data[ self::PARAM_DATA_TYPE ] ) ) {
wp_send_json_error( __( 'Data array parameter must contain a type key.', 'gravitysmtp' ), 400 );
}
$type = $data[ self::PARAM_DATA_TYPE ];
if ( empty( $this->connectors[ $type ] ) ) {
wp_send_json_error( __( 'Invalid connector type of ' . $type . ' provided.', 'gravitysmtp' ), 400 );
}
/**
* @var Alert_Connector $connector
*/
$connector = $this->connectors[ $type ];
$settings = $data[ self::PARAM_DATA_SETTINGS ];
switch ( $type ) {
case 'slack':
default:
if ( empty( $settings['slack_webhook_url'] ) ) {
wp_send_json_error( __( 'Slack connector requires a webhook_url.', 'gravitysmtp' ), 400 );
}
$args = array(
'webhook_url' => $settings['slack_webhook_url'],
'message' => __( 'Gravity SMTP Test: Webhook is working!', 'gravitysmtp' ),
);
break;
case 'twilio':
if ( empty( $settings['twilio_account_id'] ) || empty( $settings['twilio_auth_token'] ) || empty( $settings['twilio_to_phone_number'] ) || empty( $settings['twilio_from_phone_number'] ) ) {
wp_send_json_error( __( 'Twilio connector requires a twilio_account_id, twilio_auth_token, twilio_to_phone_number, and twilio_from_phone_number.', 'gravitysmtp' ), 400 );
}
$args = array(
'account_id' => $settings['twilio_account_id'],
'auth_token' => $settings['twilio_auth_token'],
'to' => $settings['twilio_to_phone_number'],
'from' => $settings['twilio_from_phone_number'],
'message' => __( 'Gravity SMTP Test: Twilio is set up!', 'gravitysmtp' ),
);
break;
}
$sent = $connector->send( $args );
if ( ! $sent ) {
wp_send_json_error( __( 'Could not send alert. Check Debug Log for details.', 'gravitysmtp' ), 500 );
}
wp_send_json_success( __( 'Alert successfully configured!', 'gravitysmtp' ) );
}
}