Make WordPress Core

Ticket #34206: 34206.3.diff

File 34206.3.diff, 5.9 KB (added by swissspidy, 11 years ago)
  • src/wp-admin/admin-ajax.php

    diff --git src/wp-admin/admin-ajax.php src/wp-admin/admin-ajax.php
    index 64915aa..5597aec 100644
    $core_actions_post = array( 
    6262        'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
    6363        'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail',
    6464        'parse-media-shortcode', 'destroy-sessions', 'install-plugin', 'update-plugin', 'press-this-save-post',
    65         'press-this-add-category', 'crop-image', 'generate-password',
     65        'press-this-add-category', 'crop-image', 'generate-password', 'save-wporg-username',
    6666);
    6767
    6868// Deprecated
  • src/wp-admin/css/common.css

    diff --git src/wp-admin/css/common.css src/wp-admin/css/common.css
    index c084b20..df864d3 100644
    th.action-links { 
    10871087        color: #fff;
    10881088}
    10891089
     1090.wp-filter .favorites-form {
     1091        display: none;
     1092        margin: 0 -20px;
     1093        padding: 20px;
     1094        border-top: 1px solid #eee;
     1095        background: #fafafa;
     1096        overflow: hidden;
     1097        width: 100%;
     1098}
     1099
     1100.show-favorites-form .wp-filter .favorites-form {
     1101        display: block;
     1102}
     1103
    10901104.filter-drawer {
    10911105        display: none;
    10921106        margin: 0 -20px;
  • src/wp-admin/includes/ajax-actions.php

    diff --git src/wp-admin/includes/ajax-actions.php src/wp-admin/includes/ajax-actions.php
    index 0170cd9..4258fac 100644
    function wp_ajax_query_themes() { 
    28152815                'fields'   => $theme_field_defaults
    28162816        ) );
    28172817
     2818        if ( 'favorites' === $args['browse'] && ! isset( $args['user'] ) ) {
     2819                $user = get_user_option( 'wporg_favorites' );
     2820                if ( $user ) {
     2821                        $args['user'] = $user;
     2822                }
     2823        }
     2824
    28182825        $old_filter = isset( $args['browse'] ) ? $args['browse'] : 'search';
    28192826
    28202827        /** This filter is documented in wp-admin/includes/class-wp-theme-install-list-table.php */
    function wp_ajax_crop_image() { 
    32793286function wp_ajax_generate_password() {
    32803287        wp_send_json_success( wp_generate_password( 24 ) );
    32813288}
     3289
     3290/**
     3291 * Ajax handler for saving the user's WordPress.org username.
     3292 *
     3293 * @since 4.4.0
     3294 */
     3295function wp_ajax_save_wporg_username() {
     3296        if ( ! current_user_can( 'install_themes' ) && ! current_user_can( 'install_plugins' ) ) {
     3297                wp_send_json_error();
     3298        }
     3299
     3300        $username = isset( $_REQUEST['username'] ) ? wp_unslash( $_REQUEST['username'] ) : false;
     3301
     3302        if ( ! $username ) {
     3303                wp_send_json_error();
     3304        }
     3305
     3306        wp_send_json_success( update_user_meta( get_current_user_id(), 'wporg_favorites', $username ) );
     3307}
  • src/wp-admin/js/theme.js

    diff --git src/wp-admin/js/theme.js src/wp-admin/js/theme.js
    index 0961922..a8a869c 100644
    themes.view.Installer = themes.view.Appearance.extend({ 
    13561356                'click .filter-drawer .apply-filters': 'applyFilters',
    13571357                'click .filter-group [type="checkbox"]': 'addFilter',
    13581358                'click .filter-drawer .clear-filters': 'clearFilters',
    1359                 'click .filtered-by': 'backToFilters'
     1359                'click .filtered-by': 'backToFilters',
     1360                'click .favorites-form-submit' : 'saveUsername',
     1361                'keyup #wporg-username-input': 'saveUsername',
    13601362        },
    13611363
    13621364        // Initial render method
    themes.view.Installer = themes.view.Appearance.extend({ 
    14481450                $( '.filter-links li > a, .theme-filter' ).removeClass( this.activeClass );
    14491451                $( '[data-sort="' + sort + '"]' ).addClass( this.activeClass );
    14501452
     1453                if ( 'favorites' === sort ) {
     1454                        $ ( 'body' ).addClass( 'show-favorites-form' );
     1455                } else {
     1456                        $ ( 'body' ).removeClass( 'show-favorites-form' );
     1457                }
     1458
    14511459                this.browse( sort );
    14521460        },
    14531461
    themes.view.Installer = themes.view.Appearance.extend({ 
    15091517                this.collection.query( request );
    15101518        },
    15111519
     1520        // Save the user's WordPress.org username and get his favorite themes.
     1521        saveUsername: function ( event ) {
     1522                var username = $( '#wporg-username-input' ).val(),
     1523                        request = { browse: 'favorites', user: username },
     1524                        that = this;
     1525
     1526                if ( event ) {
     1527                        event.preventDefault();
     1528                }
     1529
     1530                // save username on enter
     1531                if ( event.type === 'keyup' && event.which !== 13 ) {
     1532                        return;
     1533                }
     1534
     1535                return wp.ajax.send( 'save-wporg-username', {
     1536                        data: {
     1537                                username: username
     1538                        },
     1539                        success: function () {
     1540                                // Get the themes by sending Ajax POST request to api.wordpress.org/themes
     1541                                // or searching the local cache
     1542                                that.collection.query( request );
     1543                        }
     1544                } );
     1545        },
     1546
    15121547        // Get the checked filters
    15131548        // @return {array} of tags or false
    15141549        filtersChecked: function() {
  • src/wp-admin/theme-install.php

    diff --git src/wp-admin/theme-install.php src/wp-admin/theme-install.php
    index 6213a5a..289f395 100644
    include(ABSPATH . 'wp-admin/admin-header.php'); 
    139139                        <li><a href="#" data-sort="featured"><?php _ex( 'Featured', 'themes' ); ?></a></li>
    140140                        <li><a href="#" data-sort="popular"><?php _ex( 'Popular', 'themes' ); ?></a></li>
    141141                        <li><a href="#" data-sort="new"><?php _ex( 'Latest', 'themes' ); ?></a></li>
     142                        <li><a href="#" data-sort="favorites"><?php _ex( 'Favorites', 'themes' ); ?></a></li>
    142143                </ul>
    143144
    144145                <a class="drawer-toggle" href="#"><?php _e( 'Feature Filter' ); ?></a>
    145146
    146147                <div class="search-form"></div>
    147148
     149                <div class="favorites-form">
     150                        <?php
     151                        $user = isset( $_GET['user'] ) ? wp_unslash( $_GET['user'] ) : get_user_option( 'wporg_favorites' );
     152                        update_user_meta( get_current_user_id(), 'wporg_favorites', $user );
     153                        ?>
     154                        <p class="install-help"><?php _e( 'If you have marked themes as favorites on WordPress.org, you can browse them here.' ); ?></p>
     155
     156                        <p>
     157                                <label for="user"><?php _e( 'Your WordPress.org username:' ); ?></label>
     158                                <input type="search" id="wporg-username-input" value="<?php echo esc_attr( $user ); ?>" />
     159                                <input type="button" class="button button-secondary favorites-form-submit" value="<?php esc_attr_e( 'Get Favorites' ); ?>" />
     160                        </p>
     161                </div>
     162
    148163                <div class="filter-drawer">
    149164                        <div class="buttons">
    150165                                <a class="apply-filters button button-secondary" href="#"><?php _e( 'Apply Filters' ); ?><span></span></a>