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 ); } }