Merged in feature/117-dev-dev01 (pull request #8)

auto-patch  117-dev-dev01-2023-12-15T16_09_06

* auto-patch  117-dev-dev01-2023-12-15T16_09_06
This commit is contained in:
Tony Volpe
2023-12-15 16:10:57 +00:00
parent 0825f6bd5f
commit 3dc9eca989
1424 changed files with 28118 additions and 10097 deletions

View File

@@ -47,7 +47,7 @@ class AdminBarMenu {
if (
is_user_logged_in() &&
current_user_can( 'manage_options' )
current_user_can( wp_mail_smtp()->get_capability_manage_options() )
) {
$access = true;
}

View File

@@ -138,7 +138,7 @@ class Area {
return;
}
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
return;
}
@@ -177,6 +177,13 @@ class Area {
WP::ADMIN_NOTICE_ERROR
);
break;
case 'google_unsuccessful_oauth':
WP::add_admin_notice(
esc_html__( 'There was an error while processing the authentication request.', 'wp-mail-smtp' ),
WP::ADMIN_NOTICE_ERROR
);
break;
}
switch ( $success ) {
@@ -244,6 +251,17 @@ class Area {
return;
}
/*
* Don't display the notice if the user installed a plugin with a new "Email Test"
* location (starting from v3.9.0) and is not aware of the old one. Also, don't display
* the notice if the `wp_mail_smtp_initial_version` option is not set (it can happen if
* the plugin was activated network wise in the multisite installation and plugin
* activation hook was not performed on the subsite level).
*/
if ( version_compare( get_option( 'wp_mail_smtp_initial_version', '3.9.0' ), '3.9.0', '>=' ) ) {
return;
}
WP::add_admin_notice(
sprintf(
wp_kses(
@@ -285,7 +303,7 @@ class Area {
public function add_admin_options_page() {
// Options pages access capability.
$access_capability = 'manage_options';
$access_capability = wp_mail_smtp()->get_capability_manage_options();
$this->hook = add_menu_page(
esc_html__( 'WP Mail SMTP', 'wp-mail-smtp' ),
@@ -348,7 +366,7 @@ class Area {
add_menu_page(
esc_html__( 'WP Mail SMTP', 'wp-mail-smtp' ),
esc_html__( 'WP Mail SMTP', 'wp-mail-smtp' ),
'manage_options',
wp_mail_smtp()->get_capability_manage_options(),
self::SLUG,
[ $this, 'display_network_product_education_page' ],
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM5ZWEzYTgiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDQzIDM0Ij48cGF0aCBkPSJNMC4wMDcsMy41ODVWMjAuNDIxcTAsMy41ODYsMy43NTEsMy41ODVMMjAsMjRWMTlIMzBWMTQuMDE0bDAuOTkxLTFMMzQsMTNWMy41ODVRMzQsMCwzMC4yNDksMEgzLjc1OFEwLjAwNywwLC4wMDcsMy41ODVoMFpNMy41MjQsNi4xNTdhMS40OSwxLjQ5LDAsMCwxLS41MDgtMC45MzUsMS41ODEsMS41ODEsMCwwLDEsLjI3NC0xLjIwOCwxLjQ0OSwxLjQ0OSwwLDAsMSwxLjA5NC0uNjYzLDEuNzU2LDEuNzU2LDAsMCwxLDEuMjUuMzEybDExLjQwOSw3LjcxNkwyOC4zNzQsMy42NjNhMS45NiwxLjk2LDAsMCwxLDEuMjg5LS4zMTIsMS41NDYsMS41NDYsMCwwLDEsMS4wOTQuNjYzLDEuNCwxLjQsMCwwLDEsLjI3MywxLjIwOCwxLjY3LDEuNjcsMCwwLDEtLjU0Ny45MzVMMTcuMDQzLDE3LjIyNVoiLz48cGF0aCBkPSJNMjIsMjhIMzJsLTAuMDA5LDQuNjI0YTEuMTI2LDEuMTI2LDAsMCwwLDEuOTIyLjhsOC4yNS04LjIzNmExLjEyNiwxLjEyNiwwLDAsMCwwLTEuNTk0bC04LjI1LTguMjQxYTEuMTI2LDEuMTI2LDAsMCwwLTEuOTIyLjh2NC44NjZMMjIsMjF2N1oiLz48L3N2Zz4=',
@@ -537,6 +555,10 @@ class Area {
esc_url( wp_mail_smtp()->get_utm_url( 'https://wpmailsmtp.com/docs/how-to-upgrade-wp-mail-smtp-to-pro-version/', [ 'medium' => 'plugin-settings', 'content' => 'Pro Mailer Popup - Already purchased' ] ) ),
esc_html__( 'Already purchased?', 'wp-mail-smtp' )
),
'gmail' => [
'one_click_setup_upgrade_title' => wp_kses( __( 'One-Click Setup for Google Mailer <br> is a Pro Feature', 'wp-mail-smtp' ), [ 'br' => [] ] ),
'one_click_setup_upgrade_content' => esc_html__( 'We\'re sorry, One-Click Setup for Google Mailer is not available on your plan. Please upgrade to the Pro plan to unlock all these awesome features.', 'wp-mail-smtp' ),
],
],
'all_mailers_supports' => wp_mail_smtp()->get_providers()->get_supports_all(),
'nonce' => wp_create_nonce( 'wp-mail-smtp-admin' ),
@@ -818,7 +840,10 @@ class Area {
*
* @param string $capability Email logs access capability.
*/
return apply_filters( 'wp_mail_smtp_admin_area_get_logs_access_capability', 'manage_options' );
return apply_filters(
'wp_mail_smtp_admin_area_get_logs_access_capability',
wp_mail_smtp()->get_capability_manage_options()
);
}
/**
@@ -1126,7 +1151,7 @@ class Area {
$data = [];
// Only admins can fire these ajax requests.
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error( $data );
}

View File

@@ -6,7 +6,6 @@ use WPMailSMTP\ConnectionInterface;
use WPMailSMTP\Debug;
use WPMailSMTP\Helpers\UI;
use WPMailSMTP\Options;
use WPMailSMTP\Providers\Gmail\Auth;
/**
* Class ConnectionSettings.
@@ -71,39 +70,14 @@ class ConnectionSettings {
<label for="wp-mail-smtp-setting-from_email"><?php esc_html_e( 'From Email', 'wp-mail-smtp' ); ?></label>
</div>
<div class="wp-mail-smtp-setting-field">
<?php if ( $mailer !== 'gmail' ) : ?>
<input name="wp-mail-smtp[mail][from_email]" type="email"
value="<?php echo esc_attr( $connection_options->get( 'mail', 'from_email' ) ); ?>"
id="wp-mail-smtp-setting-from_email" spellcheck="false"
placeholder="<?php echo esc_attr( wp_mail_smtp()->get_processor()->get_default_email() ); ?>"
<?php disabled( $connection_options->is_const_defined( 'mail', 'from_email' ) || ! empty( $disabled_email ) ); ?>
/>
<?php else : ?>
<?php
// Gmail mailer From Email selector.
$gmail_auth = new Auth( $this->connection );
$gmail_aliases = $gmail_auth->is_clients_saved() ? $gmail_auth->get_user_possible_send_from_addresses() : [];
?>
<input name="wp-mail-smtp[mail][from_email]" type="email"
value="<?php echo esc_attr( $connection_options->get( 'mail', 'from_email' ) ); ?>"
id="wp-mail-smtp-setting-from_email" spellcheck="false"
placeholder="<?php echo esc_attr( wp_mail_smtp()->get_processor()->get_default_email() ); ?>"
<?php disabled( $connection_options->is_const_defined( 'mail', 'from_email' ) || ! empty( $disabled_email ) ); ?>
/>
<?php if ( empty( $gmail_aliases ) ) : ?>
<select name="wp-mail-smtp[mail][from_email]" id="wp-mail-smtp-setting-from_email" disabled>
<option value="">
<?php esc_html_e( 'Please first authorize the Gmail mailer below', 'wp-mail-smtp' ); ?>
</option>
</select>
<?php else : ?>
<select name="wp-mail-smtp[mail][from_email]" id="wp-mail-smtp-setting-from_email">
<?php foreach ( $gmail_aliases as $gmail_email_address ) : ?>
<option value="<?php echo esc_attr( $gmail_email_address ); ?>" <?php selected( $connection_options->get( 'mail', 'from_email' ), $gmail_email_address ); ?>>
<?php echo esc_html( $gmail_email_address ); ?>
</option>
<?php endforeach; ?>
</select>
<?php endif; ?>
<?php endif; ?>
<?php if ( ! in_array( $mailer, [ 'gmail', 'zoho' ], true ) ) : ?>
<?php if ( ! in_array( $mailer, [ 'zoho' ], true ) ) : ?>
<p class="desc">
<?php esc_html_e( 'The email address that emails are sent from.', 'wp-mail-smtp' ); ?>
</p>
@@ -335,8 +309,6 @@ class ConnectionSettings {
*/
public function process( $data, $old_data ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded, Generic.Metrics.CyclomaticComplexity.TooHigh
$connection_options = $this->connection->get_options();
// When checkbox is unchecked - it's not submitted at all, so we need to define its default false value.
if ( ! isset( $data['mail']['from_email_force'] ) ) {
$data['mail']['from_email_force'] = false;
@@ -372,21 +344,6 @@ class ConnectionSettings {
}
}
// Old and new Gmail client id/secret values are different - we need to invalidate tokens and scroll to Auth button.
if (
$this->connection->get_mailer_slug() === 'gmail' &&
! empty( $data['gmail']['client_id'] ) &&
! empty( $data['gmail']['client_secret'] ) &&
(
$connection_options->get( 'gmail', 'client_id' ) !== $data['gmail']['client_id'] ||
$connection_options->get( 'gmail', 'client_secret' ) !== $data['gmail']['client_secret']
)
) {
unset( $old_data['gmail'] );
$this->scroll_to = '#wp-mail-smtp-setting-row-gmail-authorize';
}
// Prevent redirect to setup wizard from settings page after successful auth.
if (
! empty( $data['mail']['mailer'] ) &&
@@ -395,7 +352,15 @@ class ConnectionSettings {
$data[ $data['mail']['mailer'] ]['is_setup_wizard_auth'] = false;
}
return $data;
/**
* Filters connection data.
*
* @since 3.11.0
*
* @param array $data Connection data.
* @param array $old_data Old connection data.
*/
return apply_filters( 'wp_mail_smtp_admin_connection_settings_process_data', $data, $old_data );
}
/**
@@ -416,24 +381,19 @@ class ConnectionSettings {
) {
// Save correct from email address if Gmail mailer is already configured.
if (
is_array( $data ) && in_array( $data['mail']['mailer'], [ 'gmail' ], true ) &&
! empty( $data['gmail']['client_id'] ) &&
! empty( $data['gmail']['client_secret'] )
) {
$gmail_auth = new Auth( $this->connection );
$gmail_aliases = $gmail_auth->is_clients_saved() ? $gmail_auth->get_user_possible_send_from_addresses() : [];
if ( $data['mail']['mailer'] === 'gmail' ) {
$gmail_auth = wp_mail_smtp()->get_providers()->get_auth( 'gmail', $this->connection );
$user_info = ! $gmail_auth->is_auth_required() ? $gmail_auth->get_user_info() : false;
if (
! empty( $gmail_aliases ) &&
isset( $gmail_aliases[0] ) &&
is_email( $gmail_aliases[0] ) !== false &&
! empty( $user_info['email'] ) &&
is_email( $user_info['email'] ) !== false &&
(
empty( $data['mail']['from_email'] ) ||
! in_array( $data['mail']['from_email'], $gmail_aliases, true )
$data['mail']['from_email'] !== $user_info['email']
)
) {
$data['mail']['from_email'] = $gmail_aliases[0];
$data['mail']['from_email'] = $user_info['email'];
$this->connection->get_options()->set( $data, false, false );
}

View File

@@ -58,7 +58,7 @@ class DashboardWidget {
public function init() {
// This widget should be displayed for certain high-level users only.
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
return;
}
@@ -181,7 +181,7 @@ class DashboardWidget {
check_admin_referer( 'wp_mail_smtp_' . static::SLUG . '_nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error();
}
@@ -202,7 +202,7 @@ class DashboardWidget {
check_admin_referer( 'wp_mail_smtp_' . static::SLUG . '_nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error();
}

View File

@@ -100,7 +100,7 @@ class DebugEvents {
wp_send_json_error( esc_html__( 'Access rejected.', 'wp-mail-smtp' ) );
}
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error( esc_html__( 'You don\'t have the capability to perform this action.', 'wp-mail-smtp' ) );
}
@@ -139,7 +139,7 @@ class DebugEvents {
wp_send_json_error( esc_html__( 'Access rejected.', 'wp-mail-smtp' ) );
}
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error( esc_html__( 'You don\'t have the capability to perform this action.', 'wp-mail-smtp' ) );
}

View File

@@ -558,7 +558,7 @@ class Table extends \WP_List_Table {
</div>
<?php
if ( current_user_can( 'manage_options' ) ) {
if ( current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_nonce_field( 'wp_mail_smtp_debug_events', 'wp-mail-smtp-debug-events-nonce', false );
printf(
'<button id="wp-mail-smtp-delete-all-debug-events-button" type="button" class="button">%s</button>',

View File

@@ -92,7 +92,7 @@ class Education {
check_ajax_referer( 'wp-mail-smtp-admin', 'nonce' );
// Check for permissions.
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error();
}

View File

@@ -76,7 +76,7 @@ class Notifications {
$access = false;
if (
current_user_can( 'manage_options' ) &&
current_user_can( wp_mail_smtp()->get_capability_manage_options() ) &&
! Options::init()->get( 'general', 'am_notifications_hidden' )
) {
$access = true;
@@ -512,7 +512,7 @@ class Notifications {
check_ajax_referer( 'wp-mail-smtp-admin', 'nonce' );
// Check for access and required param.
if ( ! current_user_can( 'manage_options' ) || empty( $_POST['id'] ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) || empty( $_POST['id'] ) ) {
wp_send_json_error();
}

View File

@@ -2,9 +2,10 @@
namespace WPMailSMTP\Admin\Pages;
use Plugin_Upgrader;
use WPMailSMTP\Admin\PageAbstract;
use WPMailSMTP\Admin\PluginsInstallSkin;
use WPMailSMTP\Admin\PluginsInstallUpgrader;
use WPMailSMTP\Helpers\Helpers;
/**
* About tab.
@@ -603,7 +604,14 @@ class AboutTab extends PageAbstract {
)
);
/*
* The `request_filesystem_credentials` function will output a credentials form in case of failure.
* We don't want that, since it will break AJAX response. So just hide output with a buffer.
*/
ob_start();
// phpcs:ignore WPForms.Formatting.EmptyLineAfterAssigmentVariables.AddEmptyLine
$creds = request_filesystem_credentials( $url, '', false, false, null );
ob_end_clean();
// Check for file system permissions.
if ( false === $creds ) {
@@ -617,8 +625,11 @@ class AboutTab extends PageAbstract {
// Do not allow WordPress to search/download translations, as this will break JS output.
remove_action( 'upgrader_process_complete', [ 'Language_Pack_Upgrader', 'async_upgrade' ], 20 );
// Import the plugin upgrader.
Helpers::include_plugin_upgrader();
// Create the plugin upgrader with our custom skin.
$installer = new PluginsInstallUpgrader( new PluginsInstallSkin() );
$installer = new Plugin_Upgrader( new PluginsInstallSkin() );
// Error check.
if ( ! method_exists( $installer, 'install' ) ) {

View File

@@ -6,7 +6,6 @@ use WPMailSMTP\Admin\ConnectionSettings;
use WPMailSMTP\Admin\PageAbstract;
use WPMailSMTP\Admin\SetupWizard;
use WPMailSMTP\Options;
use WPMailSMTP\Providers\Gmail\Auth;
use WPMailSMTP\WP;
/**

View File

@@ -2,13 +2,16 @@
namespace WPMailSMTP\Admin;
use Automatic_Upgrader_Skin;
/**
* WordPress class extended for on-the-fly plugin installations.
*
* @since 1.5.0
* @since 1.7.1 Removed feedback() method override to be compatible with PHP5.3+ and WP5.3.
* @since 3.11.0 Updated to extend Automatic_Upgrader_Skin.
*/
class PluginsInstallSkin extends \WP_Upgrader_Skin {
class PluginsInstallSkin extends Automatic_Upgrader_Skin {
/**
* Empty out the header of its HTML content and only check to see if it has

View File

@@ -2,6 +2,7 @@
namespace WPMailSMTP\Admin;
use Plugin_Upgrader;
use WPMailSMTP\Admin\Pages\TestTab;
use WPMailSMTP\Connect;
use WPMailSMTP\Helpers\Helpers;
@@ -81,7 +82,7 @@ class SetupWizard {
isset( $_GET['page'] ) && // phpcs:ignore WordPress.Security.NonceVerification.Recommended
Area::SLUG . '-setup-wizard' === $_GET['page'] && // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$this->should_setup_wizard_load() &&
current_user_can( 'manage_options' )
current_user_can( wp_mail_smtp()->get_capability_manage_options() )
)
) {
return;
@@ -97,6 +98,10 @@ class SetupWizard {
// Remove an action in the Gutenberg plugin ( not core Gutenberg ) which throws an error.
remove_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' );
// Remove hooks for deprecated functions in WordPress 6.4.0.
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_action( 'admin_head', 'wp_admin_bar_header' );
$this->load_setup_wizard();
}
@@ -155,7 +160,7 @@ class SetupWizard {
return;
}
add_submenu_page( '', '', '', 'manage_options', Area::SLUG . '-setup-wizard', '' );
add_submenu_page( '', '', '', wp_mail_smtp()->get_capability_manage_options(), Area::SLUG . '-setup-wizard', '' );
}
/**
@@ -543,7 +548,7 @@ class SetupWizard {
check_ajax_referer( 'wpms-admin-nonce', 'nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error( esc_html__( 'You don\'t have permission to change options for this WP site!', 'wp-mail-smtp' ) );
}
@@ -561,7 +566,7 @@ class SetupWizard {
check_ajax_referer( 'wpms-admin-nonce', 'nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error( esc_html__( 'You don\'t have permission to change options for this WP site!', 'wp-mail-smtp' ) );
}
@@ -583,7 +588,7 @@ class SetupWizard {
check_ajax_referer( 'wpms-admin-nonce', 'nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error();
}
@@ -625,7 +630,7 @@ class SetupWizard {
check_ajax_referer( 'wpms-admin-nonce', 'nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error( esc_html__( 'You don\'t have permission to change options for this WP site!', 'wp-mail-smtp' ) );
}
@@ -690,6 +695,7 @@ class SetupWizard {
*
* @since 2.6.0
* @since 3.10.0 Supply WPMS_AMAZONSES_DISPLAY_IDENTITIES constant value to control display of Amazon SES identity list.
* @since 3.11.0 Removed WPMS_AMAZONSES_DISPLAY_IDENTITIES constant handling.
*
* @return array
*/
@@ -710,10 +716,6 @@ class SetupWizard {
if ( $provider->get_slug() === 'gmail' ) {
$data['gmail']['redirect_uri'] = \WPMailSMTP\Providers\Gmail\Auth::get_oauth_redirect_url();
}
if ( $provider->get_slug() === 'amazonses' ) {
$data['amazonses']['display_identities'] = ! defined( 'WPMS_AMAZONSES_DISPLAY_IDENTITIES' ) || WPMS_AMAZONSES_DISPLAY_IDENTITIES === true;
}
}
return apply_filters( 'wp_mail_smtp_admin_setup_wizard_prepare_mailer_options', $data );
@@ -728,7 +730,7 @@ class SetupWizard {
check_ajax_referer( 'wpms-admin-nonce', 'nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error();
}
@@ -738,7 +740,7 @@ class SetupWizard {
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$settings = isset( $_POST['settings'] ) ? wp_slash( json_decode( wp_unslash( $_POST['settings'] ), true ) ) : [];
if ( empty( $mailer ) || empty( $settings ) ) {
if ( empty( $mailer ) ) {
wp_send_json_error();
}
@@ -749,7 +751,7 @@ class SetupWizard {
switch ( $mailer ) {
case 'gmail':
$auth = new \WPMailSMTP\Providers\Gmail\Auth();
$auth = wp_mail_smtp()->get_providers()->get_auth( 'gmail' );
if ( $auth->is_clients_saved() && $auth->is_auth_required() ) {
$data['oauth_url'] = $auth->get_auth_url();
@@ -771,7 +773,7 @@ class SetupWizard {
check_ajax_referer( 'wpms-admin-nonce', 'nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error();
}
@@ -784,20 +786,11 @@ class SetupWizard {
switch ( $mailer ) {
case 'gmail':
$auth = new \WPMailSMTP\Providers\Gmail\Auth();
$auth = wp_mail_smtp()->get_providers()->get_auth( 'gmail' );
if ( $auth->is_clients_saved() && ! $auth->is_auth_required() ) {
$user_info = $auth->get_user_info();
$data['connected_email'] = $user_info['email'];
$data['possible_send_from_addresses'] = array_map(
function( $value ) {
return [
'value' => $value,
'label' => $value,
];
},
$auth->get_user_possible_send_from_addresses()
);
$user_info = $auth->get_user_info();
$data['connected_email'] = $user_info['email'];
}
break;
}
@@ -810,11 +803,11 @@ class SetupWizard {
*
* @since 2.6.0
*/
public function remove_oauth_connection() {
public function remove_oauth_connection() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
check_ajax_referer( 'wpms-admin-nonce', 'nonce' );
if ( ! current_user_can( 'manage_options' ) ) {
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
wp_send_json_error();
}
@@ -827,10 +820,21 @@ class SetupWizard {
$options = Options::init();
$old_opt = $options->get_all_raw();
foreach ( $old_opt[ $mailer ] as $key => $value ) {
// Unset everything except Client ID, Client Secret and Domain (for Zoho).
if ( ! in_array( $key, array( 'domain', 'client_id', 'client_secret' ), true ) ) {
unset( $old_opt[ $mailer ][ $key ] );
/*
* Since Gmail mailer uses the same settings array for both the custom app and One-Click Setup,
* we need to make sure we don't remove the wrong settings.
*/
if ( $mailer === 'gmail' ) {
unset( $old_opt[ $mailer ]['access_token'] );
unset( $old_opt[ $mailer ]['refresh_token'] );
unset( $old_opt[ $mailer ]['user_details'] );
unset( $old_opt[ $mailer ]['auth_code'] );
} else {
foreach ( $old_opt[ $mailer ] as $key => $value ) {
// Unset everything except Client ID, Client Secret and Domain (for Zoho).
if ( ! in_array( $key, [ 'domain', 'client_id', 'client_secret' ], true ) ) {
unset( $old_opt[ $mailer ][ $key ] );
}
}
}
@@ -868,8 +872,16 @@ class SetupWizard {
wp_send_json_error( esc_html__( 'Could not install the plugin. Plugin is not whitelisted.', 'wp-mail-smtp' ) );
}
$url = esc_url_raw( WP::admin_url( 'admin.php?page=' . Area::SLUG . '-setup-wizard' ) );
$url = esc_url_raw( WP::admin_url( 'admin.php?page=' . Area::SLUG . '-setup-wizard' ) );
/*
* The `request_filesystem_credentials` function will output a credentials form in case of failure.
* We don't want that, since it will break AJAX response. So just hide output with a buffer.
*/
ob_start();
// phpcs:ignore WPForms.Formatting.EmptyLineAfterAssigmentVariables.AddEmptyLine
$creds = request_filesystem_credentials( $url, '', false, false, null );
ob_end_clean();
// Check for file system permissions.
if ( false === $creds ) {
@@ -883,8 +895,11 @@ class SetupWizard {
// Do not allow WordPress to search/download translations, as this will break JS output.
remove_action( 'upgrader_process_complete', [ 'Language_Pack_Upgrader', 'async_upgrade' ], 20 );
// Import the plugin upgrader.
Helpers::include_plugin_upgrader();
// Create the plugin upgrader with our custom skin.
$installer = new PluginsInstallUpgrader( new PluginsInstallSkin() );
$installer = new Plugin_Upgrader( new PluginsInstallSkin() );
// Error check.
if ( ! method_exists( $installer, 'install' ) || empty( $slug ) ) {