芝麻web文件管理V1.00
编辑当前文件:/var/www/cognitio.in/wp-content/plugins/wp-mail-smtp/src/Admin/SetupWizard.php
get_admin()->get_admin_page_url() . '-setup-wizard'; } /** * Checks if the Wizard should be loaded in current context. * * @since 2.6.0 */ public function maybe_load_wizard() { // Check for wizard-specific parameter // Allow plugins to disable the setup wizard // Check if current user is allowed to save settings. if ( ! ( 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' ) ) ) { return; } // Don't load the interface if doing an ajax call. if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return; } set_current_screen(); // 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' ); $this->load_setup_wizard(); } /** * Maybe redirect to the setup wizard after plugin activation on a new install. * * @since 2.6.0 */ public function maybe_redirect_after_activation() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh if ( wp_doing_ajax() || wp_doing_cron() ) { return; } // Check if we should consider redirection. if ( ! get_transient( 'wp_mail_smtp_activation_redirect' ) ) { return; } delete_transient( 'wp_mail_smtp_activation_redirect' ); // Check option to disable setup wizard redirect. if ( get_option( 'wp_mail_smtp_activation_prevent_redirect' ) ) { return; } // Only do this for single site installs. if ( isset( $_GET['activate-multi'] ) || is_network_admin() ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended return; } // Don't redirect if the Setup Wizard is disabled. if ( ! $this->should_setup_wizard_load() ) { return; } // Initial install. if ( get_option( 'wp_mail_smtp_initial_version' ) === WPMS_PLUGIN_VER ) { update_option( 'wp_mail_smtp_activation_prevent_redirect', true ); wp_safe_redirect( self::get_site_url() ); exit; } } /** * Register page through WordPress's hooks. * * Create a dummy admin page, where the Setup Wizard app can be displayed, * but it's not visible in the admin dashboard menu. * * @since 2.6.0 */ public function add_dashboard_page() { if ( ! $this->should_setup_wizard_load() ) { return; } add_submenu_page( '', '', '', 'manage_options', Area::SLUG . '-setup-wizard', '' ); } /** * Load the Setup Wizard template. * * @since 2.6.0 */ private function load_setup_wizard() { /** * Before setup wizard load. * * @since 2.8.0 * * @param \WPMailSMTP\Admin\SetupWizard $setup_wizard SetupWizard instance. */ do_action( 'wp_mail_smtp_admin_setup_wizard_load_setup_wizard_before', $this ); $this->enqueue_scripts(); $this->setup_wizard_header(); $this->setup_wizard_content(); $this->setup_wizard_footer(); /** * After setup wizard load. * * @since 2.8.0 * * @param \WPMailSMTP\Admin\SetupWizard $setup_wizard SetupWizard instance. */ do_action( 'wp_mail_smtp_admin_setup_wizard_load_setup_wizard_after', $this ); exit; } /** * Load the scripts needed for the Setup Wizard. * * @since 2.6.0 */ public function enqueue_scripts() { if ( ! defined( 'WPMS_VUE_LOCAL_DEV' ) || ! WPMS_VUE_LOCAL_DEV ) { $rtl = is_rtl() ? '.rtl' : ''; wp_enqueue_style( 'wp-mail-smtp-vue-style', wp_mail_smtp()->assets_url . '/vue/css/wizard' . $rtl . '.min.css', [], WPMS_PLUGIN_VER ); } wp_enqueue_script( 'wp-mail-smtp-vue-vendors', wp_mail_smtp()->assets_url . '/vue/js/chunk-vendors.min.js', [], WPMS_PLUGIN_VER, true ); wp_enqueue_script( 'wp-mail-smtp-vue-script', wp_mail_smtp()->assets_url . '/vue/js/wizard.min.js', [ 'wp-mail-smtp-vue-vendors' ], WPMS_PLUGIN_VER, true ); wp_localize_script( 'wp-mail-smtp-vue-script', 'wp_mail_smtp_vue', [ 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'wpms-admin-nonce' ), 'is_multisite' => is_multisite(), 'translations' => WP::get_jed_locale_data( 'wp-mail-smtp' ), 'exit_url' => wp_mail_smtp()->get_admin()->get_admin_page_url(), 'email_test_tab_url' => add_query_arg( 'tab', 'test', wp_mail_smtp()->get_admin()->get_admin_page_url( Area::SLUG . '-tools' ) ), 'is_pro' => wp_mail_smtp()->is_pro(), 'is_ssl' => is_ssl(), 'license_exists' => apply_filters( 'wp_mail_smtp_admin_setup_wizard_license_exists', false ), 'plugin_version' => WPMS_PLUGIN_VER, 'other_smtp_plugins' => $this->detect_other_smtp_plugins(), 'mailer_options' => $this->prepare_mailer_options(), 'defined_constants' => $this->prepare_defined_constants(), 'upgrade_link' => wp_mail_smtp()->get_upgrade_link( 'setup-wizard' ), 'versions' => $this->prepare_versions_data(), 'public_url' => wp_mail_smtp()->assets_url . '/vue/', 'current_user_email' => wp_get_current_user()->user_email, 'completed_time' => self::get_stats()['completed_time'], 'education' => [ 'upgrade_text' => esc_html__( 'We\'re sorry, the %mailer% mailer is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features.', 'wp-mail-smtp' ), 'upgrade_button' => esc_html__( 'Upgrade to Pro', 'wp-mail-smtp' ), 'upgrade_url' => add_query_arg( 'discount', 'SMTPLITEUPGRADE', wp_mail_smtp()->get_upgrade_link( '' ) ), 'upgrade_bonus' => sprintf( wp_kses( /* Translators: %s - discount value $50 */ __( '
Bonus:
WP Mail SMTP users get
%s off
regular price,
applied at checkout.', 'wp-mail-smtp' ), [ 'strong' => [], 'span' => [ 'class' => [], ], 'br' => [], ] ), '$50' ), 'upgrade_doc' => sprintf( '
%2$s
', // phpcs:ignore WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound esc_url( wp_mail_smtp()->get_utm_url( 'https://wpmailsmtp.com/docs/how-to-upgrade-wp-mail-smtp-to-pro-version/', [ 'medium' => 'setup-wizard', 'content' => 'Wizard Pro Mailer Popup - Already purchased' ] ) ), esc_html__( 'Already purchased?', 'wp-mail-smtp' ) ) ], ] ); } /** * Outputs the simplified header used for the Setup Wizard. * * @since 2.6.0 */ public function setup_wizard_header() { ?> >
settings_error_page( 'wp-mail-smtp-vue-setup-wizard', '
' . esc_html__( 'Go back to the Dashboard', 'wp-mail-smtp' ) . '
' ); $this->settings_inline_js(); } /** * Outputs the simplified footer used for the Setup Wizard. * * @since 2.6.0 */ public function setup_wizard_footer() { ?> is_pro() ) { $contact_url = 'https://wordpress.org/support/plugin/wp-mail-smtp/'; } else { // phpcs:ignore WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound $contact_url = esc_url( wp_mail_smtp()->get_utm_url( 'https://wpmailsmtp.com/contact/', [ 'medium' => 'setup-wizard', 'content' => 'Contact Us' ] ) ); } ?>
get_all() ); } /** * Ajax handler for starting the Setup Wizard steps. * * @since 3.1.0 */ public function wizard_steps_started() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( esc_html__( 'You don\'t have permission to change options for this WP site!', 'wp-mail-smtp' ) ); } self::update_stats( [ 'launched_time' => time(), ] ); wp_send_json_success(); } /** * Ajax handler for updating the settings. * * @since 2.6.0 */ public function update_settings() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error(); } $options = Options::init(); $overwrite = ! empty( $_POST['overwrite'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $value = isset( $_POST['value'] ) ? wp_slash( json_decode( wp_unslash( $_POST['value'] ), true ) ) : []; // Cancel summary report email task if summary report email was disabled. if ( ! SummaryReportEmail::is_disabled() && isset( $value['general'][ SummaryReportEmail::SETTINGS_SLUG ] ) && $value['general'][ SummaryReportEmail::SETTINGS_SLUG ] === true ) { ( new SummaryReportEmailTask() )->cancel(); } /** * Before updating settings in Setup Wizard. * * @since 3.3.0 * * @param array $post POST data. */ do_action( 'wp_mail_smtp_admin_setup_wizard_update_settings', $value ); $options->set( $value, false, $overwrite ); wp_send_json_success(); } /** * Ajax handler for importing settings from other SMTP plugins. * * @since 2.6.0 */ public function import_settings() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( esc_html__( 'You don\'t have permission to change options for this WP site!', 'wp-mail-smtp' ) ); } $other_plugin = ! empty( $_POST['value'] ) ? sanitize_text_field( wp_unslash( $_POST['value'] ) ) : ''; if ( empty( $other_plugin ) ) { wp_send_json_error(); } $other_plugin_settings = ( new PluginImportDataRetriever( $other_plugin ) )->get(); if ( empty( $other_plugin_settings ) ) { wp_send_json_error(); } $options = Options::init(); $options->set( $other_plugin_settings, false, false ); wp_send_json_success(); } /** * Detect if any other SMTP plugin options are defined. * Other SMTP plugins: * - Easy WP SMTP * - Post SMTP Mailer * - SMTP Mailer * - WP SMTP * - FluentSMTP * * @since 2.6.0 * @since 3.2.0 Added FluentSMTP. * * @return array */ private function detect_other_smtp_plugins() { $data = []; $plugins = [ 'easy-smtp' => 'swpsmtp_options', 'post-smtp-mailer' => 'postman_options', 'smtp-mailer' => 'smtp_mailer_options', 'wp-smtp' => 'wp_smtp_options', 'fluent-smtp' => 'fluentmail-settings', ]; foreach ( $plugins as $plugin_slug => $plugin_options ) { $options = get_option( $plugin_options ); if ( ! empty( $options ) ) { $data[] = $plugin_slug; } } return $data; } /** * Prepare mailer options for all mailers. * * @since 2.6.0 * * @return array */ private function prepare_mailer_options() { $data = []; foreach ( wp_mail_smtp()->get_providers()->get_options_all() as $provider ) { $data[ $provider->get_slug() ] = [ 'slug' => $provider->get_slug(), 'title' => $provider->get_title(), 'description' => $provider->get_description(), 'edu_notice' => $provider->get_notice( 'educational' ), 'min_php' => $provider->get_php_version(), 'disabled' => $provider->is_disabled(), ]; if ( $provider->get_slug() === 'gmail' ) { $data['gmail']['redirect_uri'] = \WPMailSMTP\Providers\Gmail\Auth::get_oauth_redirect_url(); } } return apply_filters( 'wp_mail_smtp_admin_setup_wizard_prepare_mailer_options', $data ); } /** * AJAX callback for getting the oAuth authorization URL. * * @since 2.6.0 */ public function get_oauth_url() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error(); } $data = []; $mailer = ! empty( $_POST['mailer'] ) ? sanitize_text_field( wp_unslash( $_POST['mailer'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $settings = isset( $_POST['settings'] ) ? wp_slash( json_decode( wp_unslash( $_POST['settings'] ), true ) ) : []; if ( empty( $mailer ) || empty( $settings ) ) { wp_send_json_error(); } $settings = array_merge( $settings, [ 'is_setup_wizard_auth' => true ] ); $options = Options::init(); $options->set( [ $mailer => $settings ], false, false ); switch ( $mailer ) { case 'gmail': $auth = new \WPMailSMTP\Providers\Gmail\Auth(); if ( $auth->is_clients_saved() && $auth->is_auth_required() ) { $data['oauth_url'] = $auth->get_auth_url(); } break; } $data = apply_filters( 'wp_mail_smtp_admin_setup_wizard_get_oauth_url', $data, $mailer ); wp_send_json_success( array_merge( [ 'mailer' => $mailer ], $data ) ); } /** * AJAX callback for getting the oAuth connected data. * * @since 2.6.0 */ public function get_connected_data() { // phpcs:ignore Generic.Metrics.NestingLevel.MaxExceeded check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error(); } $data = []; $mailer = ! empty( $_POST['mailer'] ) ? sanitize_text_field( wp_unslash( $_POST['mailer'] ) ) : ''; if ( empty( $mailer ) ) { wp_send_json_error(); } switch ( $mailer ) { case 'gmail': $auth = new \WPMailSMTP\Providers\Gmail\Auth(); 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() ); } break; } wp_send_json_success( array_merge( [ 'mailer' => $mailer ], $data ) ); } /** * AJAX callback for removing the oAuth authorization connection. * * @since 2.6.0 */ public function remove_oauth_connection() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error(); } $mailer = ! empty( $_POST['mailer'] ) ? sanitize_text_field( wp_unslash( $_POST['mailer'] ) ) : ''; if ( empty( $mailer ) ) { wp_send_json_error(); } $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 ] ); } } $options->set( $old_opt ); wp_send_json_success(); } /** * AJAX callback for installing a plugin. * Has to contain the `slug` POST parameter. * * @since 2.6.0 */ public function install_plugin() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); // Check for permissions. if ( ! current_user_can( 'install_plugins' ) ) { wp_send_json_error( esc_html__( 'Could not install the plugin. You don\'t have permission to install plugins.', 'wp-mail-smtp' ) ); } if ( ! current_user_can( 'activate_plugins' ) ) { wp_send_json_error( esc_html__( 'Could not install the plugin. You don\'t have permission to activate plugins.', 'wp-mail-smtp' ) ); } $slug = ! empty( $_POST['slug'] ) ? sanitize_text_field( wp_unslash( $_POST['slug'] ) ) : ''; if ( empty( $slug ) ) { wp_send_json_error( esc_html__( 'Could not install the plugin. Plugin slug is missing.', 'wp-mail-smtp' ) ); } if ( ! in_array( $slug, wp_list_pluck( $this->get_partner_plugins(), 'slug' ), true ) ) { 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' ) ); $creds = request_filesystem_credentials( $url, '', false, false, null ); // Check for file system permissions. if ( false === $creds ) { wp_send_json_error( esc_html__( 'Could not install the plugin. Don\'t have file permission.', 'wp-mail-smtp' ) ); } if ( ! WP_Filesystem( $creds ) ) { wp_send_json_error( esc_html__( 'Could not install the plugin. Don\'t have file permission.', 'wp-mail-smtp' ) ); } // 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 ); // Create the plugin upgrader with our custom skin. $installer = new PluginsInstallUpgrader( new PluginsInstallSkin() ); // Error check. if ( ! method_exists( $installer, 'install' ) || empty( $slug ) ) { wp_send_json_error( esc_html__( 'Could not install the plugin. WP Plugin installer initialization failed.', 'wp-mail-smtp' ) ); } include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; $api = plugins_api( 'plugin_information', [ 'slug' => $slug, 'fields' => [ 'short_description' => false, 'sections' => false, 'requires' => false, 'rating' => false, 'ratings' => false, 'downloaded' => false, 'last_updated' => false, 'added' => false, 'tags' => false, 'compatibility' => false, 'homepage' => false, 'donate_link' => false, ], ] ); if ( is_wp_error( $api ) ) { wp_send_json_error( $api->get_error_message() ); } $installer->install( $api->download_link ); // Flush the cache and return the newly installed plugin basename. wp_cache_flush(); if ( $installer->plugin_info() ) { $plugin_basename = $installer->plugin_info(); // Disable the WPForms redirect after plugin activation. if ( $slug === 'wpforms-lite' ) { update_option( 'wpforms_activation_redirect', true ); } // Disable the AIOSEO redirect after plugin activation. if ( $slug === 'all-in-one-seo-pack' ) { update_option( 'aioseo_activation_redirect', true ); } // Activate the plugin silently. $activated = activate_plugin( $plugin_basename ); // Disable the RafflePress redirect after plugin activation. if ( $slug === 'rafflepress' ) { delete_transient( '_rafflepress_welcome_screen_activation_redirect' ); } // Disable the MonsterInsights redirect after plugin activation. if ( $slug === 'google-analytics-for-wordpress' ) { delete_transient( '_monsterinsights_activation_redirect' ); } // Disable the SeedProd redirect after the plugin activation. if ( $slug === 'coming-soon' ) { delete_transient( '_seedprod_welcome_screen_activation_redirect' ); } if ( ! is_wp_error( $activated ) ) { wp_send_json_success( [ 'slug' => $slug, 'is_installed' => true, 'is_activated' => true, ] ); } else { wp_send_json_success( [ 'slug' => $slug, 'is_installed' => true, 'is_activated' => false, ] ); } } wp_send_json_error( esc_html__( 'Could not install the plugin. WP Plugin installer could not retrieve plugin information.', 'wp-mail-smtp' ) ); } /** * AJAX callback for getting all partner's plugin information. * * @since 2.6.0 */ public function get_partner_plugins_info() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); $plugins = $this->get_partner_plugins(); $contact_form_plugin_already_installed = false; $contact_form_basenames = [ 'wpforms-lite/wpforms.php', 'wpforms/wpforms.php', 'formidable/formidable.php', 'formidable/formidable-pro.php', 'gravityforms/gravityforms.php', 'ninja-forms/ninja-forms.php', ]; $installed_plugins = get_plugins(); foreach ( $installed_plugins as $basename => $plugin_info ) { if ( in_array( $basename, $contact_form_basenames, true ) ) { $contact_form_plugin_already_installed = true; break; } } // Final check if maybe WPForms is already install and active as a MU plugin. if ( class_exists( '\WPForms\WPForms' ) ) { $contact_form_plugin_already_installed = true; } $data = [ 'plugins' => $plugins, 'contact_form_plugin_already_installed' => $contact_form_plugin_already_installed, ]; wp_send_json_success( $data ); } /** * Get the partner plugins data. * * @since 3.3.0 * * @return array[] */ private function get_partner_plugins() { $installed_plugins = get_plugins(); return [ [ 'slug' => 'wpforms-lite', 'name' => esc_html__( 'Contact Forms by WPForms', 'wp-mail-smtp' ), 'is_activated' => function_exists( 'wpforms' ), 'is_installed' => array_key_exists( 'wpforms-lite/wpforms.php', $installed_plugins ), ], [ 'slug' => 'google-analytics-for-wordpress', 'name' => esc_html__( 'Google Analytics by MonsterInsights', 'wp-mail-smtp' ), 'is_activated' => function_exists( 'MonsterInsights' ), 'is_installed' => array_key_exists( 'google-analytics-for-wordpress/googleanalytics.php', $installed_plugins ), ], [ 'slug' => 'all-in-one-seo-pack', 'name' => esc_html__( 'All in One SEO', 'wp-mail-smtp' ), 'is_activated' => class_exists( 'AIOSEOP_Core' ), 'is_installed' => array_key_exists( 'all-in-one-seo-pack/all_in_one_seo_pack.php', $installed_plugins ), ], [ 'slug' => 'rafflepress', 'name' => esc_html__( 'Giveaways by RafflePress', 'wp-mail-smtp' ), 'is_activated' => defined( 'RAFFLEPRESS_BUILD' ), 'is_installed' => array_key_exists( 'rafflepress/rafflepress.php', $installed_plugins ), ], [ 'slug' => 'instagram-feed', 'name' => esc_html__( 'Smash Balloon Social Photo Feed', 'wp-mail-smtp' ), 'is_activated' => function_exists( 'sb_instagram_feed_init' ), 'is_installed' => array_key_exists( 'instagram-feed/instagram-feed.php', $installed_plugins ), ], [ 'slug' => 'coming-soon', 'name' => esc_html__( 'SeedProd Landing Page Builder', 'wp-mail-smtp' ), 'is_activated' => defined( 'SEEDPROD_BUILD' ), 'is_installed' => array_key_exists( 'coming-soon/coming-soon.php', $installed_plugins ), ], [ 'slug' => 'wp-call-button', 'name' => esc_html__( 'WP Call Button', 'wp-mail-smtp' ), 'is_activated' => defined( 'WP_CALL_BUTTON_VERSION' ), 'is_installed' => array_key_exists( 'wp-call-button/wp-call-button.php', $installed_plugins ), ], ]; } /** * AJAX callback for subscribing an email address to the WP Mail SMTP Drip newsletter. * * @since 2.6.0 */ public function subscribe_to_newsletter() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); $email = ! empty( $_POST['email'] ) ? filter_var( wp_unslash( $_POST['email'] ), FILTER_VALIDATE_EMAIL ) : ''; if ( empty( $email ) ) { wp_send_json_error(); } if ( function_exists( 'wpforms' ) && ( wpforms()->pro ) ) { $wpforms_version_type = 'pro'; } elseif ( function_exists( 'wpforms' ) && ( ! wpforms()->pro ) ) { $wpforms_version_type = 'lite'; } $body = [ 'email' => base64_encode( $email ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode ]; if ( isset( $wpforms_version_type ) ) { $body['wpforms_version_type'] = $wpforms_version_type; } wp_remote_post( 'https://connect.wpmailsmtp.com/subscribe/drip/', [ 'body' => $body, ] ); wp_send_json_success(); } /** * AJAX callback for plugin upgrade, from lite to pro. * * @since 2.6.0 */ public function upgrade_plugin() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); if ( wp_mail_smtp()->is_pro() ) { wp_send_json_success( esc_html__( 'You are already using the WP Mail SMTP PRO version. Please refresh this page and verify your license key.', 'wp-mail-smtp' ) ); } if ( ! current_user_can( 'install_plugins' ) ) { wp_send_json_error( esc_html__( 'You don\'t have the permission to perform this action.', 'wp-mail-smtp' ) ); } $license_key = ! empty( $_POST['license_key'] ) ? sanitize_key( $_POST['license_key'] ) : ''; if ( empty( $license_key ) ) { wp_send_json_error( esc_html__( 'Please enter a valid license key!', 'wp-mail-smtp' ) ); } $oth = hash( 'sha512', wp_rand() ); $url = Connect::generate_url( $license_key, $oth, add_query_arg( 'upgrade-redirect', '1', self::get_site_url() ) . '#/step/license' ); if ( empty( $url ) ) { wp_send_json_error( esc_html__( 'Upgrade functionality not available!', 'wp-mail-smtp' ) ); } wp_send_json_success( [ 'redirect_url' => $url ] ); } /** * AJAX callback for checking the mailer configuration. * - Send a test email * - Check the domain setup with the Domain Checker API. * * @since 2.6.0 */ public function check_mailer_configuration() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); $options = Options::init(); $mailer = $options->get( 'mail', 'mailer' ); $email = $options->get( 'mail', 'from_email' ); $domain = ''; // Send the test mail. $result = wp_mail( $email, 'WP Mail SMTP Automatic Email Test', TestTab::get_email_message_text(), array( 'X-Mailer-Type:WPMailSMTP/Admin/SetupWizard/Test', ) ); if ( ! $result ) { $this->update_completed_stat( false ); ( new UsageTracking() )->send_failed_setup_wizard_usage_tracking_data(); wp_send_json_error(); } // Add the optional sending domain parameter. if ( in_array( $mailer, [ 'mailgun', 'sendinblue', 'sendgrid' ], true ) ) { $domain = $options->get( $mailer, 'domain' ); } // Perform the domain checker API test. $domain_checker = new DomainChecker( $mailer, $email, $domain ); if ( $domain_checker->has_errors() ) { $this->update_completed_stat( false ); ( new UsageTracking() )->send_failed_setup_wizard_usage_tracking_data( $domain_checker ); wp_send_json_error(); } $this->update_completed_stat( true ); wp_send_json_success(); } /** * AJAX callback for sending feedback. * * @since 2.6.0 */ public function send_feedback() { check_ajax_referer( 'wpms-admin-nonce', 'nonce' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $data = ! empty( $_POST['data'] ) ? json_decode( wp_unslash( $_POST['data'] ), true ) : []; $feedback = ! empty( $data['feedback'] ) ? sanitize_textarea_field( $data['feedback'] ) : ''; $permission = ! empty( $data['permission'] ); wp_remote_post( 'https://wpmailsmtp.com/wizard-feedback/', [ 'body' => [ 'wpforms' => [ 'id' => 87892, 'fields' => [ '1' => $feedback, '2' => $permission ? wp_get_current_user()->user_email : '', '3' => wp_mail_smtp()->get_license_type(), '4' => WPMS_PLUGIN_VER, ], ], ], ] ); wp_send_json_success(); } /** * Data used for the Vue scripts to display old PHP and WP versions warnings. * * @since 2.6.0 */ private function prepare_versions_data() { global $wp_version; return array( 'php_version' => phpversion(), 'php_version_below_55' => apply_filters( 'wp_mail_smtp_temporarily_hide_php_under_55_upgrade_warnings', version_compare( phpversion(), '5.5', '<' ) ), 'php_version_below_56' => apply_filters( 'wp_mail_smtp_temporarily_hide_php_56_upgrade_warnings', version_compare( phpversion(), '5.6', '<' ) ), 'wp_version' => $wp_version, 'wp_version_below_49' => version_compare( $wp_version, '4.9', '<' ), ); } /** * Remove 'error' from the automatic clearing list of query arguments after page loads. * This will fix the issue with missing oAuth 'error' argument for the Setup Wizard. * * @since 2.6.0 * * @param array $defaults Array of query arguments to be cleared after page load. * * @return array */ public function maybe_disable_automatic_query_args_removal( $defaults ) { if ( ( isset( $_GET['page'] ) && $_GET['page'] === 'wp-mail-smtp-setup-wizard' ) && // phpcs:ignore WordPress.Security.NonceVerification.Recommended ( ! empty( $_GET['error'] ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended ) { $defaults = array_values( array_diff( $defaults, [ 'error' ] ) ); } return $defaults; } /** * Check if the Setup Wizard should load. * * @since 2.6.0 * * @return bool */ public function should_setup_wizard_load() { return (bool) apply_filters( 'wp_mail_smtp_admin_setup_wizard_load_wizard', true ); } /** * Get the Setup Wizard stats. * - launched_time -> when the Setup Wizard was last launched. * - completed_time -> when the Setup Wizard was last completed. * - was_successful -> if the Setup Wizard was completed successfully. * * @since 3.1.0 * * @return array */ public static function get_stats() { $defaults = [ 'launched_time' => 0, 'completed_time' => 0, 'was_successful' => false, ]; return get_option( self::STATS_OPTION_KEY, $defaults ); } /** * Update the Setup Wizard stats. * * @since 3.1.0 * * @param array $options Take a look at SetupWizard::get_stats method for the possible array keys. */ public static function update_stats( $options ) { update_option( self::STATS_OPTION_KEY, array_merge( self::get_stats(), $options ) , false ); } /** * Update the completed Setup Wizard stats. * * @since 3.1.0 * * @param bool $was_successful If the Setup Wizard was completed successfully. */ private function update_completed_stat( $was_successful ) { self::update_stats( [ 'completed_time' => time(), 'was_successful' => $was_successful, ] ); } /** * Prepare an array of WP Mail SMTP PHP constants in use. * Those that are used in the setup wizard. * * @since 3.2.0 * * @return array */ private function prepare_defined_constants() { $options = Options::init(); if ( ! $options->is_const_enabled() ) { return []; } $constants = [ 'WPMS_MAIL_FROM' => [ 'mail', 'from_email' ], 'WPMS_MAIL_FROM_FORCE' => [ 'mail', 'from_email_force' ], 'WPMS_MAIL_FROM_NAME' => [ 'mail', 'from_name' ], 'WPMS_MAIL_FROM_NAME_FORCE' => [ 'mail', 'from_name_force' ], 'WPMS_MAILER' => [ 'mail', 'mailer' ], 'WPMS_SMTPCOM_API_KEY' => [ 'smtpcom', 'api_key' ], 'WPMS_SMTPCOM_CHANNEL' => [ 'smtpcom', 'channel' ], 'WPMS_SENDINBLUE_API_KEY' => [ 'sendinblue', 'api_key' ], 'WPMS_SENDINBLUE_DOMAIN' => [ 'sendinblue', 'domain' ], 'WPMS_AMAZONSES_CLIENT_ID' => [ 'amazonses', 'client_id' ], 'WPMS_AMAZONSES_CLIENT_SECRET' => [ 'amazonses', 'client_secret' ], 'WPMS_AMAZONSES_REGION' => [ 'amazonses', 'region' ], 'WPMS_GMAIL_CLIENT_ID' => [ 'gmail', 'client_id' ], 'WPMS_GMAIL_CLIENT_SECRET' => [ 'gmail', 'client_secret' ], 'WPMS_MAILGUN_API_KEY' => [ 'mailgun', 'api_key' ], 'WPMS_MAILGUN_DOMAIN' => [ 'mailgun', 'domain' ], 'WPMS_MAILGUN_REGION' => [ 'mailgun', 'region' ], 'WPMS_OUTLOOK_CLIENT_ID' => [ 'outlook', 'client_id' ], 'WPMS_OUTLOOK_CLIENT_SECRET' => [ 'outlook', 'client_secret' ], 'WPMS_POSTMARK_SERVER_API_TOKEN' => [ 'postmark', 'server_api_token' ], 'WPMS_POSTMARK_MESSAGE_STREAM' => [ 'postmark', 'message_stream' ], 'WPMS_SENDGRID_API_KEY' => [ 'sendgrid', 'api_key' ], 'WPMS_SENDGRID_DOMAIN' => [ 'sendgrid', 'domain' ], 'WPMS_SPARKPOST_API_KEY' => [ 'sparkpost', 'api_key' ], 'WPMS_SPARKPOST_REGION' => [ 'sparkpost', 'region' ], 'WPMS_ZOHO_DOMAIN' => [ 'zoho', 'domain' ], 'WPMS_ZOHO_CLIENT_ID' => [ 'zoho', 'client_id' ], 'WPMS_ZOHO_CLIENT_SECRET' => [ 'zoho', 'client_secret' ], 'WPMS_SMTP_HOST' => [ 'smtp', 'host' ], 'WPMS_SMTP_PORT' => [ 'smtp', 'port' ], 'WPMS_SSL' => [ 'smtp', 'encryption' ], 'WPMS_SMTP_AUTH' => [ 'smtp', 'auth' ], 'WPMS_SMTP_AUTOTLS' => [ 'smtp', 'autotls' ], 'WPMS_SMTP_USER' => [ 'smtp', 'user' ], 'WPMS_SMTP_PASS' => [ 'smtp', 'pass' ], 'WPMS_LOGS_ENABLED' => [ 'logs', 'enabled' ], 'WPMS_SUMMARY_REPORT_EMAIL_DISABLED' => [ 'general', SummaryReportEmail::SETTINGS_SLUG ], ]; $defined = []; foreach ( $constants as $constant => $group_and_key ) { if ( $options->is_const_defined( $group_and_key[0], $group_and_key[1] ) ) { $defined[] = $constant; } } return $defined; } }