WordPress.org

Make WordPress Core

Ticket #20926: 20926.diff

File 20926.diff, 3.6 KB (added by koopersmith, 6 years ago)
  • wp-admin/admin-ajax.php

     
    3838
    3939$core_actions_get = array(
    4040        'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache',
    41         'autocomplete-user', 'dashboard-widgets',
     41        'autocomplete-user', 'dashboard-widgets', 'logged-in',
    4242);
    4343
    4444$core_actions_post = array(
  • wp-admin/includes/ajax-actions.php

     
    212212        wp_die();
    213213}
    214214
     215function wp_ajax_logged_in() {
     216        wp_die( 1 );
     217}
     218
    215219/*
    216220 * Ajax helper.
    217221 */
  • wp-admin/js/customize-controls.dev.js

     
    288288                sensitivity: 2000,
    289289
    290290                initialize: function( params, options ) {
    291                         var loaded   = false,
    292                                 ready    = false,
    293                                 deferred = $.Deferred(),
     291                        var deferred = $.Deferred(),
    294292                                self     = this;
    295293
    296294                        // This is the promise object.
     
    304302
    305303                        this.add( 'previewUrl', params.previewUrl );
    306304
    307                         this.bind( 'ready', function() {
     305                        this.query = $.extend( params.query || {}, { customize_messenger_channel: this.channel() });
     306
     307                        this.run( deferred );
     308                },
     309
     310                run: function( deferred ) {
     311                        var self   = this,
     312                                loaded = false,
     313                                ready  = false;
     314
     315                        if ( this._ready )
     316                                this.unbind( 'ready', this._ready );
     317
     318                        this._ready = function() {
    308319                                ready = true;
    309320
    310321                                if ( loaded )
    311322                                        deferred.resolveWith( self );
    312                         });
     323                        };
    313324
    314                         params.query = $.extend( params.query || {}, { customize_messenger_channel: this.channel() });
     325                        this.bind( 'ready', this._ready );
    315326
    316327                        this.request = $.ajax( this.previewUrl(), {
    317328                                type: 'POST',
    318                                 data: params.query,
     329                                data: this.query,
    319330                                xhrFields: {
    320331                                        withCredentials: true
    321332                                }
     
    339350
    340351                                // Check if the user is not logged in.
    341352                                if ( '0' === response ) {
    342                                         deferred.rejectWith( self, [ 'logged out' ] );
     353                                        self.login( deferred );
    343354                                        return;
    344355                                }
    345356
     
    360371                                response = response.slice( 0, index ) + response.slice( index + signature.length );
    361372
    362373                                // Create the iframe and inject the html content.
    363                                 // Strip the signature from the request.
    364                                 response = response.slice( 0, index ) + response.slice( index + signature.length );
    365 
    366                                 // Create the iframe and inject the html content.
    367374                                self.iframe = $('<iframe />').appendTo( self.previewer.container );
    368375
    369376                                // Bind load event after the iframe has been added to the page;
     
    388395                        });
    389396                },
    390397
     398                login: function( deferred ) {
     399                        var self = this,
     400                                reject;
     401
     402                        reject = function() {
     403                                deferred.rejectWith( self, [ 'logged out' ] );
     404                        };
     405
     406                        if ( this.triedLogin )
     407                                return reject();
     408
     409                        // Check if we have an admin cookie.
     410                        $.get( api.settings.url.ajax, {
     411                                action: 'logged-in'
     412                        }).fail( reject ).done( function( response ) {
     413                                var iframe;
     414
     415                                if ( '1' !== response )
     416                                        reject();
     417
     418                                iframe = $('<iframe src="' + self.previewUrl() + '" />').hide();
     419                                iframe.appendTo( self.previewer.container );
     420                                iframe.load( function() {
     421                                        self.triedLogin = true;
     422
     423                                        iframe.remove();
     424                                        self.run( deferred );
     425                                });
     426                        });
     427                },
     428
    391429                destroy: function() {
    392430                        api.Messenger.prototype.destroy.call( this );
    393431                        this.request.abort();