← All changes
|
includes/admin/settings/class-settings-email.php
+211
-29
2.3.0
→
4.17.0
View file →
| @@ -3,9 +3,9 @@ | ||
| 3 | 3 | * Give Settings Page/Tab |
| 4 | 4 | * |
| 5 | 5 | * @package Give |
| 6 | 6 | * @subpackage Classes/Give_Settings_Email |
| 7 | - * @copyright Copyright (c) 2016, WordImpress | |
| 7 | + * @copyright Copyright (c) 2016, GiveWP | |
| 8 | 8 | * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License |
| 9 | 9 | * @since 1.8 |
| 10 | 10 | */ |
| 11 | 11 | |
| @@ -28,15 +28,163 @@ | ||
| 28 | 28 | public function __construct() { |
| 29 | 29 | $this->id = 'emails'; |
| 30 | 30 | $this->label = esc_html__( 'Emails', 'give' ); |
| 31 | 31 | |
| 32 | - $this->default_tab = 'email-settings'; | |
| 32 | + $this->default_tab = 'donor-email'; | |
| 33 | 33 | |
| 34 | 34 | parent::__construct(); |
| 35 | 35 | |
| 36 | + $this->enable_save = ! ( Give_Admin_Settings::is_setting_page( 'emails', 'donor-email' ) || Give_Admin_Settings::is_setting_page( 'emails', 'admin-email' ) ); | |
| 37 | + | |
| 36 | 38 | add_action( 'give_admin_field_email_notification', array( $this, 'email_notification_setting' ) ); |
| 39 | + add_action( 'give_admin_field_give_sendwp_button', [ $this, '_render_give_sendwp_button' ], 10, 3 ); | |
| 37 | 40 | } |
| 38 | 41 | |
| 42 | + /** | |
| 43 | + * Render give_currency_code_preview field type | |
| 44 | + * | |
| 45 | + * @since 2.33.4 added nonce to give_sendwp_remote_install | |
| 46 | + * @since 2.3.0 | |
| 47 | + * @access public | |
| 48 | + * | |
| 49 | + * @param array $field Field Attributes array. | |
| 50 | + * | |
| 51 | + * @return void | |
| 52 | + */ | |
| 53 | + public function _render_give_sendwp_button( $field, $value ) { | |
| 54 | + // Connection status partial label based on the state of the SendWP email sending setting (Tools -> SendWP) | |
| 55 | + $connected = '<a href="https://app.sendwp.com/dashboard" target="_blank" rel="noopener noreferrer">'; | |
| 56 | + $connected .= __( 'Access your SendWP account', 'give' ); | |
| 57 | + $connected .= '</a>.'; | |
| 58 | + | |
| 59 | + $disconnected = sprintf( | |
| 60 | + __( '<em><strong>Note:</strong> Email sending is currently disabled. <a href="%s">Click here</a> to enable it.</em>', 'give' ), | |
| 61 | + esc_url( admin_url( '/tools.php?page=sendwp' ) ) | |
| 62 | + ); | |
| 63 | + | |
| 64 | + // Checks if SendWP is connected | |
| 65 | + $client_connected = function_exists( 'sendwp_client_connected' ) && sendwp_client_connected() ? true : false; | |
| 66 | + | |
| 67 | + // Checks if email sending is enabled in SendWP | |
| 68 | + $forwarding_enabled = function_exists( 'sendwp_forwarding_enabled' ) && sendwp_forwarding_enabled() ? true : false; | |
| 69 | + | |
| 70 | + // Output the appropriate button and label based on connection status | |
| 71 | + if( $client_connected ) : | |
| 72 | + ?> | |
| 73 | + <tr valign="top" <?php echo ! empty( $field['wrapper_class'] ) ? 'class="' . $field['wrapper_class'] . '"' : ''; ?>> | |
| 74 | + <th scope="row" class="titledesc"> | |
| 75 | + <label for="<?php echo esc_attr( $field['id'] ); ?>"><?php echo esc_html( $field['name'] ); ?></label> | |
| 76 | + </th> | |
| 77 | + <td class="give-forminp"> | |
| 78 | + <p><?php _e( 'SendWP plugin activated.', 'give' ); ?> <?php echo $forwarding_enabled ? $connected : $disconnected ; ?></p> | |
| 79 | + | |
| 80 | + <br style="margin-bottom: 0.5rem;"/> | |
| 81 | + | |
| 82 | + <button id="give-sendwp-disconnect" class="button"><?php _e( 'Disconnect SendWP', 'give' ); ?></button> | |
| 83 | + </td> | |
| 84 | + </tr> | |
| 85 | + <?php | |
| 86 | + else : | |
| 87 | + ?> | |
| 88 | + <tr valign="top" <?php echo ! empty( $field['wrapper_class'] ) ? 'class="' . $field['wrapper_class'] . '"' : ''; ?>> | |
| 89 | + <th scope="row" class="titledesc"> | |
| 90 | + <label for="<?php echo esc_attr( $field['id'] ); ?>"><?php echo esc_html( $field['name'] ); ?></label> | |
| 91 | + </th> | |
| 92 | + <td class="give-forminp"> | |
| 93 | + <div class="give-field-description"> | |
| 94 | + <?php _e( 'GiveWP recommends SendWP to ensure quick and reliable delivery of all emails sent from your site, such as donation receipts, recurring donation renewal reminders, password resets, and more.', 'give' ); ?> <?php printf( __( '%sLearn more%s', 'give' ), '<a href="https://go.givewp.com/sendwpinternal" target="_blank" rel="noopener noreferrer">', '</a>' ); ?> | |
| 95 | + </div> | |
| 96 | + | |
| 97 | + <br style="margin-bottom: 0.5rem;"/> | |
| 98 | + | |
| 99 | + <button type="button" id="give-sendwp-connect" class="button button-primary"><?php esc_html_e( 'Connect with SendWP', 'give' ); ?> | |
| 100 | + </button> | |
| 101 | + </td> | |
| 102 | + </tr> | |
| 103 | + | |
| 104 | + <script> | |
| 105 | + jQuery('#give-sendwp-connect').on('click', function(e) { | |
| 106 | + | |
| 107 | + e.preventDefault(); | |
| 108 | + jQuery(this).html( 'Connecting <span class="give-loading"></span>' ); | |
| 109 | + document.body.style.cursor = 'wait'; | |
| 110 | + give_sendwp_remote_install(); | |
| 111 | + | |
| 112 | + }); | |
| 113 | + | |
| 114 | + jQuery('#give-sendwp-disconnect').on('click', function(e) { | |
| 115 | + e.preventDefault(); | |
| 116 | + jQuery(this).html( 'Disconnecting <span class="give-loading dark"></span>' ); | |
| 117 | + document.body.style.cursor = 'wait'; | |
| 118 | + give_sendwp_disconnect(); | |
| 119 | + | |
| 120 | + }); | |
| 121 | + | |
| 122 | + function give_sendwp_remote_install() { | |
| 123 | + var data = { | |
| 124 | + 'action': 'give_sendwp_remote_install', | |
| 125 | + '_ajax_nonce': '<?php echo wp_create_nonce( 'give_sendwp_remote_install'); ?>' | |
| 126 | + }; | |
| 127 | + | |
| 128 | + // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php | |
| 129 | + jQuery.post(ajaxurl, data, function( response ) { | |
| 130 | + | |
| 131 | + if( ! response.success ) { | |
| 132 | + | |
| 133 | + if( confirm( response.data.error ) ) { | |
| 134 | + location.reload(); | |
| 135 | + return; | |
| 136 | + } | |
| 137 | + } | |
| 138 | + | |
| 139 | + give_sendwp_register_client( | |
| 140 | + response.data.register_url, | |
| 141 | + response.data.client_name, | |
| 142 | + response.data.client_secret, | |
| 143 | + response.data.client_redirect, | |
| 144 | + response.data.partner_id | |
| 145 | + ); | |
| 146 | + }); | |
| 147 | + } | |
| 148 | + | |
| 149 | + function give_sendwp_disconnect() { | |
| 150 | + var data = { | |
| 151 | + 'action': 'give_sendwp_disconnect', | |
| 152 | + '_ajax_nonce': '<?php echo wp_create_nonce( 'give_sendwp_disconnect' ); ?>' | |
| 153 | + }; | |
| 154 | + | |
| 155 | + jQuery.post(ajaxurl, data, function( response ) { | |
| 156 | + location.reload(); | |
| 157 | + }); | |
| 158 | + } | |
| 159 | + | |
| 160 | + function give_sendwp_register_client(register_url, client_name, client_secret, client_redirect, partner_id) { | |
| 161 | + | |
| 162 | + var form = document.createElement("form"); | |
| 163 | + form.setAttribute("method", 'POST'); | |
| 164 | + form.setAttribute("action", register_url); | |
| 165 | + | |
| 166 | + function give_sendwp_append_form_input(name, value) { | |
| 167 | + var input = document.createElement("input"); | |
| 168 | + input.setAttribute("type", "hidden"); | |
| 169 | + input.setAttribute("name", name); | |
| 170 | + input.setAttribute("value", value); | |
| 171 | + form.appendChild(input); | |
| 172 | + } | |
| 173 | + | |
| 174 | + give_sendwp_append_form_input('client_name', client_name); | |
| 175 | + give_sendwp_append_form_input('client_secret', client_secret); | |
| 176 | + give_sendwp_append_form_input('client_redirect', client_redirect); | |
| 177 | + give_sendwp_append_form_input('partner_id', partner_id); | |
| 178 | + | |
| 179 | + document.body.appendChild(form); | |
| 180 | + form.submit(); | |
| 181 | + } | |
| 182 | + </script> | |
| 183 | + <?php | |
| 184 | + endif; | |
| 185 | + } | |
| 186 | + | |
| 39 | 187 | /** |
| 40 | 188 | * Get settings array. |
| 41 | 189 | * |
| 42 | 190 | * @since 1.8 |
| @@ -46,33 +194,17 @@ | ||
| 46 | 194 | $settings = array(); |
| 47 | 195 | $current_section = give_get_current_setting_section(); |
| 48 | 196 | |
| 49 | 197 | switch ( $current_section ) { |
| 50 | - case 'email-settings' : | |
| 198 | + case 'email-settings': | |
| 51 | 199 | $settings = array( |
| 52 | 200 | |
| 53 | - // Section 1: Email Notification Listing. | |
| 201 | + // Section 1: Email Sender Setting | |
| 54 | 202 | array( |
| 55 | - 'desc' => __( 'Email notifications sent from Give are listed below. Click on an email to configure it.', 'give' ), | |
| 56 | - 'type' => 'title', | |
| 57 | - 'id' => 'give_email_notification_settings', | |
| 58 | - 'table_html' => false, | |
| 203 | + 'id' => 'give_title_email_settings_1', | |
| 204 | + 'type' => 'title', | |
| 59 | 205 | ), |
| 60 | 206 | array( |
| 61 | - 'type' => 'email_notification', | |
| 62 | - ), | |
| 63 | - array( | |
| 64 | - 'type' => 'sectionend', | |
| 65 | - 'id' => 'give_email_notification_settings', | |
| 66 | - ), | |
| 67 | - | |
| 68 | - // Section 2: Email Sender Setting | |
| 69 | - array( | |
| 70 | - 'title' => __( 'Email Sender Options', 'give' ), | |
| 71 | - 'id' => 'give_title_email_settings_1', | |
| 72 | - 'type' => 'title', | |
| 73 | - ), | |
| 74 | - array( | |
| 75 | 207 | 'id' => 'email_template', |
| 76 | 208 | 'name' => esc_html__( 'Email Template', 'give' ), |
| 77 | 209 | 'desc' => esc_html__( 'Choose your template from the available registered template types.', 'give' ), |
| 78 | 210 | 'type' => 'select', |
| @@ -86,9 +218,9 @@ | ||
| 86 | 218 | ), |
| 87 | 219 | array( |
| 88 | 220 | 'id' => 'from_name', |
| 89 | 221 | 'name' => esc_html__( 'From Name', 'give' ), |
| 90 | - 'desc' => esc_html__( 'The name which appears in the "From" field in all Give donation emails.', 'give' ), | |
| 222 | + 'desc' => esc_html__( 'The name which appears in the "From" field in all GiveWP donation emails.', 'give' ), | |
| 91 | 223 | 'default' => get_bloginfo( 'name' ), |
| 92 | 224 | 'type' => 'text', |
| 93 | 225 | ), |
| 94 | 226 | array( |
| @@ -93,12 +225,18 @@ | ||
| 93 | 225 | ), |
| 94 | 226 | array( |
| 95 | 227 | 'id' => 'from_email', |
| 96 | 228 | 'name' => esc_html__( 'From Email', 'give' ), |
| 97 | - 'desc' => esc_html__( 'Email address from which all Give emails are sent from. This will act as the "from" and "reply-to" email address.', 'give' ), | |
| 229 | + 'desc' => esc_html__( 'Email address from which all GiveWP emails are sent from. This will act as the "from" and "reply-to" email address.', 'give' ), | |
| 98 | 230 | 'default' => get_bloginfo( 'admin_email' ), |
| 99 | 231 | 'type' => 'text', |
| 100 | 232 | ), |
| 233 | + array( | |
| 234 | + 'id' => 'sendwp', | |
| 235 | + 'name' => esc_html__( 'SendWP', 'give' ), | |
| 236 | + 'desc' => esc_html__( 'We recommend SendWP to ensure quick and reliable delivery of all emails sent from your store, such as donation receipts, recurring donation renewal reminders, password resets, and more.', 'give' ), | |
| 237 | + 'type' => 'give_sendwp_button', | |
| 238 | + ), | |
| 101 | 239 | array( |
| 102 | 240 | 'name' => esc_html__( 'Donation Notification Settings Docs Link', 'give' ), |
| 103 | 241 | 'id' => 'donation_notification_settings_docs_link', |
| 104 | 242 | 'url' => esc_url( 'http://docs.givewp.com/settings-donation-notification' ), |
| @@ -111,18 +249,60 @@ | ||
| 111 | 249 | ), |
| 112 | 250 | ); |
| 113 | 251 | break; |
| 114 | 252 | |
| 253 | + case 'donor-email': | |
| 254 | + $settings = array( | |
| 255 | + | |
| 256 | + // Section 1: Donor Email Notification Listing. | |
| 257 | + array( | |
| 258 | + 'desc' => __( 'Email notifications sent from GiveWP for donor are listed below. Click on an email to configure it.', 'give' ), | |
| 259 | + 'type' => 'title', | |
| 260 | + 'id' => 'give_donor_email_notification_settings', | |
| 261 | + 'table_html' => false, | |
| 262 | + ), | |
| 263 | + array( | |
| 264 | + 'type' => 'email_notification', | |
| 265 | + ), | |
| 266 | + array( | |
| 267 | + 'type' => 'sectionend', | |
| 268 | + 'id' => 'give_donor_email_notification_settings', | |
| 269 | + ), | |
| 270 | + | |
| 271 | + ); | |
| 272 | + break; | |
| 273 | + | |
| 274 | + case 'admin-email': | |
| 275 | + $settings = array( | |
| 276 | + | |
| 277 | + // Section 1: Admin Email Notification Listing. | |
| 278 | + array( | |
| 279 | + 'desc' => __( 'Email notifications sent from GiveWP for admin are listed below. Click on an email to configure it.', 'give' ), | |
| 280 | + 'type' => 'title', | |
| 281 | + 'id' => 'give_admin_email_notification_settings', | |
| 282 | + 'table_html' => false, | |
| 283 | + ), | |
| 284 | + array( | |
| 285 | + 'type' => 'email_notification', | |
| 286 | + ), | |
| 287 | + array( | |
| 288 | + 'type' => 'sectionend', | |
| 289 | + 'id' => 'give_admin_email_notification_settings', | |
| 290 | + ), | |
| 291 | + | |
| 292 | + ); | |
| 293 | + break; | |
| 294 | + | |
| 115 | 295 | case 'contact': |
| 116 | 296 | $settings = array( |
| 117 | 297 | |
| 118 | 298 | array( |
| 119 | 299 | 'id' => 'give_title_general_settings_5', |
| 120 | - 'type' => 'title' | |
| 300 | + 'type' => 'title', | |
| 121 | 301 | ), |
| 122 | 302 | array( |
| 123 | 303 | 'name' => __( 'Admin Email Address', 'give' ), |
| 124 | - 'id' => "contact_admin_email", | |
| 304 | + 'id' => 'contact_admin_email', | |
| 125 | 305 | 'desc' => sprintf( '%1$s <code>{admin_email}</code> %2$s', __( 'By default, the', 'give' ), __( 'tag will use your WordPress admin email. If you would like to customize this address you can do so in the field above.', 'give' ) ), |
| 126 | 306 | 'type' => 'text', |
| 127 | 307 | 'default' => give_email_admin_email(), |
| 128 | 308 | |
| @@ -128,9 +308,9 @@ | ||
| 128 | 308 | |
| 129 | 309 | ), |
| 130 | 310 | array( |
| 131 | 311 | 'name' => __( 'Offline Mailing Address', 'give' ), |
| 132 | - 'id' => "contact_offline_mailing_address", | |
| 312 | + 'id' => 'contact_offline_mailing_address', | |
| 133 | 313 | 'desc' => sprintf( '%1$s <code>{offline_mailing_address}</code> %2$s', __( 'Set the mailing address to where you would like your donors to send their offline donations. This will customize the', 'give' ), __( 'email tag for the Offline Donations payment gateway.', 'give' ) ), |
| 134 | 314 | 'type' => 'wysiwyg', |
| 135 | 315 | 'default' => ' <em>' . get_bloginfo( 'sitename' ) . '</em><br> <em>111 Not A Real St.</em><br> <em>Anytown, CA 12345 </em><br>', |
| 136 | 316 | ), |
| @@ -135,10 +315,10 @@ | ||
| 135 | 315 | 'default' => ' <em>' . get_bloginfo( 'sitename' ) . '</em><br> <em>111 Not A Real St.</em><br> <em>Anytown, CA 12345 </em><br>', |
| 136 | 316 | ), |
| 137 | 317 | array( |
| 138 | 318 | 'id' => 'give_title_general_settings_4', |
| 139 | - 'type' => 'sectionend' | |
| 140 | - ) | |
| 319 | + 'type' => 'sectionend', | |
| 320 | + ), | |
| 141 | 321 | ); |
| 142 | 322 | |
| 143 | 323 | break; |
| 144 | 324 | }// End switch(). |
| @@ -169,8 +349,10 @@ | ||
| 169 | 349 | * @return array |
| 170 | 350 | */ |
| 171 | 351 | public function get_sections() { |
| 172 | 352 | $sections = array( |
| 353 | + 'donor-email' => esc_html__( 'Donor Emails', 'give' ), | |
| 354 | + 'admin-email' => esc_html__( 'Admin Emails', 'give' ), | |
| 173 | 355 | 'email-settings' => esc_html__( 'Email Settings', 'give' ), |
| 174 | 356 | 'contact' => esc_html__( 'Contact Information', 'give' ), |
| 175 | 357 | ); |
| 176 | 358 | |