HEX
Server: LiteSpeed
System: Linux server315.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: globfdxw (6114)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/globfdxw/public_html/wp-content/themes/alone/license-manager/verifytheme.js
!(function($){
    "use strict";

    function showMessage( $container, type, message ) {
        var $notice = $('<div/>', {
            'class': 'notice ' + ( type === 'success' ? 'notice-success' : 'notice-error' ) + ' is-dismissible'
        }).append( $('<p/>').text( message ) );

        $container.empty().append( $notice );
    }

    function setButtonStates( $input, $btnActivate, $btnDeactivate ) {
        var isActivated = $input.is(':disabled') || $input.data('activated') === true;

        $btnActivate.prop('disabled', isActivated);
        $input.prop('disabled', isActivated);
        $btnDeactivate.prop('disabled', ! isActivated);
    }

    // Helper: extract server error message from non-2xx responses
    function extractAjaxErrorMessage( xhr, defaultMsg ) {
        defaultMsg = defaultMsg || ( window.verifytheme && verifytheme.strings && verifytheme.strings.ajax_error ) || 'AJAX error. Please try again.';
        try {
            // WP sends JSON bodies via wp_send_json_error; jQuery populates responseJSON for parsed JSON
            if ( xhr && xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message ) {
                return xhr.responseJSON.data.message;
            }
            // fallback: try parse responseText
            if ( xhr && xhr.responseText ) {
                var txt = xhr.responseText.trim();
                // try parse JSON
                var j = JSON.parse(txt);
                if ( j && j.data && j.data.message ) {
                    return j.data.message;
                }
                // else return raw text (short)
                if ( txt.length > 0 ) {
                    return txt.length > 200 ? txt.substr(0,200) + '...' : txt;
                }
            }
        } catch ( e ) {
            // ignore parse errors
        }
        return defaultMsg;
    }

    $(function(){
        var $doc = $(document);
        var $container = $('#verifytheme_message');
        var $input = $('#verify_purchase_code');
        var $btnActivate = $('#verify_activate');
        var $btnDeactivate = $('#verify_deactivate');

        // If elements don't exist, nothing to do
        if ( ! $input.length || ! $btnActivate.length || ! $btnDeactivate.length ) {
            return;
        }

        // Initialize button states based on input disabled state or data attribute
        setButtonStates( $input, $btnActivate, $btnDeactivate );

        // Activate handler
        $btnActivate.on('click', function(e){
            e.preventDefault();

            if ( typeof verifytheme === 'undefined' || ! verifytheme.ajax_url || ! verifytheme.nonce ) {
                showMessage( $container, 'error', (verifytheme && verifytheme.strings && verifytheme.strings.ajax_error) || 'AJAX not configured.' );
                return;
            }

            var code = $input.val() ? $input.val().trim() : '';
            if ( code === '' ) {
                showMessage( $container, 'error', (verifytheme && verifytheme.strings && verifytheme.strings.please_enter_purchase_code) || 'Please enter a purchase code.' );
                return;
            }

            $btnActivate.prop('disabled', true);
            showMessage( $container, 'success', (verifytheme && verifytheme.strings && verifytheme.strings.verifying) || 'Verifying...' );

            $.post( verifytheme.ajax_url, {
                action: 'verifytheme_activate',
                purchase_code: code,
                nonce: verifytheme.nonce
            }, function( res ){
                if ( res && res.success ) {
                    showMessage( $container, 'success', (res.data && res.data.message) ? res.data.message : (verifytheme && verifytheme.strings && verifytheme.strings.license_activated) );
                    $input.data('activated', true);
                    setButtonStates( $input, $btnActivate, $btnDeactivate );
                    setTimeout(function(){ location.reload(); }, 1200);
                } else {
                    var msg = (res && res.data && res.data.message) ? res.data.message : (verifytheme && verifytheme.strings && verifytheme.strings.activation_failed);
                    showMessage( $container, 'error', msg );
                    $btnActivate.prop('disabled', false);
                }
            }, 'json' ).fail(function( xhr ){
                // parse server message if present (e.g. 429 Too Many Requests with JSON body)
                var msg = extractAjaxErrorMessage( xhr, (verifytheme && verifytheme.strings && verifytheme.strings.ajax_error) );
                showMessage( $container, 'error', msg );
                $btnActivate.prop('disabled', false);
            });
        });

        // Deactivate handler
        $btnDeactivate.on('click', function(e){
            e.preventDefault();

            var confirmText = (verifytheme && verifytheme.strings && verifytheme.strings.deactivate_confirm) || 'Are you sure you want to deregister this license on this site?';
            if ( ! confirm( confirmText ) ) {
                return;
            }

            if ( typeof verifytheme === 'undefined' || ! verifytheme.ajax_url || ! verifytheme.nonce ) {
                showMessage( $container, 'error', (verifytheme && verifytheme.strings && verifytheme.strings.ajax_error) || 'AJAX not configured.' );
                return;
            }

            $btnDeactivate.prop('disabled', true);
            showMessage( $container, 'success', (verifytheme && verifytheme.strings && verifytheme.strings.processing) || 'Processing...' );

            $.post( verifytheme.ajax_url, {
                action: 'verifytheme_deactivate',
                nonce: verifytheme.nonce
            }, function( res ){
                if ( res && res.success ) {
                    showMessage( $container, 'success', (res.data && res.data.message) ? res.data.message : (verifytheme && verifytheme.strings && verifytheme.strings.license_deactivated) );
                    $input.data('activated', false);
                    setButtonStates( $input, $btnActivate, $btnDeactivate );
                    setTimeout(function(){ location.reload(); }, 900);
                } else {
                    var msg = (res && res.data && res.data.message) ? res.data.message : (verifytheme && verifytheme.strings && verifytheme.strings.deactivation_failed);
                    showMessage( $container, 'error', msg );
                    $btnDeactivate.prop('disabled', false);
                }
            }, 'json' ).fail(function( xhr ){
                var msg = extractAjaxErrorMessage( xhr, (verifytheme && verifytheme.strings && verifytheme.strings.ajax_error) );
                showMessage( $container, 'error', msg );
                $btnDeactivate.prop('disabled', false);
            });
        });

        // Support dismissible notices created here
        $doc.on('click', '.notice.is-dismissible .notice-dismiss', function(){
            $(this).closest('.notice').fadeOut(200, function(){ $(this).remove(); });
        });
    });
})(jQuery);