diff --git a/paypal/controllers/FrmPayPalLiteHooksController.php b/paypal/controllers/FrmPayPalLiteHooksController.php index eb93d7804d..706ba0d58e 100644 --- a/paypal/controllers/FrmPayPalLiteHooksController.php +++ b/paypal/controllers/FrmPayPalLiteHooksController.php @@ -33,6 +33,9 @@ public static function load_admin_hooks() { add_filter( 'frm_add_settings_section', 'FrmPayPalLiteSettingsController::add_settings_section', 99 ); add_action( 'frm_update_settings', 'FrmPayPalLiteSettingsController::process_form' ); + // Hook into update_option to preserve test_mode when add-on saves + add_action( 'update_option_frm_paypal_options', 'FrmPayPalLiteSettingsController::preserve_test_mode_on_update', 10, 2 ); + add_filter( 'frm_before_save_payment_action', 'FrmPayPalLiteActionsController::before_save_settings', 20, 2 ); // Hook into after payment type to render Product Name and Product Type fields. diff --git a/paypal/controllers/FrmPayPalLiteSettingsController.php b/paypal/controllers/FrmPayPalLiteSettingsController.php index 16e5501e15..2cd7fab05d 100644 --- a/paypal/controllers/FrmPayPalLiteSettingsController.php +++ b/paypal/controllers/FrmPayPalLiteSettingsController.php @@ -55,4 +55,28 @@ public static function process_form() { $settings->update( $_POST ); $settings->store(); } + + /** + * Preserve test_mode when the PayPal add-on updates frm_paypal_options. + * This hooks into update_option to ensure test_mode isn't lost. + * + * @param mixed $old_value The old option value. + * @param mixed $new_value The new option value. + * + * @return void + */ + public static function preserve_test_mode_on_update( $old_value, $new_value ) { + if ( ! is_object( $old_value ) || ! is_object( $new_value ) ) { + return; + } + + // If old value had test_mode but new value doesn't, preserve it + if ( ! isset( $old_value->test_mode ) || isset( $new_value->test_mode ) ) { + return; + } + + $new_value->test_mode = $old_value->test_mode; + // Update the option with the preserved test_mode + update_option( 'frm_paypal_options', $new_value ); + } } diff --git a/paypal/models/FrmPayPalLiteSettings.php b/paypal/models/FrmPayPalLiteSettings.php index 3f90e5c70b..975ccec58b 100644 --- a/paypal/models/FrmPayPalLiteSettings.php +++ b/paypal/models/FrmPayPalLiteSettings.php @@ -85,14 +85,15 @@ public function get_options() { */ public function update( $params ) { $settings = $this->default_options(); + $param = $this->param(); foreach ( $settings as $setting => $default ) { - if ( isset( $params[ 'frm_' . $this->param() . '_' . $setting ] ) ) { - $this->settings->{$setting} = sanitize_text_field( $params[ 'frm_' . $this->param() . '_' . $setting ] ); + if ( isset( $params[ 'frm_' . $param . '_' . $setting ] ) ) { + $this->settings->{$setting} = sanitize_text_field( $params[ 'frm_' . $param . '_' . $setting ] ); } } - $this->settings->test_mode = isset( $params[ 'frm_' . $this->param() . '_test_mode' ] ) ? absint( $params[ 'frm_' . $this->param() . '_test_mode' ] ) : 0; + $this->settings->test_mode = isset( $params[ 'frm_' . $param . '_test_mode' ] ) ? absint( $params[ 'frm_' . $param . '_test_mode' ] ) : 0; } /** diff --git a/paypal/views/settings/connect-settings-container.php b/paypal/views/settings/connect-settings-container.php index 2aade855bc..b6ff1ae6fa 100644 --- a/paypal/views/settings/connect-settings-container.php +++ b/paypal/views/settings/connect-settings-container.php @@ -11,6 +11,7 @@