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>
 |