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

132 lines
4.0 KiB
PHP

<?php
namespace Gravity_Forms\Gravity_SMTP\Connectors\Endpoints;
use Gravity_Forms\Gravity_SMTP\Connectors\Connector_Base;
use Gravity_Forms\Gravity_SMTP\Connectors\Connector_Factory;
use Gravity_Forms\Gravity_SMTP\Logging\Debug\Debug_Logger;
use Gravity_Forms\Gravity_SMTP\Data_Store\Plugin_Opts_Data_Store;
use Gravity_Forms\Gravity_SMTP\Users\Roles;
use Gravity_Forms\Gravity_Tools\Endpoints\Endpoint;
class Save_Connector_Settings_Endpoint extends Endpoint {
const PARAM_SETTINGS = 'settings';
const PARAM_CONNECTOR_TYPE = 'connector_type';
const PARAM_NO_VALIDATE = 'no_validate';
const SETTING_ENABLED_CONNECTOR = 'enabled_connector';
const SETTING_PRIMARY_CONNECTOR = 'primary_connector';
const SETTING_BACKUP_CONNECTOR = 'backup_connector';
const ACTION_NAME = 'save_connector_settings';
protected $minimum_cap = Roles::EDIT_INTEGRATIONS;
/**
* @var Connector_Factory $connector_factory
*/
protected $connector_factory;
/**
* @var Opts_Data_Store;
*/
protected $data_store;
/**
* @var Plugin_Opts_Data_Store
*/
protected $plugin_data_store;
protected $required_params = array(
self::PARAM_SETTINGS,
self::PARAM_CONNECTOR_TYPE,
);
public function __construct( $data_store, $plugin_data_store, $connector_factory ) {
$this->data_store = $data_store;
$this->plugin_data_store = $plugin_data_store;
$this->connector_factory = $connector_factory;
}
protected function get_nonce_name() {
return self::ACTION_NAME;
}
public function handle() {
if ( ! $this->validate() ) {
wp_send_json_error( __( 'Missing required parameters.', 'gravitysmtp' ), 400 );
}
$settings = filter_input( INPUT_POST, self::PARAM_SETTINGS, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
$type = filter_input( INPUT_POST, self::PARAM_CONNECTOR_TYPE );
$no_validate = filter_has_var( INPUT_POST, self::PARAM_NO_VALIDATE );
$type = htmlspecialchars( $type );
$configured_key = sprintf( 'gsmtp_connector_configured_%s', $type );
$this->data_store->save_all( $settings, $type );
delete_transient( $configured_key );
// Only continue if this connector needs to be validated/enabled in some way.
if (
! isset( $settings[ Connector_Base::SETTING_ENABLED ] ) &&
! isset( $settings[ Connector_Base::SETTING_IS_PRIMARY ] ) &&
! isset( $settings[ Connector_Base::SETTING_IS_BACKUP ] )
) {
wp_send_json_success( $settings );
}
if ( isset( $settings[ Connector_Base::SETTING_ENABLED ] ) ) {
$this->save_connector_status( $type, self::SETTING_ENABLED_CONNECTOR, $settings[ Connector_Base::SETTING_ENABLED ] );
}
if ( isset( $settings[ Connector_Base::SETTING_IS_PRIMARY ] ) ) {
$this->save_connector_status( $type, self::SETTING_PRIMARY_CONNECTOR, $settings[ Connector_Base::SETTING_IS_PRIMARY ] );
}
if ( isset( $settings[ Connector_Base::SETTING_IS_BACKUP ] ) ) {
$this->save_connector_status( $type, self::SETTING_BACKUP_CONNECTOR, $settings[ Connector_Base::SETTING_IS_BACKUP ] );
}
/**
* @var Connector_Base $connector
*/
$connector = $this->connector_factory->create( $type );
$valid = $no_validate ? true : $connector->is_configured();
if ( is_wp_error( $valid ) ) {
$error_message = $valid->get_error_message();
Debug_Logger::log_message( sprintf(
/* translators: %1$s is the connector, eg: SendGrid, %2$s is the error message */
__( 'Error saving settings for %1$s: %2$s', 'gravitysmtp' ),
$type,
$error_message
), 'error' );
wp_send_json_error( $error_message, 500 );
}
wp_send_json_success( $settings );
}
/**
* Save a connector's status (enabled, primary, backup) in the settings array.
*
* @param $type
* @param $status_type
* @param $enabled
*
* @return void
*/
protected function save_connector_status( $type, $status_type, $enabled ) {
$connector_values = $this->plugin_data_store->get( $status_type, array() );
if ( ! is_array( $connector_values ) ) {
$connector_values = array();
}
$connector_values[ $type ] = $enabled;
$this->plugin_data_store->save( $status_type, $connector_values );
}
}