You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
347 lines
14 KiB
PHP
347 lines
14 KiB
PHP
<?php
|
|
/**
|
|
* @package Freemius
|
|
* @copyright Copyright (c) 2015, Freemius, Inc.
|
|
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
|
*
|
|
* @author Leo Fajardo (@leorw)
|
|
* @since 2.5.0
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* @var array $VARS
|
|
*/
|
|
$fs = freemius( $VARS['id'] );
|
|
$slug = $fs->get_slug();
|
|
|
|
$user = $fs->get_user();
|
|
$current_email_address = $user->email;
|
|
|
|
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
|
?>
|
|
<script type="text/javascript">
|
|
( function ( $ ) {
|
|
var modalHtml =
|
|
'<div class="fs-modal fs-modal-email-address-update">'
|
|
+ ' <div class="fs-modal-dialog">'
|
|
+ ' <div class="fs-modal-header">'
|
|
+ ' <h4><?php fs_esc_attr_echo_inline( 'Email address update', 'email-address-update', $slug ) ?></h4>'
|
|
+ ' <a href="!#" class="fs-close"><i class="dashicons dashicons-no" title="<?php echo esc_js( fs_text_x_inline( 'Dismiss', 'close window', 'dismiss', $slug ) ) ?>"></i></a>'
|
|
+ ' </div>'
|
|
+ ' <div class="fs-modal-body">'
|
|
+ ' <div class="fs-modal-panel active">'
|
|
+ ' <div class="notice notice-error inline fs-update-error-message"><p></p></div>'
|
|
+ ' <p><?php fs_echo_inline( 'Enter the new email address', 'enter-new-email-address' , $slug ) ?>:</p>'
|
|
+ ' <input type="text" class="fs-new-email-address-input" />'
|
|
+ ' <div class="fs-email-addresses-ownership-options" style="display: none">'
|
|
+ ' <p><?php echo sprintf(
|
|
fs_esc_html_inline( 'Are both %s and %s your email addresses?', 'email-addresses-ownership-confirmation' , $slug ),
|
|
sprintf( '<strong>%s</strong>', $current_email_address ),
|
|
'<strong class="fs-new-email-address"></strong>'
|
|
) ?></p>'
|
|
+ ' <ul>'
|
|
+ ' <li>'
|
|
+ ' <label>'
|
|
+ ' <span><input type="radio" name="email-addresses-ownership" value="both"/></span>'
|
|
+ ' <span><?php fs_echo_inline( 'Yes - both addresses are mine', 'both-addresses-are-mine', $slug ); ?></span>'
|
|
+ ' </label>'
|
|
+ ' </li>'
|
|
+ ' <li>'
|
|
+ ' <label>'
|
|
+ ' <span><input type="radio" name="email-addresses-ownership" value="current"/></span>'
|
|
+ ' <div><?php echo sprintf(
|
|
fs_esc_html_inline( "%s is my client's email address", 'client-email-address-confirmation', $slug ),
|
|
'<strong class="fs-new-email-address"></strong>'
|
|
) ?></span>'
|
|
+ ' </label>'
|
|
+ ' </li>'
|
|
+ ' <li>'
|
|
+ ' <label>'
|
|
+ ' <span><input type="radio" name="email-addresses-ownership" value="new"/></span>'
|
|
+ ' <div><?php echo sprintf(
|
|
fs_esc_html_inline( "%s is my email address", 'email-address-ownership-confirmation', $slug ),
|
|
'<strong class="fs-new-email-address"></strong>'
|
|
) ?></span>'
|
|
+ ' </label>'
|
|
+ ' </li>'
|
|
+ ' </ul>'
|
|
+ ' </div>'
|
|
+ ' <div class="fs-assets-transfership-options" style="display: none">'
|
|
+ ' <p><?php echo sprintf(
|
|
fs_esc_html_inline( 'Would you like to merge %s into %s?', 'accounts-merge-confirmation' , $slug ),
|
|
sprintf( '<strong>%s</strong>', $current_email_address ),
|
|
'<strong class="fs-new-email-address"></strong>'
|
|
) ?></p>'
|
|
+ ' <ul>'
|
|
+ ' <li>'
|
|
+ ' <label>'
|
|
+ ' <span><input type="radio" name="assets-transfer-type" value="all" /></span>'
|
|
+ ' <span><?php echo sprintf(
|
|
fs_esc_html_inline( 'Yes - move all my data and assets from %s to %s', 'move-all-data-and-assets-into-new-account', $slug ),
|
|
sprintf( '<strong>%s</strong>', $current_email_address ),
|
|
'<strong class="fs-new-email-address"></strong>'
|
|
) ?></span>'
|
|
+ ' </label>'
|
|
+ ' </li>'
|
|
+ ' <li>'
|
|
+ ' <label>'
|
|
+ ' <span><input type="radio" name="assets-transfer-type" value="plugin" /></span>'
|
|
+ ' <span><?php echo sprintf(
|
|
fs_esc_html_inline( "No - only move this site's data to %s", 'move-only-plugin-data-into-new-account', $slug ),
|
|
'<strong class="fs-new-email-address"></strong>'
|
|
) ?></span>'
|
|
+ ' </label>'
|
|
+ ' </li>'
|
|
+ ' </ul>'
|
|
+ ' </div>'
|
|
+ ' </div>'
|
|
+ ' </div>'
|
|
+ ' <div class="fs-modal-footer">'
|
|
+ ' <button class="button button-primary button-update" disabled><?php fs_esc_js_echo_inline( 'Update', 'update-email-address', $slug ) ?></button>'
|
|
+ ' <button class="button button-secondary button-close"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></button>'
|
|
+ ' </div>'
|
|
+ ' </div>'
|
|
+ '</div>',
|
|
$modal = $( modalHtml ),
|
|
$updateButton = $modal.find( '.button-update' ),
|
|
$updateResultMessage = $modal.find( '.fs-update-error-message' ),
|
|
selectedEmailAddressesOwnershipOption = null,
|
|
selectedAssetsTransfershipOption = null,
|
|
previousEmailAddress = '',
|
|
$body = $( 'body' );
|
|
|
|
$modal.appendTo( $body );
|
|
|
|
registerEventHandlers();
|
|
|
|
function registerEventHandlers() {
|
|
$body.on( 'click', '#fs_account_details .button-edit-email-address', function ( evt ) {
|
|
evt.preventDefault();
|
|
|
|
showModal( evt );
|
|
} );
|
|
|
|
$modal.on( 'input propertychange keyup paste delete cut', '.fs-new-email-address-input', function () {
|
|
var emailAddress = $( this ).val().trim();
|
|
|
|
if ( emailAddress === previousEmailAddress ) {
|
|
return;
|
|
}
|
|
|
|
var isValidEmailAddressInput = isValidEmailAddress( emailAddress );
|
|
|
|
toggleOptions( isValidEmailAddressInput );
|
|
|
|
if ( ! isValidEmailAddressInput ) {
|
|
disableUpdateButton();
|
|
} else {
|
|
$modal.find( '.fs-new-email-address').text( emailAddress );
|
|
|
|
maybeEnableUpdateButton();
|
|
}
|
|
|
|
previousEmailAddress = emailAddress;
|
|
} );
|
|
|
|
$modal.on( 'blur', '.fs-new-email-address-input', function() {
|
|
var emailAddress = $( this ).val().trim(),
|
|
isValidEmailAddressInput = isValidEmailAddress( emailAddress );
|
|
|
|
toggleOptions( isValidEmailAddressInput );
|
|
|
|
if ( ! isValidEmailAddressInput ) {
|
|
disableUpdateButton();
|
|
}
|
|
} );
|
|
|
|
$modal.on( 'click', '.fs-close, .button-secondary', function () {
|
|
closeModal();
|
|
return false;
|
|
} );
|
|
|
|
$modal.on( 'click', '.fs-modal-footer .button-update', function ( evt ) {
|
|
if ( ! isValidEmailAddress( previousEmailAddress ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( previousEmailAddress === '<?php echo $current_email_address ?>' ) {
|
|
closeModal();
|
|
return;
|
|
}
|
|
|
|
var transferType = 'transfer';
|
|
|
|
if ( 'current' === selectedEmailAddressesOwnershipOption ) {
|
|
transferType = 'transfer_to_client';
|
|
} else if (
|
|
'both' === selectedEmailAddressesOwnershipOption &&
|
|
'all' === selectedAssetsTransfershipOption
|
|
) {
|
|
transferType = 'merge';
|
|
}
|
|
|
|
$.ajax( {
|
|
url : <?php echo Freemius::ajax_url() ?>,
|
|
method : 'POST',
|
|
data : {
|
|
action : '<?php echo $fs->get_ajax_action( 'update_email_address' ) ?>',
|
|
security : '<?php echo $fs->get_ajax_security( 'update_email_address' ) ?>',
|
|
module_id : '<?php echo $fs->get_id() ?>',
|
|
transfer_type: transferType,
|
|
email_address: previousEmailAddress
|
|
},
|
|
beforeSend: function () {
|
|
disableUpdateButton();
|
|
|
|
$updateButton.find( '.fs-modal-footer .button' ).prop( 'disabled', true );
|
|
$updateButton.text( 'Processing...' );
|
|
},
|
|
success : function( result ) {
|
|
if ( result.success ) {
|
|
// Redirect to the "Account" page.
|
|
window.location.reload();
|
|
} else {
|
|
if ('change_ownership' === result.error.code) {
|
|
window.location = result.error.url;
|
|
} else {
|
|
showError(result.error.message ? result.error.message : result.error);
|
|
resetUpdateButton();
|
|
}
|
|
}
|
|
},
|
|
error : function () {
|
|
showError( '<?php fs_esc_js_echo_inline( 'Unexpected error, try again in 5 minutes. If the error persists, please contact support.', 'unexpected-error', $slug ) ?>' );
|
|
|
|
resetUpdateButton();
|
|
}
|
|
} );
|
|
} );
|
|
|
|
$modal.on( 'click', 'input[type="radio"]', function () {
|
|
var $selectedOption = $( this ),
|
|
selectedOptionValue = $selectedOption.val();
|
|
|
|
// If the selection has not changed, do not proceed.
|
|
if (
|
|
selectedEmailAddressesOwnershipOption === selectedOptionValue ||
|
|
selectedAssetsTransfershipOption === selectedOptionValue
|
|
) {
|
|
return;
|
|
}
|
|
|
|
if ( 'assets-transfer-type' === $selectedOption.attr( 'name' ) ) {
|
|
selectedAssetsTransfershipOption = selectedOptionValue;
|
|
} else {
|
|
selectedEmailAddressesOwnershipOption = selectedOptionValue;
|
|
|
|
if ( 'both' !== selectedEmailAddressesOwnershipOption ) {
|
|
$modal.find( '.fs-assets-transfership-options' ).hide();
|
|
} else {
|
|
$modal.find( '.fs-assets-transfership-options' ).show();
|
|
$modal.find( '.fs-assets-transfership-options input[type="radio"]' ).prop('checked', false);
|
|
|
|
selectedAssetsTransfershipOption = null;
|
|
|
|
disableUpdateButton();
|
|
}
|
|
}
|
|
|
|
if ( isValidEmailAddress( $( '.fs-new-email-address-input' ).val().trim() ) ) {
|
|
maybeEnableUpdateButton();
|
|
}
|
|
});
|
|
}
|
|
|
|
function showModal() {
|
|
resetModal();
|
|
|
|
// Display the dialog box.
|
|
$modal.addClass( 'active' );
|
|
$modal.find( '.fs-new-email-address-input' ).focus();
|
|
|
|
$( 'body' ).addClass( 'has-fs-modal' );
|
|
}
|
|
|
|
function closeModal() {
|
|
selectedEmailAddressesOwnershipOption = null;
|
|
|
|
disableUpdateButton();
|
|
|
|
$modal.removeClass( 'active' );
|
|
|
|
$( 'body' ).removeClass( 'has-fs-modal' );
|
|
}
|
|
|
|
function resetModal() {
|
|
hideError();
|
|
|
|
// Deselect all radio buttons.
|
|
$modal.find( 'input[type="radio"]' ).prop( 'checked', false );
|
|
|
|
// Clear the value of the email address text field.
|
|
$modal.find( 'input[type="text"]' ).val( '' );
|
|
|
|
toggleOptions( false );
|
|
|
|
disableUpdateButton();
|
|
|
|
$updateButton.text( <?php echo json_encode( fs_text_inline( 'Update', 'update-email-address', $slug ) ) ?> );
|
|
}
|
|
|
|
function resetUpdateButton() {
|
|
maybeEnableUpdateButton();
|
|
|
|
$updateButton.text( <?php echo json_encode( fs_text_inline( 'Update', 'update-email-address', $slug ) ) ?> );
|
|
}
|
|
|
|
function maybeEnableUpdateButton() {
|
|
if ( null === selectedEmailAddressesOwnershipOption ) {
|
|
return;
|
|
}
|
|
|
|
if (
|
|
'both' === selectedEmailAddressesOwnershipOption &&
|
|
null === selectedAssetsTransfershipOption
|
|
) {
|
|
return;
|
|
}
|
|
|
|
$updateButton.prop( 'disabled', false );
|
|
}
|
|
|
|
function disableUpdateButton() {
|
|
$updateButton.prop( 'disabled', true );
|
|
}
|
|
|
|
function hideError() {
|
|
$updateResultMessage.hide();
|
|
}
|
|
|
|
function showError( msg ) {
|
|
$updateResultMessage.find( ' > p' ).html( msg );
|
|
$updateResultMessage.show();
|
|
}
|
|
|
|
function isValidEmailAddress( emailAddress ) {
|
|
if ( '' === emailAddress ) {
|
|
return false;
|
|
}
|
|
|
|
return /[0-9a-zA-Z][a-zA-Z\+0-9\.\_\-]*@[0-9a-zA-Z\-]+(\.[a-zA-Z]{2,24}){1,3}/.test( emailAddress );
|
|
}
|
|
|
|
function toggleOptions( show ) {
|
|
$modal.find( '.fs-email-addresses-ownership-options' ).toggle( show );
|
|
|
|
if ( ! show ) {
|
|
$modal.find( '.fs-assets-transfership-options' ).hide();
|
|
} else if ( 'both' === selectedEmailAddressesOwnershipOption ) {
|
|
$modal.find( '.fs-assets-transfership-options' ).show();
|
|
}
|
|
}
|
|
} )( jQuery );
|
|
</script>
|