WordPress.org

Make WordPress Core

Ticket #27055: 27055.diff

File 27055.diff, 4.0 KB (added by jorbin, 5 years ago)
  • src/wp-admin/admin-ajax.php

     
    5858        'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment',
    5959        'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
    6060        'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
    61         'save-user-color-scheme', 'update-widget',
     61        'save-user-color-scheme', 'update-widget', 'query-themes',
    6262);
    6363
    6464// Register core Ajax calls.
  • src/wp-admin/includes/ajax-actions.php

     
    22042204        update_user_meta( get_current_user_id(), 'admin_color', $color_scheme );
    22052205        wp_send_json_success();
    22062206}
     2207
     2208/**
     2209 * Proxy requests for themes
     2210 *
     2211 * @since 3.8.0
     2212 */
     2213function wp_ajax_query_themes(){
     2214
     2215
     2216        check_ajax_referer( 'query-themes', 'nonce' );
     2217
     2218        $base_url = 'http://api.wordpress.org/themes/info/1.1/?action=query_themes';
     2219
     2220        $return = wp_remote_post( $base_url, array(
     2221                'body' => array( 'request' => $_REQUEST['request'] )
     2222        ));
     2223
     2224        if ( is_wp_error( $return ) ) {
     2225                wp_send_json_error();
     2226        }
     2227
     2228        wp_send_json_success( json_decode( $return['body'] ) );
     2229
     2230}
  • src/wp-admin/js/theme.js

     
    249249                        this.currentQuery.page = 1;
    250250                }
    251251
     252
    252253                // Otherwise, send a new API call and add it to the cache.
    253254                if ( ! query && ! isPaginated ) {
    254255                        query = this.apiCall( request ).done( function( data ) {
    255256                                // Update the collection with the queried data.
     257                                data = data.data;
    256258                                self.reset( data.themes );
    257259                                count = data.info.results;
    258260
     
    274276                        // If it's a paginated request we need to fetch more themes...
    275277                        if ( isPaginated ) {
    276278                                return this.apiCall( request, isPaginated ).done( function( data ) {
     279                                        data = data.data;
    277280                                        // Add the new themes to the current collection
    278281                                        // @todo update counter
    279282                                        self.add( data.themes );
     
    287290                                });
    288291                        }
    289292
    290                         if ( query.themes.length === 0 ) {
     293                        if ( query.data.themes.length === 0 ) {
    291294                                self.trigger( 'query:empty' );
    292295                        } else {
    293296                                $( 'body' ).removeClass( 'no-results' );
     
    295298
    296299                        // Only trigger an update event since we already have the themes
    297300                        // on our cached object
    298                         if ( _.isNumber( query.total ) ) {
    299                                 this.count = query.total;
     301                        if ( _.isNumber( query.data.total ) ) {
     302                                this.count = query.data.total;
    300303                        }
    301304
    302                         if ( ! query.total ) {
     305                        if ( ! query.data.total ) {
    303306                                this.count = this.length;
    304307                        }
    305308
    306                         this.reset( query.themes );
     309                        this.reset( query.data.themes );
    307310                        this.trigger( 'update' );
    308311                }
    309312        },
     
    322325
    323326                // Ajax request to .org API
    324327                return $.ajax({
    325                         url: 'https://api.wordpress.org/themes/info/1.1/?action=query_themes',
     328                        url: ajaxurl,
    326329
    327330                        // We want JSON data
    328331                        dataType: 'json',
    329332                        type: 'POST',
    330                         crossDomain: true,
    331333
    332334                        // Request data
    333335                        data: {
    334                                 action: 'query_themes',
     336                                action: 'query-themes',
     337                                nonce: $('#query-theme-nonce').val(),
    335338                                request: _.extend({
    336339                                        per_page: 72,
    337340                                        fields: {
     
    15531556        }
    15541557};
    15551558
     1559
    15561560// Ready...
    15571561$( document ).ready(function() {
    15581562        if ( themes.isInstall ) {
  • src/wp-admin/theme-install.php

     
    148148                                <a href="#"><?php _e( 'Edit' ); ?></a>
    149149                        </div>
    150150                </div>
     151                <?php wp_nonce_field( 'query-themes', 'query-theme-nonce' ); ?> 
    151152        </div>
    152153        <div class="theme-browser"></div>
    153154        <div id="theme-installer" class="wp-full-overlay expanded"></div>