rebase from live enviornment
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -150,8 +150,7 @@ WPMailSMTP.Admin.About = WPMailSMTP.Admin.About || ( function( document, window,
|
||||
if (
|
||||
res.hasOwnProperty( 'data' ) &&
|
||||
res.data.hasOwnProperty( 0 ) &&
|
||||
res.data[ 0 ].hasOwnProperty( 'code' ) &&
|
||||
res.data[ 0 ].code === 'download_failed'
|
||||
res.data[ 0 ].hasOwnProperty( 'code' )
|
||||
) {
|
||||
|
||||
// Specific server-returned error.
|
||||
|
||||
@@ -1 +1 @@
|
||||
"use strict";var WPMailSMTP=window.WPMailSMTP||{};WPMailSMTP.Admin=WPMailSMTP.Admin||{},WPMailSMTP.Admin.About=WPMailSMTP.Admin.About||function(a,t,u){var i={init:function(){u(i.ready)},ready:function(){i.pageHolder=u(".wp-mail-smtp-page-about"),i.bindActions(),u(".wp-mail-smtp-page").trigger("WPMailSMTP.Admin.About.ready")},bindActions:function(){jQuery(".wp-mail-smtp-admin-about-plugins .plugin-item .details").matchHeight(),u(a).on("click",".wp-mail-smtp-admin-about-plugins .plugin-item .action-button .button",function(a){a.preventDefault();var i=u(this);if(i.hasClass("disabled")||i.hasClass("loading"))return!1;var s,n,l,e,o,d=i.closest(".plugin-item"),a=i.attr("data-plugin");if(i.addClass("loading disabled"),i.text(wp_mail_smtp_about.plugin_processing),i.hasClass("status-inactive"))s="about_plugin_activate",n="status-active button button-secondary disabled",l=wp_mail_smtp_about.plugin_active,e=wp_mail_smtp_about.plugin_activated;else{if(!i.hasClass("status-download"))return i.hasClass("status-open")?(t.open(i.attr("href"),"_blank").focus(),i.removeClass("loading disabled"),void i.text(wp_mail_smtp_about.plugin_visit)):void 0;s="about_plugin_install",n="status-active button disabled",l=wp_mail_smtp_about.plugin_active,e=wp_mail_smtp_about.plugin_activated}a={action:"wp_mail_smtp_ajax",task:s,nonce:wp_mail_smtp_about.nonce,plugin:a};u.post(wp_mail_smtp_about.ajax_url,a,function(a){var t;a.success?(t=!0,"about_plugin_install"===s?(i.attr("data-plugin",a.data.basename),o=a.data.msg,a.data.is_activated||(n="button",l=wp_mail_smtp_about.plugin_inactive,e=wp_mail_smtp_about.plugin_activate)):o=a.data,d.find(".actions").append('<div class="msg success">'+o+"</div>"),d.find("span.status-label").removeClass("status-active status-inactive status-download").addClass(n).removeClass("button button-primary button-secondary disabled").text(l),i.removeClass("status-active status-inactive status-download").removeClass("button button-primary button-secondary disabled").addClass(n).html(e)):(t=!1,a.hasOwnProperty("data")&&a.data.hasOwnProperty(0)&&a.data[0].hasOwnProperty("code")&&"download_failed"===a.data[0].code?d.find(".actions").append('<div class="msg error">'+wp_mail_smtp_about.plugin_install_error+"</div>"):d.find(".actions").append('<div class="msg error">'+a.data+"</div>"),i.html(wp_mail_smtp_about.plugin_download_btn)),t||i.removeClass("disabled"),i.removeClass("loading"),setTimeout(function(){u(".plugin-item .msg").remove()},3e3)}).fail(function(a){console.log(a.responseText)})})}};return i}(document,window,jQuery),WPMailSMTP.Admin.About.init();
|
||||
"use strict";var WPMailSMTP=window.WPMailSMTP||{};WPMailSMTP.Admin=WPMailSMTP.Admin||{},WPMailSMTP.Admin.About=WPMailSMTP.Admin.About||function(a,t,d){var i={init:function(){d(i.ready)},ready:function(){i.pageHolder=d(".wp-mail-smtp-page-about"),i.bindActions(),d(".wp-mail-smtp-page").trigger("WPMailSMTP.Admin.About.ready")},bindActions:function(){jQuery(".wp-mail-smtp-admin-about-plugins .plugin-item .details").matchHeight(),d(a).on("click",".wp-mail-smtp-admin-about-plugins .plugin-item .action-button .button",function(a){a.preventDefault();var i=d(this);if(i.hasClass("disabled")||i.hasClass("loading"))return!1;var s,n,l,e,o,u=i.closest(".plugin-item"),a=i.attr("data-plugin");if(i.addClass("loading disabled"),i.text(wp_mail_smtp_about.plugin_processing),i.hasClass("status-inactive"))s="about_plugin_activate",n="status-active button button-secondary disabled",l=wp_mail_smtp_about.plugin_active,e=wp_mail_smtp_about.plugin_activated;else{if(!i.hasClass("status-download"))return i.hasClass("status-open")?(t.open(i.attr("href"),"_blank").focus(),i.removeClass("loading disabled"),void i.text(wp_mail_smtp_about.plugin_visit)):void 0;s="about_plugin_install",n="status-active button disabled",l=wp_mail_smtp_about.plugin_active,e=wp_mail_smtp_about.plugin_activated}a={action:"wp_mail_smtp_ajax",task:s,nonce:wp_mail_smtp_about.nonce,plugin:a};d.post(wp_mail_smtp_about.ajax_url,a,function(a){var t;a.success?(t=!0,"about_plugin_install"===s?(i.attr("data-plugin",a.data.basename),o=a.data.msg,a.data.is_activated||(n="button",l=wp_mail_smtp_about.plugin_inactive,e=wp_mail_smtp_about.plugin_activate)):o=a.data,u.find(".actions").append('<div class="msg success">'+o+"</div>"),u.find("span.status-label").removeClass("status-active status-inactive status-download").addClass(n).removeClass("button button-primary button-secondary disabled").text(l),i.removeClass("status-active status-inactive status-download").removeClass("button button-primary button-secondary disabled").addClass(n).html(e)):(t=!1,a.hasOwnProperty("data")&&a.data.hasOwnProperty(0)&&a.data[0].hasOwnProperty("code")?u.find(".actions").append('<div class="msg error">'+wp_mail_smtp_about.plugin_install_error+"</div>"):u.find(".actions").append('<div class="msg error">'+a.data+"</div>"),i.html(wp_mail_smtp_about.plugin_download_btn)),t||i.removeClass("disabled"),i.removeClass("loading"),setTimeout(function(){d(".plugin-item .msg").remove()},3e3)}).fail(function(a){console.log(a.responseText)})})}};return i}(document,window,jQuery),WPMailSMTP.Admin.About.init();
|
||||
@@ -272,6 +272,12 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
|
||||
},
|
||||
} );
|
||||
} );
|
||||
|
||||
$( '#wp-mail-smtp-setting-gmail-one_click_setup_enabled-lite' ).on( 'click', function( e ) {
|
||||
e.preventDefault();
|
||||
|
||||
app.education.gmailOneClickSetupUpgrade();
|
||||
} );
|
||||
},
|
||||
|
||||
education: {
|
||||
@@ -279,15 +285,33 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
|
||||
|
||||
var mailerName = $input.data( 'title' ).trim();
|
||||
|
||||
app.education.upgradeModal(
|
||||
wp_mail_smtp.education.upgrade_title.replace( /%name%/g, mailerName ),
|
||||
wp_mail_smtp.education.upgrade_content.replace( /%name%/g, mailerName ),
|
||||
$input.val()
|
||||
);
|
||||
},
|
||||
|
||||
gmailOneClickSetupUpgrade: function() {
|
||||
|
||||
app.education.upgradeModal(
|
||||
wp_mail_smtp.education.gmail.one_click_setup_upgrade_title,
|
||||
wp_mail_smtp.education.gmail.one_click_setup_upgrade_content,
|
||||
'gmail-one-click-setup'
|
||||
);
|
||||
},
|
||||
|
||||
upgradeModal: function( title, content, upgradeUrlUtmContent ) {
|
||||
|
||||
$.alert( {
|
||||
backgroundDismiss: true,
|
||||
escapeKey: true,
|
||||
animationBounce: 1,
|
||||
type: 'blue',
|
||||
closeIcon: true,
|
||||
title: wp_mail_smtp.education.upgrade_title.replace( /%name%/g, mailerName ),
|
||||
title: title,
|
||||
icon: '"></i>' + wp_mail_smtp.education.upgrade_icon_lock + '<i class="',
|
||||
content: wp_mail_smtp.education.upgrade_content.replace( /%name%/g, mailerName ),
|
||||
content: content,
|
||||
boxWidth: '550px',
|
||||
onOpenBefore: function() {
|
||||
this.$btnc.after( '<div class="discount-note">' + wp_mail_smtp.education.upgrade_bonus + wp_mail_smtp.education.upgrade_doc + '</div>' );
|
||||
@@ -300,7 +324,7 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
|
||||
keys: [ 'enter' ],
|
||||
action: function() {
|
||||
var appendChar = /(\?)/.test( wp_mail_smtp.education.upgrade_url ) ? '&' : '?',
|
||||
upgradeURL = wp_mail_smtp.education.upgrade_url + appendChar + 'utm_content=' + encodeURIComponent( $input.val() );
|
||||
upgradeURL = wp_mail_smtp.education.upgrade_url + appendChar + 'utm_content=' + encodeURIComponent( upgradeUrlUtmContent );
|
||||
|
||||
window.open( upgradeURL, '_blank' );
|
||||
}
|
||||
@@ -362,7 +386,7 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
|
||||
} );
|
||||
|
||||
// Set settings changed attribute, if any input was changed.
|
||||
$( ':input:not( #wp-mail-smtp-setting-license-key, .wp-mail-smtp-not-form-input )', $settingPages ).on( 'change', function() {
|
||||
$( ':input:not( #wp-mail-smtp-setting-license-key, .wp-mail-smtp-not-form-input, #wp-mail-smtp-setting-gmail-one_click_setup_enabled )', $settingPages ).on( 'change', function() {
|
||||
app.pluginSettingsChanged = true;
|
||||
} );
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -55,11 +55,11 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/settings/store/actions.js:11
|
||||
__( 'It looks like we can\'t load existing settings.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/api/index.js:232
|
||||
// Reference: src/modules/settings/api/index.js:265
|
||||
// Reference: src/modules/settings/store/actions.js:111
|
||||
__( 'It looks like we can\'t load oAuth connected data.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/store/actions.js:123
|
||||
// Reference: src/modules/settings/store/actions.js:132
|
||||
__( 'It looks like we can\'t remove oAuth connection.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/store/actions.js:31
|
||||
@@ -76,12 +76,12 @@ $generated_i18n_strings = array(
|
||||
__( 'It looks like we can\'t send the feedback.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/plugins/api/index.js:69
|
||||
// Reference: src/modules/settings/api/index.js:234
|
||||
// Reference: src/modules/settings/api/index.js:267
|
||||
// Reference: src/modules/setup-wizard/api/index.js:39
|
||||
/* Translators: Error status and error text. */
|
||||
__( '%1$s, %2$s', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/api/index.js:238
|
||||
// Reference: src/modules/settings/api/index.js:271
|
||||
// Reference: src/modules/setup-wizard/api/index.js:43
|
||||
__( 'You appear to be offline.', 'wp-mail-smtp' ),
|
||||
|
||||
@@ -100,7 +100,7 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/settings/api/index.js:172
|
||||
__( 'It looks like we can\'t load authentication details.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/api/index.js:202
|
||||
// Reference: src/modules/settings/api/index.js:235
|
||||
__( 'It looks like we can\'t remove OAuth connection.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/api/index.js:21
|
||||
@@ -155,6 +155,7 @@ $generated_i18n_strings = array(
|
||||
__( 'Save and Continue', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepChooseMailer.vue:17
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:18
|
||||
__( 'Previous Step', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:214
|
||||
@@ -220,7 +221,7 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:15
|
||||
__( 'Domain Name', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:16
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:16
|
||||
__( 'Region', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:18
|
||||
@@ -235,43 +236,47 @@ $generated_i18n_strings = array(
|
||||
/* Translators: Link to the Mailgun documentation. */
|
||||
__( 'Define which endpoint you want to use for sending messages. If you are operating under EU laws, you may be required to use EU region. %1$sMore information%2$s on Mailgun.com.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:16
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:19
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:22
|
||||
__( 'From Name', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:17
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:20
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:23
|
||||
__( 'Force From Name', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:18
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:21
|
||||
__( 'From Email', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:19
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:22
|
||||
__( 'Force From Email', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:20
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:23
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:24
|
||||
__( 'If enabled, the From Name setting above will be used for all emails, ignoring values set by other plugins.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:21
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:24
|
||||
__( 'If enabled, the From Email setting above will be used for all emails, ignoring values set by other plugins.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:22
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:25
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:25
|
||||
__( 'The name that emails are sent from.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:23
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:26
|
||||
__( 'The email address that emails are sent from.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:31
|
||||
__( 'Read how to set up Mailgun', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:36
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/SparkPost.vue:31
|
||||
__( 'US', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:40
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/SparkPost.vue:35
|
||||
__( 'EU', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/Steps.vue:12
|
||||
__( 'Close and exit the Setup Wizard', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendlayer.vue:13
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:13
|
||||
__( 'API Key', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Sendinblue.vue:14
|
||||
@@ -305,7 +310,9 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigureMailer.vue:14
|
||||
__( 'Below, we\'ll show you all of the settings required to set up this mailer.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsInputLongCheckbox.vue:20
|
||||
// Reference: src/modules/settings/components/input/SettingsInputRadio.vue:33
|
||||
// Reference: src/modules/settings/components/input/SettingsInputSwitch.vue:39
|
||||
// Reference: src/modules/settings/components/input/SettingsInputText.vue:69
|
||||
__( 'This setting is already configured with the WP Mail SMTP constant. To change it, please edit or remove the <code></code> constant in your <code>wp-config.php</code> file.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsInputText.vue:36
|
||||
@@ -335,10 +342,10 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigurationFailure.vue:13
|
||||
__( 'Start Troubleshooting', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigurationFailure.vue:14
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigurationSuccess.vue:23
|
||||
__( 'Send us Feedback', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigurationFailure.vue:15
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigurationSuccess.vue:24
|
||||
__( 'Finish Setup', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepImport.vue:12
|
||||
@@ -439,16 +446,16 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:17
|
||||
__( 'The data center location used by your Zoho account.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:15
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:18
|
||||
__( 'Client ID', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:16
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:19
|
||||
__( 'Client Secret', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:17
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:20
|
||||
__( 'Redirect URI', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:18
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:21
|
||||
__( 'Authorization', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:26
|
||||
@@ -620,10 +627,10 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/AmazonSES.vue:30
|
||||
__( 'Amazon SES requires an SSL certificate, and so is not currently compatible with your site. Please contact your host to request a SSL certificate, or check out ', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:21
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/AmazonSES.vue:31
|
||||
__( 'WPBeginner\'s tutorial on how to set up SSL', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:22
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/AmazonSES.vue:32
|
||||
__( 'If you\'d prefer not to set up SSL, or need an SMTP solution in the meantime, please go back and select a different mailer option.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepChooseMailer.vue:13
|
||||
@@ -723,13 +730,13 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:86
|
||||
__( 'Verification Error!', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:17
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:19
|
||||
__( 'Authorized Redirect URI', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:24
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:29
|
||||
__( 'Select which email address you would like to send your emails from.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:25
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:29
|
||||
__( 'Read how to set up the Gmail mailer', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/SparkPost.vue:17
|
||||
@@ -762,58 +769,58 @@ $generated_i18n_strings = array(
|
||||
// Reference: src/modules/settings/components/input/SettingsInputNumber.vue:39
|
||||
__( 'Value has to be a round number', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:104
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:114
|
||||
__( 'There was an error while processing the authentication request. Please try again.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:110
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:120
|
||||
__( 'There was an error while processing the authentication request. Please recheck your Client ID and Client Secret and try again.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:115
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:128
|
||||
__( 'There was an error while processing the authentication request. The nonce is invalid. Please try again.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:119
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:132
|
||||
__( 'There was an error while processing the authentication request. The authorization code is missing. Please try again.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:122
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:135
|
||||
__( 'There was an error while processing the authentication request. Please recheck your Region, Client ID and Client Secret and try again.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:125
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:138
|
||||
__( 'You have successfully linked the current site with your Google API project. Now you can start sending emails through Gmail.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:128
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:144
|
||||
__( 'You have successfully linked the current site with your Microsoft API project. Now you can start sending emails through Outlook.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:131
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:147
|
||||
__( 'You have successfully linked the current site with your Zoho Mail API project. Now you can start sending emails through Zoho Mail.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:137
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:153
|
||||
__( 'Successful Authorization', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:137
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:153
|
||||
__( 'Authorization Error!', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:21
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:23
|
||||
/* Translators: name of the oAuth provider (Google, Microsoft, ...). */
|
||||
__( 'Connect to %s', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:22
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:25
|
||||
__( 'Before continuing, you\'ll need to allow this plugin to send emails using your %s account.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:23
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:26
|
||||
__( 'Remove OAuth Connection', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:25
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:28
|
||||
/* Translators: link to the Google documentation page. */
|
||||
__( 'If you want to use a different From Email address you can setup a Google email alias. %1$sFollow these instructions%2$s, then select the alias in the From Email section below.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:27
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:30
|
||||
/* Translators: name of the oAuth provider (Google, Microsoft, ...). */
|
||||
__( 'Removing this OAuth connection will give you the ability to redo the OAuth connection or connect to different %s account.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:28
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:31
|
||||
__( 'Connected as', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:99
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:109
|
||||
__( 'There was an error while processing the authentication request. The state key is invalid. Please try again.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsAmazonSESIdentities.vue:23
|
||||
@@ -921,6 +928,66 @@ $generated_i18n_strings = array(
|
||||
__( '%1$sFollow this link%2$s to get a Mailgun API Key. Generate a key in the "Mailgun API Keys" section.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:25
|
||||
__( 'Improve your SEO rankings with the All in One SEO plugin.', 'wp-mail-smtp' )
|
||||
__( 'Improve your SEO rankings with the All in One SEO plugin.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:15
|
||||
__( 'One-Click Setup', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:16
|
||||
__( 'Provides a quick and easy way to connect to Google that doesn\'t require creating your own app.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:30
|
||||
__( 'Enabled', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:31
|
||||
__( 'Disabled', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:24
|
||||
__( 'Sign in with Google', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:123
|
||||
__( 'There was an error while processing the authentication request.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:142
|
||||
__( 'Now you can continue mailer configuration.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:40
|
||||
__( 'Gmail mailer requires a valid Easy WP SMTP Pro license. Please activate your license key.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:40
|
||||
__( 'One-Click Setup for Google Mailer requires an active license. Emails are currently not being sent.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:40
|
||||
__( 'One-Click Setup for Google Mailer requires an active license. Verify your license to proceed with this one-click setup.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:40
|
||||
__( 'One-Click Setup for Google Mailer requires an active license. Verify your license to proceed with this one-click setup, please.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:41
|
||||
__( 'One-Click Setup for Google Mailer requires an active license. Verify your license to proceed with this One-Click Setup, please.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:147
|
||||
__( 'You have successfully connected your site with your Gmail account. This site will now send emails via your Gmail account.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/settings/components/input/SettingsOAuthConnection.vue:141
|
||||
__( 'You have successfully connected your site with your Gmail account. Now you can start sending emails through Gmail.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:28
|
||||
__( 'The email address that emails are sent from. You can use only connected email address or ', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:28
|
||||
__( 'The email address that emails are sent from. You can use only connected email address or his alias.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:28
|
||||
__( 'The email address that emails are sent from. The email address that emails are sent from. You can use only the connected email address or its alias.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:28
|
||||
__( 'The email address that emails are sent from. You can use only the connected email address or its alias.', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:32
|
||||
__( 'One-Click Setup for Google Mailer <br> is a Pro Feature', 'wp-mail-smtp' ),
|
||||
|
||||
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:33
|
||||
__( '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' )
|
||||
);
|
||||
/* THIS IS THE END OF THE GENERATED FILE */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<svg width="46" height="46" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><rect id="wp-mail-smtp-google-sign-in-icon__b" x="0" y="0" width="40" height="40" rx="2"/><rect id="wp-mail-smtp-google-sign-in-icon__c" x="5" y="5" width="38" height="38" rx="1"/><filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="wp-mail-smtp-google-sign-in-icon__a"><feOffset dy="1" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation=".5" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.168 0" in="shadowBlurOuter1" result="shadowMatrixOuter1"/><feOffset in="SourceAlpha" result="shadowOffsetOuter2"/><feGaussianBlur stdDeviation=".5" in="shadowOffsetOuter2" result="shadowBlurOuter2"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.084 0" in="shadowBlurOuter2" result="shadowMatrixOuter2"/><feMerge><feMergeNode in="shadowMatrixOuter1"/><feMergeNode in="shadowMatrixOuter2"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs><g fill="none" fill-rule="evenodd"><g class="wp-mail-smtp-google-sign-in-icon__border" transform="translate(3 3)" filter="url(#wp-mail-smtp-google-sign-in-icon__a)"><use fill="#4285F4" xlink:href="#wp-mail-smtp-google-sign-in-icon__b"/><use xlink:href="#wp-mail-smtp-google-sign-in-icon__b"/><use xlink:href="#wp-mail-smtp-google-sign-in-icon__b"/><use xlink:href="#wp-mail-smtp-google-sign-in-icon__b"/></g><g class="wp-mail-smtp-google-sign-in-icon__bg" transform="translate(-1 -1)"><use fill="#FFF" xlink:href="#wp-mail-smtp-google-sign-in-icon__c"/><use xlink:href="#wp-mail-smtp-google-sign-in-icon__c"/><use xlink:href="#wp-mail-smtp-google-sign-in-icon__c"/><use xlink:href="#wp-mail-smtp-google-sign-in-icon__c"/></g><path class="wp-mail-smtp-google-sign-in-icon__symbol" d="M31.64 23.205c0-.639-.057-1.252-.164-1.841H23v3.481h4.844a4.14 4.14 0 0 1-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615Z" fill="#4285F4"/><path class="wp-mail-smtp-google-sign-in-icon__symbol" d="M23 32c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711h-3.007v2.332A8.997 8.997 0 0 0 23 32Z" fill="#34A853"/><path class="wp-mail-smtp-google-sign-in-icon__symbol" d="M17.964 24.71a5.41 5.41 0 0 1-.282-1.71c0-.593.102-1.17.282-1.71v-2.332h-3.007A8.996 8.996 0 0 0 14 23c0 1.452.348 2.827.957 4.042l3.007-2.332Z" fill="#FBBC05"/><path class="wp-mail-smtp-google-sign-in-icon__symbol" d="M23 17.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C27.463 14.891 25.426 14 23 14a8.997 8.997 0 0 0-8.043 4.958l3.007 2.332c.708-2.127 2.692-3.71 5.036-3.71Z" fill="#EA4335"/><path d="M14 14h18v18H14V14Z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@ Contributors: wpforms, jaredatch, smub, slaFFik, capuderg
|
||||
Tags: smtp, wp mail smtp, wordpress smtp, gmail smtp, sendgrid smtp, mailgun smtp, mail, mailer, phpmailer, wp_mail, email, mailgun, sengrid, gmail, sendinblue, brevo, wp smtp
|
||||
Requires at least: 5.2
|
||||
Tested up to: 6.4
|
||||
Stable tag: 3.10.0
|
||||
Stable tag: 3.11.0
|
||||
Requires PHP: 7.2
|
||||
|
||||
Make email delivery easy for WordPress. Connect with SMTP, Gmail, Outlook, SendGrid, Mailgun, SES, Zoho, + more. Rated #1 WordPress SMTP Email plugin.
|
||||
@@ -128,6 +128,8 @@ This allows you to use your <a href="http://www.wpbeginner.com/beginners-guide/h
|
||||
|
||||
Unlike other Gmail SMTP plugins, our Gmail SMTP option uses OAuth to authenticate your Google account, keeping your login information 100% secure.
|
||||
|
||||
Our plugin also offers the "One-Click Setup" option, which allows you to start sending emails from your Gmail account with just a few clicks. It eliminates the need to manually configure your own Google App, which is a technical and time-consuming process.
|
||||
|
||||
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-gmail-mailer-in-wp-mail-smtp/" rel="friend">Gmail documentation</a> for more details.
|
||||
|
||||
#### Microsoft SMTP (Outlook.com and Office 365)
|
||||
@@ -378,6 +380,15 @@ By all means please contact us to discuss features or options you'd like to see
|
||||
|
||||
== Changelog ==
|
||||
|
||||
= 3.11.0 - 2023-12-13 =
|
||||
- Added: Filter to customize the capability required for managing the plugin.
|
||||
- Changed: Hide test tab movement notice for new users.
|
||||
- Changed: Improved keyboard navigation styles for the Setup Wizard.
|
||||
- Changed: Removed `WPMailSMTP\Admin\PluginsInstallUpgrader` class and switched to the WordPress Core `Plugin_Upgrader` class.
|
||||
- Changed: The "From email" dropdown to the input field in the Gmail mailer.
|
||||
- Fixed: PHP deprecation notices in the Setup Wizard on WordPress 6.4 and above.
|
||||
- Fixed: Compatibility issue with Action Scheduler lower than 3.3.0.
|
||||
|
||||
= 3.10.0 - 2023-11-08 =
|
||||
- Added: Filter that allows to use self website Google OAuth redirect URL.
|
||||
- Changed: Improve plugin settings UI, by changing checkboxes to toggles and some dividers cleanup.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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' ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -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>',
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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' ) ) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,581 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace WPMailSMTP\Admin;
|
||||
|
||||
use WP_Error;
|
||||
use WP_Upgrader;
|
||||
use WP_Filesystem_Base;
|
||||
|
||||
/** \WP_Upgrader class */
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
|
||||
/** \Plugin_Upgrader class */
|
||||
require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
|
||||
|
||||
/**
|
||||
* In WP 5.3 a PHP 5.6 splat operator (...$args) was added to \WP_Upgrader_Skin::feedback().
|
||||
* We need to remove all calls to *Skin::feedback() method, as we can't override it in own Skin
|
||||
* without breaking support for PHP 5.3-5.5.
|
||||
*
|
||||
* @internal Please do not use this class outside of core WPForms development. May be removed at any time.
|
||||
*
|
||||
* @since 1.7.1
|
||||
*/
|
||||
class PluginsInstallUpgrader extends \Plugin_Upgrader {
|
||||
|
||||
/**
|
||||
* Run an upgrade/installation.
|
||||
*
|
||||
* Attempts to download the package (if it is not a local file), unpack it, and
|
||||
* install it in the destination folder.
|
||||
*
|
||||
* @since 2.8.0
|
||||
*
|
||||
* @param array $options {
|
||||
* Array or string of arguments for upgrading/installing a package.
|
||||
*
|
||||
* @type string $package The full path or URI of the package to install.
|
||||
* Default empty.
|
||||
* @type string $destination The full path to the destination folder.
|
||||
* Default empty.
|
||||
* @type bool $clear_destination Whether to delete any files already in the
|
||||
* destination folder. Default false.
|
||||
* @type bool $clear_working Whether to delete the files form the working
|
||||
* directory after copying to the destination.
|
||||
* Default false.
|
||||
* @type bool $abort_if_destination_exists Whether to abort the installation if the destination
|
||||
* folder already exists. When true, `$clear_destination`
|
||||
* should be false. Default true.
|
||||
* @type bool $is_multi Whether this run is one of multiple upgrade/installation
|
||||
* actions being performed in bulk. When true, the skin
|
||||
* WP_Upgrader::header() and WP_Upgrader::footer()
|
||||
* aren't called. Default false.
|
||||
* @type array $hook_extra Extra arguments to pass to the filter hooks called by
|
||||
* WP_Upgrader::run().
|
||||
* }
|
||||
* @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error,
|
||||
* or false if unable to connect to the filesystem.
|
||||
*/
|
||||
public function run( $options ) {
|
||||
|
||||
$defaults = array(
|
||||
'package' => '', // Please always pass this.
|
||||
'destination' => '', // And this
|
||||
'clear_destination' => false,
|
||||
'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
|
||||
'clear_working' => true,
|
||||
'is_multi' => false,
|
||||
'hook_extra' => array(), // Pass any extra $hook_extra args here, this will be passed to any hooked filters.
|
||||
);
|
||||
|
||||
$options = wp_parse_args( $options, $defaults );
|
||||
|
||||
/**
|
||||
* Filters the package options before running an update.
|
||||
*
|
||||
* See also {@see 'upgrader_process_complete'}.
|
||||
*
|
||||
* @since 4.3.0
|
||||
*
|
||||
* @param array $options {
|
||||
* Options used by the upgrader.
|
||||
*
|
||||
* @type string $package Package for update.
|
||||
* @type string $destination Update location.
|
||||
* @type bool $clear_destination Clear the destination resource.
|
||||
* @type bool $clear_working Clear the working resource.
|
||||
* @type bool $abort_if_destination_exists Abort if the Destination directory exists.
|
||||
* @type bool $is_multi Whether the upgrader is running multiple times.
|
||||
* @type array $hook_extra {
|
||||
* Extra hook arguments.
|
||||
*
|
||||
* @type string $action Type of action. Default 'update'.
|
||||
* @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'.
|
||||
* @type bool $bulk Whether the update process is a bulk update. Default true.
|
||||
* @type string $plugin Path to the plugin file relative to the plugins directory.
|
||||
* @type string $theme The stylesheet or template name of the theme.
|
||||
* @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme',
|
||||
* or 'core'.
|
||||
* @type object $language_update The language pack update offer.
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
$options = apply_filters( 'upgrader_package_options', $options );
|
||||
|
||||
if ( ! $options['is_multi'] ) { // call $this->header separately if running multiple times
|
||||
$this->skin->header();
|
||||
}
|
||||
|
||||
// Connect to the Filesystem first.
|
||||
$res = $this->fs_connect( array( WP_CONTENT_DIR, $options['destination'] ) );
|
||||
// Mainly for non-connected filesystem.
|
||||
if ( ! $res ) {
|
||||
if ( ! $options['is_multi'] ) {
|
||||
$this->skin->footer();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->skin->before();
|
||||
|
||||
if ( is_wp_error( $res ) ) {
|
||||
$this->skin->error( $res );
|
||||
$this->skin->after();
|
||||
if ( ! $options['is_multi'] ) {
|
||||
$this->skin->footer();
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Download the package (Note, This just returns the filename
|
||||
* of the file if the package is a local file)
|
||||
*/
|
||||
$download = $this->download_package( $options['package'], true );
|
||||
|
||||
// Allow for signature soft-fail.
|
||||
// WARNING: This may be removed in the future.
|
||||
if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) {
|
||||
|
||||
// Don't output the 'no signature could be found' failure message for now.
|
||||
if ( 'signature_verification_no_signature' != $download->get_error_code() || WP_DEBUG ) {
|
||||
// Outout the failure error as a normal feedback, and not as an error:
|
||||
//$this->skin->feedback( $download->get_error_message() );
|
||||
|
||||
// Report this failure back to WordPress.org for debugging purposes.
|
||||
wp_version_check(
|
||||
array(
|
||||
'signature_failure_code' => $download->get_error_code(),
|
||||
'signature_failure_data' => $download->get_error_data(),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Pretend this error didn't happen.
|
||||
$download = $download->get_error_data( 'softfail-filename' );
|
||||
}
|
||||
|
||||
if ( is_wp_error( $download ) ) {
|
||||
$this->skin->error( $download );
|
||||
$this->skin->after();
|
||||
if ( ! $options['is_multi'] ) {
|
||||
$this->skin->footer();
|
||||
}
|
||||
return $download;
|
||||
}
|
||||
|
||||
$delete_package = ( $download != $options['package'] ); // Do not delete a "local" file
|
||||
|
||||
// Unzips the file into a temporary directory.
|
||||
$working_dir = $this->unpack_package( $download, $delete_package );
|
||||
if ( is_wp_error( $working_dir ) ) {
|
||||
$this->skin->error( $working_dir );
|
||||
$this->skin->after();
|
||||
if ( ! $options['is_multi'] ) {
|
||||
$this->skin->footer();
|
||||
}
|
||||
return $working_dir;
|
||||
}
|
||||
|
||||
// With the given options, this installs it to the destination directory.
|
||||
$result = $this->install_package(
|
||||
array(
|
||||
'source' => $working_dir,
|
||||
'destination' => $options['destination'],
|
||||
'clear_destination' => $options['clear_destination'],
|
||||
'abort_if_destination_exists' => $options['abort_if_destination_exists'],
|
||||
'clear_working' => $options['clear_working'],
|
||||
'hook_extra' => $options['hook_extra'],
|
||||
)
|
||||
);
|
||||
|
||||
$this->skin->set_result( $result );
|
||||
if ( is_wp_error( $result ) ) {
|
||||
$this->skin->error( $result );
|
||||
//$this->skin->feedback( 'process_failed' );
|
||||
} else {
|
||||
// Installation succeeded.
|
||||
//$this->skin->feedback( 'process_success' );
|
||||
}
|
||||
|
||||
$this->skin->after();
|
||||
|
||||
if ( ! $options['is_multi'] ) {
|
||||
|
||||
/**
|
||||
* Fires when the upgrader process is complete.
|
||||
*
|
||||
* See also {@see 'upgrader_package_options'}.
|
||||
*
|
||||
* @since 3.6.0
|
||||
* @since 3.7.0 Added to WP_Upgrader::run().
|
||||
* @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`.
|
||||
*
|
||||
* @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a
|
||||
* Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
|
||||
* @param array $hook_extra {
|
||||
* Array of bulk item update data.
|
||||
*
|
||||
* @type string $action Type of action. Default 'update'.
|
||||
* @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'.
|
||||
* @type bool $bulk Whether the update process is a bulk update. Default true.
|
||||
* @type array $plugins Array of the basename paths of the plugins' main files.
|
||||
* @type array $themes The theme slugs.
|
||||
* @type array $translations {
|
||||
* Array of translations update data.
|
||||
*
|
||||
* @type string $language The locale the translation is for.
|
||||
* @type string $type Type of translation. Accepts 'plugin', 'theme', or 'core'.
|
||||
* @type string $slug Text domain the translation is for. The slug of a theme/plugin or
|
||||
* 'default' for core translations.
|
||||
* @type string $version The version of a theme, plugin, or core.
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
do_action( 'upgrader_process_complete', $this, $options['hook_extra'] );
|
||||
|
||||
$this->skin->footer();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle maintenance mode for the site.
|
||||
*
|
||||
* Creates/deletes the maintenance file to enable/disable maintenance mode.
|
||||
*
|
||||
* @since 2.8.0
|
||||
*
|
||||
* @global WP_Filesystem_Base $wp_filesystem Subclass
|
||||
*
|
||||
* @param bool $enable True to enable maintenance mode, false to disable.
|
||||
*/
|
||||
public function maintenance_mode( $enable = false ) {
|
||||
global $wp_filesystem;
|
||||
$file = $wp_filesystem->abspath() . '.maintenance';
|
||||
if ( $enable ) {
|
||||
//$this->skin->feedback( 'maintenance_start' );
|
||||
// Create maintenance file to signal that we are upgrading
|
||||
$maintenance_string = '<?php $upgrading = ' . time() . '; ?>';
|
||||
$wp_filesystem->delete( $file );
|
||||
$wp_filesystem->put_contents( $file, $maintenance_string, FS_CHMOD_FILE );
|
||||
} elseif ( ! $enable && $wp_filesystem->exists( $file ) ) {
|
||||
//$this->skin->feedback( 'maintenance_end' );
|
||||
$wp_filesystem->delete( $file );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Download a package.
|
||||
*
|
||||
* @since 2.8.0
|
||||
* @since 5.5.0 Added the `$hook_extra` parameter.
|
||||
*
|
||||
* @param string $package The URI of the package. If this is the full path to an
|
||||
* existing local file, it will be returned untouched.
|
||||
* @param bool $check_signatures Whether to validate file signatures. Default false.
|
||||
* @param array $hook_extra Extra arguments to pass to the filter hooks. Default empty array.
|
||||
*
|
||||
* @return string|WP_Error The full path to the downloaded package file, or a WP_Error object.
|
||||
*/
|
||||
public function download_package( $package, $check_signatures = false, $hook_extra = array() ) {
|
||||
|
||||
/**
|
||||
* Filters whether to return the package.
|
||||
*
|
||||
* @since 3.7.0
|
||||
* @since 5.5.0 Added the `$hook_extra` parameter.
|
||||
*
|
||||
* @param bool $reply Whether to bail without returning the package.
|
||||
* Default false.
|
||||
* @param string $package The package file name.
|
||||
* @param WP_Upgrader $this The WP_Upgrader instance.
|
||||
* @param array $hook_extra Extra arguments passed to hooked filters.
|
||||
*/
|
||||
$reply = apply_filters( 'upgrader_pre_download', false, $package, $this, $hook_extra );
|
||||
if ( false !== $reply ) {
|
||||
return $reply;
|
||||
}
|
||||
|
||||
if ( ! preg_match( '!^(http|https|ftp)://!i', $package ) && file_exists( $package ) ) { //Local file or remote?
|
||||
return $package; //must be a local file..
|
||||
}
|
||||
|
||||
if ( empty( $package ) ) {
|
||||
return new WP_Error( 'no_package', $this->strings['no_package'] );
|
||||
}
|
||||
|
||||
//$this->skin->feedback( 'downloading_package', $package );
|
||||
|
||||
$download_file = download_url( $package, 300, $check_signatures );
|
||||
|
||||
if ( is_wp_error( $download_file ) && ! $download_file->get_error_data( 'softfail-filename' ) ) {
|
||||
return new WP_Error( 'download_failed', $this->strings['download_failed'], $download_file->get_error_message() );
|
||||
}
|
||||
|
||||
return $download_file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unpack a compressed package file.
|
||||
*
|
||||
* @since 2.8.0
|
||||
*
|
||||
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
||||
*
|
||||
* @param string $package Full path to the package file.
|
||||
* @param bool $delete_package Optional. Whether to delete the package file after attempting
|
||||
* to unpack it. Default true.
|
||||
* @return string|WP_Error The path to the unpacked contents, or a WP_Error on failure.
|
||||
*/
|
||||
public function unpack_package( $package, $delete_package = true ) {
|
||||
global $wp_filesystem;
|
||||
|
||||
//$this->skin->feedback( 'unpack_package' );
|
||||
|
||||
$upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/';
|
||||
|
||||
//Clean up contents of upgrade directory beforehand.
|
||||
$upgrade_files = $wp_filesystem->dirlist( $upgrade_folder );
|
||||
if ( ! empty( $upgrade_files ) ) {
|
||||
foreach ( $upgrade_files as $file ) {
|
||||
$wp_filesystem->delete( $upgrade_folder . $file['name'], true );
|
||||
}
|
||||
}
|
||||
|
||||
// We need a working directory - Strip off any .tmp or .zip suffixes
|
||||
$working_dir = $upgrade_folder . basename( basename( $package, '.tmp' ), '.zip' );
|
||||
|
||||
// Clean up working directory
|
||||
if ( $wp_filesystem->is_dir( $working_dir ) ) {
|
||||
$wp_filesystem->delete( $working_dir, true );
|
||||
}
|
||||
|
||||
// Unzip package to working directory
|
||||
$result = unzip_file( $package, $working_dir );
|
||||
|
||||
// Once extracted, delete the package if required.
|
||||
if ( $delete_package ) {
|
||||
unlink( $package );
|
||||
}
|
||||
|
||||
if ( is_wp_error( $result ) ) {
|
||||
$wp_filesystem->delete( $working_dir, true );
|
||||
if ( 'incompatible_archive' == $result->get_error_code() ) {
|
||||
return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() );
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
return $working_dir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install a package.
|
||||
*
|
||||
* Copies the contents of a package form a source directory, and installs them in
|
||||
* a destination directory. Optionally removes the source. It can also optionally
|
||||
* clear out the destination folder if it already exists.
|
||||
*
|
||||
* @since 2.8.0
|
||||
*
|
||||
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
||||
* @global array $wp_theme_directories
|
||||
*
|
||||
* @param array|string $args {
|
||||
* Optional. Array or string of arguments for installing a package. Default empty array.
|
||||
*
|
||||
* @type string $source Required path to the package source. Default empty.
|
||||
* @type string $destination Required path to a folder to install the package in.
|
||||
* Default empty.
|
||||
* @type bool $clear_destination Whether to delete any files already in the destination
|
||||
* folder. Default false.
|
||||
* @type bool $clear_working Whether to delete the files form the working directory
|
||||
* after copying to the destination. Default false.
|
||||
* @type bool $abort_if_destination_exists Whether to abort the installation if
|
||||
* the destination folder already exists. Default true.
|
||||
* @type array $hook_extra Extra arguments to pass to the filter hooks called by
|
||||
* WP_Upgrader::install_package(). Default empty array.
|
||||
* }
|
||||
*
|
||||
* @return array|WP_Error The result (also stored in `WP_Upgrader::$result`), or a WP_Error on failure.
|
||||
*/
|
||||
public function install_package( $args = array() ) {
|
||||
global $wp_filesystem, $wp_theme_directories;
|
||||
|
||||
$defaults = array(
|
||||
'source' => '', // Please always pass this
|
||||
'destination' => '', // and this
|
||||
'clear_destination' => false,
|
||||
'clear_working' => false,
|
||||
'abort_if_destination_exists' => true,
|
||||
'hook_extra' => array(),
|
||||
);
|
||||
|
||||
$args = wp_parse_args( $args, $defaults );
|
||||
|
||||
// These were previously extract()'d.
|
||||
$source = $args['source'];
|
||||
$destination = $args['destination'];
|
||||
$clear_destination = $args['clear_destination'];
|
||||
|
||||
set_time_limit( 300 );
|
||||
|
||||
if ( empty( $source ) || empty( $destination ) ) {
|
||||
return new WP_Error( 'bad_request', $this->strings['bad_request'] );
|
||||
}
|
||||
//$this->skin->feedback( 'installing_package' );
|
||||
|
||||
/**
|
||||
* Filters the install response before the installation has started.
|
||||
*
|
||||
* Returning a truthy value, or one that could be evaluated as a WP_Error
|
||||
* will effectively short-circuit the installation, returning that value
|
||||
* instead.
|
||||
*
|
||||
* @since 2.8.0
|
||||
*
|
||||
* @param bool|WP_Error $response Response.
|
||||
* @param array $hook_extra Extra arguments passed to hooked filters.
|
||||
*/
|
||||
$res = apply_filters( 'upgrader_pre_install', true, $args['hook_extra'] );
|
||||
|
||||
if ( is_wp_error( $res ) ) {
|
||||
return $res;
|
||||
}
|
||||
|
||||
//Retain the Original source and destinations
|
||||
$remote_source = $args['source'];
|
||||
$local_destination = $destination;
|
||||
|
||||
$source_files = array_keys( $wp_filesystem->dirlist( $remote_source ) );
|
||||
$remote_destination = $wp_filesystem->find_folder( $local_destination );
|
||||
|
||||
//Locate which directory to copy to the new folder, This is based on the actual folder holding the files.
|
||||
if ( 1 == count( $source_files ) && $wp_filesystem->is_dir( trailingslashit( $args['source'] ) . $source_files[0] . '/' ) ) { //Only one folder? Then we want its contents.
|
||||
$source = trailingslashit( $args['source'] ) . trailingslashit( $source_files[0] );
|
||||
} elseif ( count( $source_files ) == 0 ) {
|
||||
return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files?
|
||||
} else { // It's only a single file, the upgrader will use the folder name of this file as the destination folder. Folder name is based on zip filename.
|
||||
$source = trailingslashit( $args['source'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the source file location for the upgrade package.
|
||||
*
|
||||
* @since 2.8.0
|
||||
* @since 4.4.0 The $hook_extra parameter became available.
|
||||
*
|
||||
* @param string $source File source location.
|
||||
* @param string $remote_source Remote file source location.
|
||||
* @param WP_Upgrader $this WP_Upgrader instance.
|
||||
* @param array $hook_extra Extra arguments passed to hooked filters.
|
||||
*/
|
||||
$source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this, $args['hook_extra'] );
|
||||
|
||||
if ( is_wp_error( $source ) ) {
|
||||
return $source;
|
||||
}
|
||||
|
||||
// Has the source location changed? If so, we need a new source_files list.
|
||||
if ( $source !== $remote_source ) {
|
||||
$source_files = array_keys( $wp_filesystem->dirlist( $source ) );
|
||||
}
|
||||
|
||||
/*
|
||||
* Protection against deleting files in any important base directories.
|
||||
* Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the
|
||||
* destination directory (WP_PLUGIN_DIR / wp-content/themes) intending
|
||||
* to copy the directory into the directory, whilst they pass the source
|
||||
* as the actual files to copy.
|
||||
*/
|
||||
$protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' );
|
||||
|
||||
if ( is_array( $wp_theme_directories ) ) {
|
||||
$protected_directories = array_merge( $protected_directories, $wp_theme_directories );
|
||||
}
|
||||
|
||||
if ( in_array( $destination, $protected_directories ) ) {
|
||||
$remote_destination = trailingslashit( $remote_destination ) . trailingslashit( basename( $source ) );
|
||||
$destination = trailingslashit( $destination ) . trailingslashit( basename( $source ) );
|
||||
}
|
||||
|
||||
if ( $clear_destination ) {
|
||||
// We're going to clear the destination if there's something there.
|
||||
//$this->skin->feedback( 'remove_old' );
|
||||
|
||||
$removed = $this->clear_destination( $remote_destination );
|
||||
|
||||
/**
|
||||
* Filters whether the upgrader cleared the destination.
|
||||
*
|
||||
* @since 2.8.0
|
||||
*
|
||||
* @param mixed $removed Whether the destination was cleared. true on success, WP_Error on failure
|
||||
* @param string $local_destination The local package destination.
|
||||
* @param string $remote_destination The remote package destination.
|
||||
* @param array $hook_extra Extra arguments passed to hooked filters.
|
||||
*/
|
||||
$removed = apply_filters( 'upgrader_clear_destination', $removed, $local_destination, $remote_destination, $args['hook_extra'] );
|
||||
|
||||
if ( is_wp_error( $removed ) ) {
|
||||
return $removed;
|
||||
}
|
||||
} elseif ( $args['abort_if_destination_exists'] && $wp_filesystem->exists( $remote_destination ) ) {
|
||||
//If we're not clearing the destination folder and something exists there already, Bail.
|
||||
//But first check to see if there are actually any files in the folder.
|
||||
$_files = $wp_filesystem->dirlist( $remote_destination );
|
||||
if ( ! empty( $_files ) ) {
|
||||
$wp_filesystem->delete( $remote_source, true ); //Clear out the source files.
|
||||
return new WP_Error( 'folder_exists', $this->strings['folder_exists'], $remote_destination );
|
||||
}
|
||||
}
|
||||
|
||||
//Create destination if needed
|
||||
if ( ! $wp_filesystem->exists( $remote_destination ) ) {
|
||||
if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) {
|
||||
return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination );
|
||||
}
|
||||
}
|
||||
// Copy new version of item into place.
|
||||
$result = copy_dir( $source, $remote_destination );
|
||||
if ( is_wp_error( $result ) ) {
|
||||
if ( $args['clear_working'] ) {
|
||||
$wp_filesystem->delete( $remote_source, true );
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
//Clear the Working folder?
|
||||
if ( $args['clear_working'] ) {
|
||||
$wp_filesystem->delete( $remote_source, true );
|
||||
}
|
||||
|
||||
$destination_name = basename( str_replace( $local_destination, '', $destination ) );
|
||||
if ( '.' == $destination_name ) {
|
||||
$destination_name = '';
|
||||
}
|
||||
|
||||
$this->result = compact( 'source', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination' );
|
||||
|
||||
/**
|
||||
* Filters the installation response after the installation has finished.
|
||||
*
|
||||
* @since 2.8.0
|
||||
*
|
||||
* @param bool $response Installation response.
|
||||
* @param array $hook_extra Extra arguments passed to hooked filters.
|
||||
* @param array $result Installation result data.
|
||||
*/
|
||||
$res = apply_filters( 'upgrader_post_install', true, $args['hook_extra'], $this->result );
|
||||
|
||||
if ( is_wp_error( $res ) ) {
|
||||
$this->result = $res;
|
||||
return $res;
|
||||
}
|
||||
|
||||
//Bombard the calling function will all the info which we've just used.
|
||||
return $this->result;
|
||||
}
|
||||
}
|
||||
@@ -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 ) ) {
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
namespace WPMailSMTP;
|
||||
|
||||
use Plugin_Upgrader;
|
||||
use WP_Error;
|
||||
use WPMailSMTP\Admin\PluginsInstallSkin;
|
||||
use WPMailSMTP\Admin\PluginsInstallUpgrader;
|
||||
use WPMailSMTP\Helpers\Helpers;
|
||||
|
||||
/**
|
||||
* WP Mail SMTP Connect.
|
||||
@@ -217,7 +218,14 @@ class Connect {
|
||||
wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wp-mail-smtp' ) );
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
$perm_error = esc_html__( 'There was an error while installing an upgrade. Please check file system permissions and try again. Also, you can download the plugin from wpmailsmtp.com and install it manually.', 'wp-mail-smtp' );
|
||||
@@ -233,8 +241,11 @@ class Connect {
|
||||
// Do not allow WordPress to search/download translations, as this will break JS output.
|
||||
remove_action( 'upgrader_process_complete', array( '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' ) ) {
|
||||
|
||||
@@ -175,7 +175,7 @@ class Core {
|
||||
}
|
||||
|
||||
// Plugin admin area notices. Display to "admins" only.
|
||||
if ( current_user_can( 'manage_options' ) ) {
|
||||
if ( current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
|
||||
add_action( 'admin_notices', array( '\WPMailSMTP\WP', 'display_admin_notices' ) );
|
||||
add_action( 'admin_notices', array( $this, 'display_general_notices' ) );
|
||||
|
||||
@@ -609,7 +609,7 @@ class Core {
|
||||
public function detect_conflicts() {
|
||||
|
||||
// Display only for those who can actually deactivate plugins.
|
||||
if ( ! current_user_can( 'manage_options' ) ) {
|
||||
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1346,4 +1346,23 @@ class Core {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default capability to manage everything for WP Mail SMTP.
|
||||
*
|
||||
* @since 3.11.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_capability_manage_options() {
|
||||
|
||||
/**
|
||||
* Filters the default capability to manage everything for WP Mail SMTP.
|
||||
*
|
||||
* @since 3.11.0
|
||||
*
|
||||
* @param string $capability The default capability to manage everything for WP Mail SMTP.
|
||||
*/
|
||||
return apply_filters( 'wp_mail_smtp_core_get_capability_manage_options', 'manage_options' );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class DBRepair {
|
||||
isset( $_GET['create-missing-db-tables'] ) &&
|
||||
$_GET['create-missing-db-tables'] === '1' &&
|
||||
wp_mail_smtp()->get_admin()->is_admin_page() &&
|
||||
current_user_can( 'manage_options' )
|
||||
current_user_can( wp_mail_smtp()->get_capability_manage_options() )
|
||||
) {
|
||||
check_admin_referer( Area::SLUG . '-create-missing-db-tables' );
|
||||
|
||||
@@ -165,7 +165,7 @@ class DBRepair {
|
||||
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
||||
isset( $_GET['check-db-tables'] ) && $_GET['check-db-tables'] === '1' &&
|
||||
wp_mail_smtp()->get_admin()->is_admin_page() &&
|
||||
current_user_can( 'manage_options' )
|
||||
current_user_can( wp_mail_smtp()->get_capability_manage_options() )
|
||||
) {
|
||||
$missing_tables = $this->get_missing_tables();
|
||||
|
||||
|
||||
@@ -166,4 +166,60 @@ class Geo {
|
||||
|
||||
return $miles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user IP address.
|
||||
*
|
||||
* @since 3.11.0
|
||||
*
|
||||
* Code based on the:
|
||||
* - WordPress method \WP_Community_Events::get_unsafe_client_ip
|
||||
* - Cloudflare documentation https://support.cloudflare.com/hc/en-us/articles/206776727
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function get_ip() {
|
||||
|
||||
$ip = '127.0.0.1';
|
||||
|
||||
$address_headers = [
|
||||
'HTTP_TRUE_CLIENT_IP',
|
||||
'HTTP_CF_CONNECTING_IP',
|
||||
'HTTP_X_REAL_IP',
|
||||
'HTTP_CLIENT_IP',
|
||||
'HTTP_X_FORWARDED_FOR',
|
||||
'HTTP_X_FORWARDED',
|
||||
'HTTP_X_CLUSTER_CLIENT_IP',
|
||||
'HTTP_FORWARDED_FOR',
|
||||
'HTTP_FORWARDED',
|
||||
'REMOTE_ADDR',
|
||||
];
|
||||
|
||||
foreach ( $address_headers as $header ) {
|
||||
if ( empty( $_SERVER[ $header ] ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* HTTP_X_FORWARDED_FOR can contain a chain of comma-separated addresses, with or without spaces.
|
||||
* The first address is the original client. It can't be trusted for authenticity,
|
||||
* but we don't need to for this purpose.
|
||||
*/
|
||||
|
||||
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
||||
$address_chain = explode( ',', wp_unslash( $_SERVER[ $header ] ) );
|
||||
$ip = filter_var( trim( $address_chain[0] ), FILTER_VALIDATE_IP );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter detected IP address.
|
||||
*
|
||||
* @since 3.11.0
|
||||
*
|
||||
* @param string $ip IP address.
|
||||
*/
|
||||
return filter_var( apply_filters( 'wp_mail_smtp_geo_get_ip', $ip ), FILTER_VALIDATE_IP );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,4 +153,18 @@ class Helpers {
|
||||
|
||||
return 'WordPress/' . get_bloginfo( 'version' ) . '; ' . get_bloginfo( 'url' ) . '; WPMailSMTP/' . $license_type . '-' . WPMS_PLUGIN_VER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Import Plugin_Upgrader class from core.
|
||||
*
|
||||
* @since 3.11.0
|
||||
*/
|
||||
public static function include_plugin_upgrader() {
|
||||
|
||||
/** \WP_Upgrader class */
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
|
||||
/** \Plugin_Upgrader class */
|
||||
require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ class Options {
|
||||
'pass',
|
||||
],
|
||||
'gmail' => [
|
||||
'one_click_setup_enabled',
|
||||
'client_id',
|
||||
'client_secret',
|
||||
],
|
||||
@@ -232,7 +233,7 @@ class Options {
|
||||
*/
|
||||
public static function get_defaults() {
|
||||
|
||||
return [
|
||||
$defaults = [
|
||||
'mail' => [
|
||||
'from_email' => get_option( 'admin_email' ),
|
||||
'from_name' => get_bloginfo( 'name' ),
|
||||
@@ -249,6 +250,15 @@ class Options {
|
||||
SummaryReportEmail::SETTINGS_SLUG => ! is_multisite() ? false : true,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Filters the default options.
|
||||
*
|
||||
* @since 3.11.0
|
||||
*
|
||||
* @param array $defaults Default options.
|
||||
*/
|
||||
return apply_filters( 'wp_mail_smtp_options_get_defaults', $defaults );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace WPMailSMTP\Providers\Gmail;
|
||||
|
||||
use Exception;
|
||||
use WPMailSMTP\Admin\Area;
|
||||
use WPMailSMTP\Admin\ConnectionSettings;
|
||||
use WPMailSMTP\Admin\DebugEvents\DebugEvents;
|
||||
@@ -133,7 +134,7 @@ class Auth extends AuthAbstract {
|
||||
) {
|
||||
try {
|
||||
$creds = $client->fetchAccessTokenWithAuthCode( $this->options['auth_code'] );
|
||||
} catch ( \Exception $e ) {
|
||||
} catch ( Exception $e ) {
|
||||
$creds['error'] = $e->getMessage();
|
||||
}
|
||||
|
||||
@@ -155,22 +156,19 @@ class Auth extends AuthAbstract {
|
||||
|
||||
$this->update_access_token( $client->getAccessToken() );
|
||||
$this->update_refresh_token( $client->getRefreshToken() );
|
||||
$this->update_user_details( $client );
|
||||
|
||||
/*
|
||||
* We need to set the correct `from_email` address, to avoid the SPF and DKIM issue.
|
||||
*/
|
||||
$gmail_aliases = $this->is_clients_saved() ? $this->get_user_possible_send_from_addresses() : [];
|
||||
$all_connection_options = $this->connection_options->get_all();
|
||||
|
||||
if (
|
||||
! empty( $gmail_aliases ) &&
|
||||
isset( $gmail_aliases[0] ) &&
|
||||
is_email( $gmail_aliases[0] ) !== false &&
|
||||
! in_array( $all_connection_options['mail']['from_email'], $gmail_aliases, true )
|
||||
) {
|
||||
$all_connection_options['mail']['from_email'] = $gmail_aliases[0];
|
||||
|
||||
$this->connection_options->set( $all_connection_options );
|
||||
// Update the "from email" to the connected user's email.
|
||||
if ( ! empty( $this->options['user_details']['email'] ) ) {
|
||||
$this->connection_options->set(
|
||||
[
|
||||
'mail' => [
|
||||
'from_email' => $this->options['user_details']['email'],
|
||||
],
|
||||
],
|
||||
false,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,7 +186,7 @@ class Auth extends AuthAbstract {
|
||||
if ( ! empty( $refresh ) ) {
|
||||
try {
|
||||
$creds = $client->fetchAccessTokenWithRefreshToken( $refresh );
|
||||
} catch ( \Exception $e ) {
|
||||
} catch ( Exception $e ) {
|
||||
$creds['error'] = $e->getMessage();
|
||||
Debug::set(
|
||||
'Mailer: Gmail' . "\r\n" .
|
||||
@@ -341,23 +339,21 @@ class Auth extends AuthAbstract {
|
||||
exit;
|
||||
}
|
||||
|
||||
if ( $is_setup_wizard_auth ) {
|
||||
Debug::clear();
|
||||
Debug::clear();
|
||||
|
||||
$this->get_client( true );
|
||||
$this->get_client( true );
|
||||
|
||||
$error = Debug::get_last();
|
||||
$error = Debug::get_last();
|
||||
|
||||
if ( ! empty( $error ) ) {
|
||||
wp_safe_redirect(
|
||||
add_query_arg(
|
||||
'error',
|
||||
'google_unsuccessful_oauth',
|
||||
$redirect_url
|
||||
)
|
||||
);
|
||||
exit;
|
||||
}
|
||||
if ( ! empty( $error ) ) {
|
||||
wp_safe_redirect(
|
||||
add_query_arg(
|
||||
'error',
|
||||
'google_unsuccessful_oauth',
|
||||
$redirect_url
|
||||
)
|
||||
);
|
||||
exit;
|
||||
}
|
||||
|
||||
wp_safe_redirect(
|
||||
@@ -391,23 +387,62 @@ class Auth extends AuthAbstract {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user information (like email etc) that is associated with the current OAuth connection.
|
||||
* Get and update user-related details (currently only email).
|
||||
*
|
||||
* @since 3.11.0
|
||||
*
|
||||
* @param Google_Client $client The Google Client object (optional).
|
||||
*/
|
||||
private function update_user_details( $client = false ) {
|
||||
|
||||
if ( $client === false ) {
|
||||
$client = $this->get_client();
|
||||
}
|
||||
|
||||
$gmail = new Gmail( $client );
|
||||
|
||||
try {
|
||||
$email = $gmail->users->getProfile( 'me' )->getEmailAddress();
|
||||
|
||||
$user_details = [
|
||||
'email' => $email,
|
||||
];
|
||||
|
||||
// To save in DB.
|
||||
$updated_settings = [
|
||||
$this->mailer_slug => [
|
||||
'user_details' => $user_details,
|
||||
],
|
||||
];
|
||||
|
||||
// To save in currently retrieved options array.
|
||||
$this->options['user_details'] = $user_details;
|
||||
|
||||
$this->connection_options->set( $updated_settings, false, false );
|
||||
} catch ( Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
|
||||
// Do nothing.
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user information (currently only email) that is associated with the current OAuth connection.
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @since 3.11.0 Switched to DB stored value instead of API call.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_user_info() {
|
||||
|
||||
$gmail = new Gmail( $this->get_client() );
|
||||
|
||||
try {
|
||||
$email = $gmail->users->getProfile( 'me' )->getEmailAddress();
|
||||
} catch ( \Exception $e ) {
|
||||
$email = '';
|
||||
/*
|
||||
* We need to populate user data on the fly for old users who already performed
|
||||
* authorization before we switched to DB stored value.
|
||||
*/
|
||||
if ( ! isset( $this->options['user_details'] ) && ! $this->is_auth_required() ) {
|
||||
$this->update_user_details();
|
||||
}
|
||||
|
||||
return array( 'email' => $email );
|
||||
return $this->connection_options->get( $this->mailer_slug, 'user_details' );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -439,7 +474,7 @@ class Auth extends AuthAbstract {
|
||||
);
|
||||
// phpcs:enable
|
||||
|
||||
} catch ( \Exception $exception ) {
|
||||
} catch ( Exception $exception ) {
|
||||
DebugEvents::add_debug(
|
||||
sprintf( /* Translators: %s the error message. */
|
||||
esc_html__( 'An error occurred when trying to get Gmail aliases: %s' ),
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace WPMailSMTP\Providers\Gmail;
|
||||
|
||||
use WPMailSMTP\Admin\ConnectionSettings;
|
||||
use WPMailSMTP\ConnectionInterface;
|
||||
use WPMailSMTP\Helpers\UI;
|
||||
use WPMailSMTP\Providers\OptionsAbstract;
|
||||
|
||||
/**
|
||||
@@ -37,10 +38,9 @@ class Options extends OptionsAbstract {
|
||||
'title' => esc_html__( 'Google / Gmail', 'wp-mail-smtp' ),
|
||||
'description' => sprintf(
|
||||
wp_kses( /* translators: %s - URL to our Gmail doc. */
|
||||
__( 'Our Gmail mailer works with any Gmail or Google Workspace account via the Google API. You can send WordPress emails from your main email address or a Gmail alias, and it\'s more secure than connecting to Gmail using SMTP credentials. The setup steps are more technical than other options, so we created a detailed guide to walk you through the process.<br><br>To get started, read our <a href="%s" target="_blank" rel="noopener noreferrer">Gmail documentation</a>.', 'wp-mail-smtp' ),
|
||||
__( 'Our Gmail mailer works with any Gmail or Google Workspace account via the Google API. You can send WordPress emails from your main email address or a Gmail alias, and it\'s more secure than connecting to Gmail using SMTP credentials. We now have a One-Click Setup, which simply asks you to authorize your Google account to use our app and takes care of everything for you. Alternatively, you can connect manually, which involves several steps that are more technical than other mailer options, so we created a detailed guide to walk you through the process.<br><br>To get started, read our <a href="%s" target="_blank" rel="noopener noreferrer">Gmail documentation</a>.', 'wp-mail-smtp' ),
|
||||
[
|
||||
'br' => [],
|
||||
'b' => [],
|
||||
'a' => [
|
||||
'href' => [],
|
||||
'rel' => [],
|
||||
@@ -84,6 +84,28 @@ class Options extends OptionsAbstract {
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if ( ! wp_mail_smtp()->is_pro() ) : ?>
|
||||
<div id="wp-mail-smtp-setting-row-<?php echo esc_attr( $this->get_slug() ); ?>-one_click_setup_enabled-lite" class="wp-mail-smtp-setting-row">
|
||||
<div class="wp-mail-smtp-setting-label">
|
||||
<label for="wp-mail-smtp-setting-<?php echo esc_attr( $this->get_slug() ); ?>-one_click_setup_enabled-lite">
|
||||
<?php esc_html_e( 'One-Click Setup', 'wp-mail-smtp' ); ?>
|
||||
</label>
|
||||
</div>
|
||||
<div class="wp-mail-smtp-setting-field">
|
||||
<?php
|
||||
UI::toggle(
|
||||
[
|
||||
'id' => 'wp-mail-smtp-setting-' . esc_attr( $this->get_slug() ) . '-one_click_setup_enabled-lite',
|
||||
]
|
||||
);
|
||||
?>
|
||||
<p class="desc">
|
||||
<?php esc_html_e( 'Provides a quick and easy way to connect to Google that doesn\'t require creating your own app.', 'wp-mail-smtp' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Client ID -->
|
||||
<div id="wp-mail-smtp-setting-row-<?php echo esc_attr( $this->get_slug() ); ?>-client_id"
|
||||
class="wp-mail-smtp-setting-row wp-mail-smtp-setting-row-text wp-mail-smtp-clear">
|
||||
@@ -242,7 +264,7 @@ class Options extends OptionsAbstract {
|
||||
*/
|
||||
public function process_provider_remove() {
|
||||
|
||||
if ( ! current_user_can( 'manage_options' ) ) {
|
||||
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -259,12 +281,10 @@ class Options extends OptionsAbstract {
|
||||
|
||||
$old_opt = $this->connection_options->get_all_raw();
|
||||
|
||||
foreach ( $old_opt[ $this->get_slug() ] as $key => $value ) {
|
||||
// Unset everything except Client ID and Secret.
|
||||
if ( ! in_array( $key, array( 'client_id', 'client_secret' ), true ) ) {
|
||||
unset( $old_opt[ $this->get_slug() ][ $key ] );
|
||||
}
|
||||
}
|
||||
unset( $old_opt[ $this->get_slug() ]['access_token'] );
|
||||
unset( $old_opt[ $this->get_slug() ]['refresh_token'] );
|
||||
unset( $old_opt[ $this->get_slug() ]['user_details'] );
|
||||
unset( $old_opt[ $this->get_slug() ]['auth_code'] );
|
||||
|
||||
$this->connection_options->set( $old_opt );
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ class Loader {
|
||||
$entity = null;
|
||||
}
|
||||
|
||||
return apply_filters( 'wp_mail_smtp_providers_loader_get_entity', $entity, $provider, $request );
|
||||
return apply_filters( 'wp_mail_smtp_providers_loader_get_entity', $entity, $provider, $request, $args );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -247,7 +247,8 @@ class Tasks {
|
||||
*/
|
||||
public static function is_scheduled( $hook ) {
|
||||
|
||||
if ( ! function_exists( 'as_has_scheduled_action' ) ) {
|
||||
// If ActionScheduler wasn't loaded, then no tasks are scheduled.
|
||||
if ( ! function_exists( 'as_next_scheduled_action' ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -260,7 +261,12 @@ class Tasks {
|
||||
}
|
||||
|
||||
// Action is not in the array, so it is not scheduled or belongs to another group.
|
||||
return as_has_scheduled_action( $hook );
|
||||
if ( function_exists( 'as_has_scheduled_action' ) ) {
|
||||
// This function more performant than `as_next_scheduled_action`, but it is available only since AS 3.3.0.
|
||||
return as_has_scheduled_action( $hook );
|
||||
} else {
|
||||
return as_next_scheduled_action( $hook ) !== false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -146,7 +146,6 @@ return array(
|
||||
'WPMailSMTP\\Admin\\Pages\\VersusTab' => $baseDir . '/src/Admin/Pages/VersusTab.php',
|
||||
'WPMailSMTP\\Admin\\ParentPageAbstract' => $baseDir . '/src/Admin/ParentPageAbstract.php',
|
||||
'WPMailSMTP\\Admin\\PluginsInstallSkin' => $baseDir . '/src/Admin/PluginsInstallSkin.php',
|
||||
'WPMailSMTP\\Admin\\PluginsInstallUpgrader' => $baseDir . '/src/Admin/PluginsInstallUpgrader.php',
|
||||
'WPMailSMTP\\Admin\\Review' => $baseDir . '/src/Admin/Review.php',
|
||||
'WPMailSMTP\\Admin\\SetupWizard' => $baseDir . '/src/Admin/SetupWizard.php',
|
||||
'WPMailSMTP\\Compatibility\\Compatibility' => $baseDir . '/src/Compatibility/Compatibility.php',
|
||||
@@ -314,6 +313,14 @@ return array(
|
||||
'WPMailSMTP\\Pro\\Providers\\AmazonSES\\Identity' => $baseDir . '/src/Pro/Providers/AmazonSES/Identity.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\AmazonSES\\Mailer' => $baseDir . '/src/Pro/Providers/AmazonSES/Mailer.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\AmazonSES\\Options' => $baseDir . '/src/Pro/Providers/AmazonSES/Options.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\Client' => $baseDir . '/src/Pro/Providers/Gmail/Api/Client.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\OneTimeToken' => $baseDir . '/src/Pro/Providers/Gmail/Api/OneTimeToken.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\Response' => $baseDir . '/src/Pro/Providers/Gmail/Api/Response.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\SiteId' => $baseDir . '/src/Pro/Providers/Gmail/Api/SiteId.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Auth' => $baseDir . '/src/Pro/Providers/Gmail/Auth.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Mailer' => $baseDir . '/src/Pro/Providers/Gmail/Mailer.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Options' => $baseDir . '/src/Pro/Providers/Gmail/Options.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Provider' => $baseDir . '/src/Pro/Providers/Gmail/Provider.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Outlook\\AttachmentsUploader' => $baseDir . '/src/Pro/Providers/Outlook/AttachmentsUploader.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Outlook\\Auth' => $baseDir . '/src/Pro/Providers/Outlook/Auth.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Outlook\\Mailer' => $baseDir . '/src/Pro/Providers/Outlook/Mailer.php',
|
||||
|
||||
@@ -178,7 +178,6 @@ class ComposerStaticInit295984e5919e750baa7d7284cfe56164
|
||||
'WPMailSMTP\\Admin\\Pages\\VersusTab' => __DIR__ . '/../..' . '/src/Admin/Pages/VersusTab.php',
|
||||
'WPMailSMTP\\Admin\\ParentPageAbstract' => __DIR__ . '/../..' . '/src/Admin/ParentPageAbstract.php',
|
||||
'WPMailSMTP\\Admin\\PluginsInstallSkin' => __DIR__ . '/../..' . '/src/Admin/PluginsInstallSkin.php',
|
||||
'WPMailSMTP\\Admin\\PluginsInstallUpgrader' => __DIR__ . '/../..' . '/src/Admin/PluginsInstallUpgrader.php',
|
||||
'WPMailSMTP\\Admin\\Review' => __DIR__ . '/../..' . '/src/Admin/Review.php',
|
||||
'WPMailSMTP\\Admin\\SetupWizard' => __DIR__ . '/../..' . '/src/Admin/SetupWizard.php',
|
||||
'WPMailSMTP\\Compatibility\\Compatibility' => __DIR__ . '/../..' . '/src/Compatibility/Compatibility.php',
|
||||
@@ -346,6 +345,14 @@ class ComposerStaticInit295984e5919e750baa7d7284cfe56164
|
||||
'WPMailSMTP\\Pro\\Providers\\AmazonSES\\Identity' => __DIR__ . '/../..' . '/src/Pro/Providers/AmazonSES/Identity.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\AmazonSES\\Mailer' => __DIR__ . '/../..' . '/src/Pro/Providers/AmazonSES/Mailer.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\AmazonSES\\Options' => __DIR__ . '/../..' . '/src/Pro/Providers/AmazonSES/Options.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\Client' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Api/Client.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\OneTimeToken' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Api/OneTimeToken.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\Response' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Api/Response.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Api\\SiteId' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Api/SiteId.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Auth' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Auth.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Mailer' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Mailer.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Options' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Options.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Gmail\\Provider' => __DIR__ . '/../..' . '/src/Pro/Providers/Gmail/Provider.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Outlook\\AttachmentsUploader' => __DIR__ . '/../..' . '/src/Pro/Providers/Outlook/AttachmentsUploader.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Outlook\\Auth' => __DIR__ . '/../..' . '/src/Pro/Providers/Outlook/Auth.php',
|
||||
'WPMailSMTP\\Pro\\Providers\\Outlook\\Mailer' => __DIR__ . '/../..' . '/src/Pro/Providers/Outlook/Mailer.php',
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'name' => 'awesomemotive/wp-mail-smtp',
|
||||
'pretty_version' => 'dev-3.10.0-release',
|
||||
'version' => 'dev-3.10.0-release',
|
||||
'reference' => 'c75f7c8a753c1719b4a60018a317e0f1c9f6b307',
|
||||
'pretty_version' => 'dev-3.11.0-release',
|
||||
'version' => 'dev-3.11.0-release',
|
||||
'reference' => 'f39d2431cd40a7ad09725608f5e33c516a2b293b',
|
||||
'type' => 'wordpress-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@@ -11,9 +11,9 @@
|
||||
),
|
||||
'versions' => array(
|
||||
'awesomemotive/wp-mail-smtp' => array(
|
||||
'pretty_version' => 'dev-3.10.0-release',
|
||||
'version' => 'dev-3.10.0-release',
|
||||
'reference' => 'c75f7c8a753c1719b4a60018a317e0f1c9f6b307',
|
||||
'pretty_version' => 'dev-3.11.0-release',
|
||||
'version' => 'dev-3.11.0-release',
|
||||
'reference' => 'f39d2431cd40a7ad09725608f5e33c516a2b293b',
|
||||
'type' => 'wordpress-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Name: WP Mail SMTP
|
||||
* Version: 3.10.0
|
||||
* Version: 3.11.0
|
||||
* Requires at least: 5.2
|
||||
* Requires PHP: 7.2
|
||||
* Plugin URI: https://wpmailsmtp.com/
|
||||
@@ -248,7 +248,7 @@ if ( ! function_exists( 'wp_mail_smtp_insecure_php_version_notice' ) ) {
|
||||
}
|
||||
|
||||
if ( ! defined( 'WPMS_PLUGIN_VER' ) ) {
|
||||
define( 'WPMS_PLUGIN_VER', '3.10.0' );
|
||||
define( 'WPMS_PLUGIN_VER', '3.11.0' );
|
||||
}
|
||||
if ( ! defined( 'WPMS_PHP_VER' ) ) {
|
||||
define( 'WPMS_PHP_VER', '7.2' );
|
||||
|
||||
Reference in New Issue
Block a user