WordPress.org

Make WordPress Core

Ticket #50105: 50105.12.diff

File 50105.12.diff, 5.1 KB (added by adamsilverstein, 7 months ago)
  • src/js/_enqueues/wp/util.js

    diff --git src/js/_enqueues/wp/util.js src/js/_enqueues/wp/util.js
    index b5ba1801d7..8384371173 100644
    window.wp = window.wp || {}; 
    115115                                        }
    116116
    117117                                        if ( _.isObject( response ) && ! _.isUndefined( response.success ) ) {
    118                                                 deferred[ response.success ? 'resolveWith' : 'rejectWith' ]( this, [response.data] );
     118                                                deferred[ response.success ? 'resolveWith' : 'rejectWith' ]( deferred.jqXHR, [response.data] );
    119119                                        } else {
    120120                                                deferred.rejectWith( this, [response] );
    121121                                        }
  • src/js/media/models/attachments.js

    diff --git src/js/media/models/attachments.js src/js/media/models/attachments.js
    index a0ba72869b..f4b4e48297 100644
    var Attachments = Backbone.Collection.extend(/** @lends wp.media.model.Attachmen 
    375375         * passing through the JSON response. We override this to add attributes to
    376376         * the collection items.
    377377         *
    378          * @since 5.8.0 The response returns the attachments under `response.attachments` and
    379          *              `response.totalAttachments` holds the total number of attachments found.
    380          *
    381378         * @param {Object|Array} response The raw response Object/Array.
    382379         * @param {Object} xhr
    383380         * @return {Array} The array of model attributes to be added to the collection
    384381         */
    385382        parse: function( response, xhr ) {
    386                 if ( ! _.isArray( response.attachments ) ) {
    387                         response = [ response.attachments ];
     383                if ( ! _.isArray( response ) ) {
     384                          response = [response];
    388385                }
    389 
    390                 this.totalAttachments = parseInt( response.totalAttachments, 10 );
    391 
    392                 return _.map( response.attachments, function( attrs ) {
     386                return _.map( response, function( attrs ) {
    393387                        var id, attachment, newAttributes;
    394388
    395389                        if ( attrs instanceof Backbone.Model ) {
    var Attachments = Backbone.Collection.extend(/** @lends wp.media.model.Attachmen 
    409403                        return attachment;
    410404                });
    411405        },
     406
     407        // Customize fetch so we can extract the total post count from the response headers.
     408        fetch: function(options) {
     409                var collection = this;
     410                var fetched = Backbone.Collection.prototype.fetch.call(this, options)
     411                        .done( function() {
     412                                collection.totalAttachments = parseInt( this.getResponseHeader( 'X-WP-Total' ), 10 );
     413                        } );
     414                return fetched;
     415        },
     416
    412417        /**
    413418         * If the collection is a query, create and mirror an Attachments Query collection.
    414          * 
     419         *
    415420         * @access private
    416421         * @param {Boolean} refresh Deprecated, refresh parameter no longer used.
    417422         */
  • src/js/media/models/query.js

    diff --git src/js/media/models/query.js src/js/media/models/query.js
    index d744537c44..1d56fed624 100644
    Query = Attachments.extend(/** @lends wp.media.model.Query.prototype */{ 
    113113                options.remove = false;
    114114
    115115                return this._more = this.fetch( options ).done( function( response ) {
    116                         var attachments = response.attachments;
    117 
    118                         if ( _.isEmpty( attachments ) || -1 === this.args.posts_per_page || attachments.length < this.args.posts_per_page ) {
     116                        if ( _.isEmpty( response ) || -1 === query.args.posts_per_page || response.length < query.args.posts_per_page ) {
    119117                                query._hasMore = false;
    120118                        }
    121119                });
  • src/js/media/views/attachments/browser.js

    diff --git src/js/media/views/attachments/browser.js src/js/media/views/attachments/browser.js
    index 6a75fb9a7d..4f7625cfe3 100644
    AttachmentsBrowser = View.extend(/** @lends wp.media.view.AttachmentsBrowser.pro 
    635635                });
    636636
    637637                view.loadMoreSpinner.show();
    638 
    639                 this.collection.more().done( function() {
    640                         // Within done(), `this` is the returned collection.
     638                this.collection.once( 'attachments:received', function() {
    641639                        view.loadMoreSpinner.hide();
    642640                } );
     641                this.collection.more();
    643642        },
    644643
    645644        /**
  • src/wp-admin/includes/ajax-actions.php

    diff --git src/wp-admin/includes/ajax-actions.php src/wp-admin/includes/ajax-actions.php
    index feb35ca40c..32e777e569 100644
    function wp_ajax_query_attachments() { 
    29902990         * @param array $query An array of query variables.
    29912991         */
    29922992        $query = apply_filters( 'ajax_query_attachments_args', $query );
    2993         $query = new WP_Query( $query );
     2993        $attachments_query = new WP_Query( $query );
    29942994
    2995         $posts = array_map( 'wp_prepare_attachment_for_js', $query->posts );
     2995        $posts = array_map( 'wp_prepare_attachment_for_js', $attachments_query->posts );
    29962996        $posts = array_filter( $posts );
     2997        $total_posts = $attachments_query->found_posts;
    29972998
    2998         $result = array(
    2999                 'attachments'      => $posts,
    3000                 'totalAttachments' => $query->found_posts,
    3001         );
     2999        if ( $total_posts < 1 ) {
     3000                // Out-of-bounds, run the query again without LIMIT for total count.
     3001                unset( $query['paged'] );
     3002
     3003                $count_query = new WP_Query();
     3004                $count_query->query( $query_args );
     3005                $total_posts = $count_query->found_posts;
     3006        }
     3007
     3008        $max_pages = ceil( $total_posts / (int) $attachments_query->query['posts_per_page'] );
     3009
     3010        header( 'X-WP-Total: ' . (int) $total_posts );
     3011        header( 'X-WP-TotalPages: ' . (int) $max_pages );
    30023012
    3003         wp_send_json_success( $result );
     3013        wp_send_json_success( $posts );
    30043014}
    30053015
    30063016/**