Make WordPress Core

Changeset 20751


Ignore:
Timestamp:
05/09/2012 03:01:49 PM (14 years ago)
Author:
ryan
Message:

When showing already installed themes in the theme installer list, indicate in the row actions that the theme is installed and offer an update link if updates are available.

Props SergeyBiryukov
Fixes #20618

Location:
trunk/wp-admin/includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/class-wp-plugin-install-list-table.php

    r20675 r20751  
    204204                                        case 'latest_installed':
    205205                                        case 'newer_installed':
    206                                                 $action_links[] = '<span title="' . esc_attr__( 'This plugin is already installed and is up to date' ) . ' ">' . __( 'Installed' ) . '</span>';
     206                                                $action_links[] = '<span title="' . esc_attr__( 'This plugin is already installed and is up to date' ) . ' ">' . _x( 'Installed', 'plugin' ) . '</span>';
    207207                                                break;
    208208                                }
  • trunk/wp-admin/includes/class-wp-theme-install-list-table.php

    r20730 r20751  
    199199                        'theme'  => $theme->slug,
    200200                ), self_admin_url( 'update.php' ) );
    201                 $actions[] = '<a class="install-now" href="' . wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ) . '" title="' . esc_attr( sprintf( __( 'Install %s' ), $name ) ) . '">' . __( 'Install Now' ) . '</a>';
     201
     202                $update_url = add_query_arg( array(
     203                        'action' => 'upgrade-theme',
     204                        'theme'  => $theme->slug,
     205                ), self_admin_url( 'update.php' ) );
     206
     207                $status = $this->_get_theme_status( $theme );
     208
     209                switch ( $status ) {
     210                        default:
     211                        case 'install':
     212                                $actions[] = '<a class="install-now" href="' . esc_url( wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ) ) . '" title="' . esc_attr( sprintf( __( 'Install %s' ), $name ) ) . '">' . __( 'Install Now' ) . '</a>';
     213                                break;
     214                        case 'update_available':
     215                                $actions[] = '<a class="install-now" href="' . esc_url( wp_nonce_url( $update_url, 'upgrade-theme_' . $theme->slug ) ) . '" title="' . esc_attr( sprintf( __( 'Update to version %s' ), $theme->version ) ) . '">' . __( 'Update' ) . '</a>';
     216                                break;
     217                        case 'newer_installed':
     218                        case 'latest_installed':
     219                                $actions[] = '<span class="install-now" title="' . esc_attr__( 'This theme is already installed and is up to date' ) . '">' . _x( 'Installed', 'theme' ) . '</span>';
     220                                break;
     221                }
    202222
    203223                $actions[] = '<a class="install-theme-preview" href="#" title="' . esc_attr( sprintf( __( 'Preview %s' ), $name ) ) . '">' . __( 'Preview' ) . '</a>';
     
    291311                ), self_admin_url( 'update.php' ) );
    292312
     313                $update_url = add_query_arg( array(
     314                        'action' => 'upgrade-theme',
     315                        'theme'  => $theme->slug,
     316                ), self_admin_url( 'update.php' ) );
     317
     318                $status = $this->_get_theme_status( $theme );
     319
    293320                ?>
    294                 <div class="install-theme-info">
    295                         <a class="theme-install button-primary" href="<?php echo wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ); ?>"><?php _e( 'Install' ); ?></a>
     321                <div class="install-theme-info"><?php
     322                        switch ( $status ) {
     323                                default:
     324                                case 'install':
     325                                        echo '<a class="theme-install button-primary" href="' . esc_url( wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ) ) . '">' . __( 'Install' ) . '</a>';
     326                                        break;
     327                                case 'update_available':
     328                                        echo '<a class="theme-install button-primary" href="' . esc_url( wp_nonce_url( $update_url, 'upgrade-theme_' . $theme->slug ) ) . '" title="' . esc_attr( sprintf( __( 'Update to version %s' ), $theme->version ) ) . '">' . __( 'Update' ) . '</a>';
     329                                        break;
     330                                case 'newer_installed':
     331                                case 'latest_installed':
     332                                        echo '<span class="theme-install" title="' . esc_attr__( 'This theme is already installed and is up to date' ) . '">' . _x( 'Installed', 'theme' ) . '</span>';
     333                                        break;
     334                        } ?>
    296335                        <h3 class="theme-name"><?php echo $name; ?></h3>
    297336                        <span class="theme-by"><?php printf( __( 'By %s' ), $author ); ?></span>
     
    329368                parent::_js_vars( compact( 'tab', 'type' ) );
    330369        }
     370
     371        /**
     372         * Check to see if the theme is already installed.
     373         *
     374         * @since 3.4
     375         * @access private
     376         *
     377         * @param object $theme - A WordPress.org Theme API object.
     378         * @return string Theme status.
     379         */
     380        private function _get_theme_status( $theme ) {
     381                $status = 'install';
     382
     383                $installed_theme = wp_get_theme( $theme->slug );
     384                if ( $installed_theme->exists() ) {
     385                        if ( version_compare( $installed_theme->get('Version'), $theme->version, '=' ) )
     386                                $status = 'latest_installed';
     387                        elseif ( version_compare( $installed_theme->get('Version'), $theme->version, '>' ) )
     388                                $status = 'newer_installed';
     389                        else
     390                                $status = 'update_available';
     391                }
     392
     393                return $status;
     394        }
    331395}
Note: See TracChangeset for help on using the changeset viewer.