Make WordPress Core


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/theme-install.php

    r14818 r17149  
    2020);
    2121
    22 
    23 /**
    24  * Retrieve theme installer pages from WordPress Themes API.
    25  *
    26  * It is possible for a theme to override the Themes API result with three
    27  * filters. Assume this is for themes, which can extend on the Theme Info to
    28  * offer more choices. This is very powerful and must be used with care, when
    29  * overridding the filters.
    30  *
    31  * The first filter, 'themes_api_args', is for the args and gives the action as
    32  * the second parameter. The hook for 'themes_api_args' must ensure that an
    33  * object is returned.
    34  *
    35  * The second filter, 'themes_api', is the result that would be returned.
    36  *
    37  * @since 2.8.0
    38  *
    39  * @param string $action
    40  * @param array|object $args Optional. Arguments to serialize for the Theme Info API.
    41  * @return mixed
    42  */
    43 function themes_api($action, $args = null) {
    44 
    45     if ( is_array($args) )
    46         $args = (object)$args;
    47 
    48     if ( !isset($args->per_page) )
    49         $args->per_page = 24;
    50 
    51     $args = apply_filters('themes_api_args', $args, $action); //NOTE: Ensure that an object is returned via this filter.
    52     $res = apply_filters('themes_api', false, $action, $args); //NOTE: Allows a theme to completely override the builtin WordPress.org API.
    53 
    54     if ( ! $res ) {
    55         $request = wp_remote_post('http://api.wordpress.org/themes/info/1.0/', array( 'body' => array('action' => $action, 'request' => serialize($args))) );
    56         if ( is_wp_error($request) ) {
    57             $res = new WP_Error('themes_api_failed', __('An Unexpected HTTP Error occured during the API request.</p> <p><a href="?" onclick="document.location.reload(); return false;">Try again</a>'), $request->get_error_message() );
    58         } else {
    59             $res = unserialize($request['body']);
    60             if ( ! $res )
    61             $res = new WP_Error('themes_api_failed', __('An unknown error occured'), $request['body']);
    62         }
    63     }
    64     //var_dump(array($args, $res));
    65     return apply_filters('themes_api_result', $res, $action, $args);
    66 }
    67 
    6822/**
    6923 * Retrieve list of WordPress theme features (aka theme tags)
    7024 *
    7125 * @since 2.8.0
     26 *
     27 * @deprecated since 3.1.0  Use get_theme_feature_list() instead.
    7228 *
    7329 * @return array
     
    8743
    8844    return $feature_list;
    89 }
    90 
    91 add_action('install_themes_search', 'install_theme_search', 10, 1);
    92 /**
    93  * Display theme search results
    94  *
    95  * @since 2.8.0
    96  *
    97  * @param string $page
    98  */
    99 function install_theme_search($page) {
    100     global $theme_field_defaults;
    101 
    102     $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : '';
    103     $term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : '';
    104 
    105     $args = array();
    106 
    107     switch( $type ){
    108         case 'tag':
    109             $terms = explode(',', $term);
    110             $terms = array_map('trim', $terms);
    111             $terms = array_map('sanitize_title_with_dashes', $terms);
    112             $args['tag'] = $terms;
    113             break;
    114         case 'term':
    115             $args['search'] = $term;
    116             break;
    117         case 'author':
    118             $args['author'] = $term;
    119             break;
    120     }
    121 
    122     $args['page'] = $page;
    123     $args['fields'] = $theme_field_defaults;
    124 
    125     if ( !empty( $_POST['features'] ) ) {
    126         $terms = $_POST['features'];
    127         $terms = array_map( 'trim', $terms );
    128         $terms = array_map( 'sanitize_title_with_dashes', $terms );
    129         $args['tag'] = $terms;
    130         $_REQUEST['s'] = implode( ',', $terms );
    131         $_REQUEST['type'] = 'tag';
    132     }
    133 
    134     $api = themes_api('query_themes', $args);
    135 
    136     if ( is_wp_error($api) )
    137         wp_die($api);
    138 
    139     add_action('install_themes_table_header', 'install_theme_search_form');
    140 
    141     display_themes($api->themes, $api->info['page'], $api->info['pages']);
    14245}
    14346
     
    15356<p class="install-help"><?php _e('Search for themes by keyword, author, or tag.') ?></p>
    15457
    155 <form id="search-themes" method="post" action="<?php echo admin_url( 'theme-install.php?tab=search' ); ?>">
     58<form id="search-themes" method="get" action="">
     59    <input type="hidden" name="tab" value="search" />
    15660    <select name="type" id="typeselector">
    15761    <option value="term" <?php selected('term', $type) ?>><?php _e('Term'); ?></option>
     
    16064    </select>
    16165    <input type="text" name="s" size="30" value="<?php echo esc_attr($term) ?>" />
    162     <input type="submit" name="search" value="<?php esc_attr_e('Search'); ?>" class="button" />
     66    <?php submit_button( __( 'Search' ), 'button', 'search', false ); ?>
    16367</form>
    16468<?php
    16569}
    16670
    167 add_action('install_themes_dashboard', 'install_themes_dashboard');
    16871/**
    16972 * Display tags filter for themes.
     
    17578?>
    17679<h4><?php _e('Feature Filter') ?></h4>
    177 <form method="post" action="<?php echo admin_url( 'theme-install.php?tab=search' ); ?>">
     80<form method="post" action="<?php echo self_admin_url( 'theme-install.php?tab=search' ); ?>">
    17881<p class="install-help"><?php _e('Find a theme based on specific features') ?></p>
    17982    <?php
    180     $feature_list = install_themes_feature_list( );
     83    $feature_list = get_theme_feature_list( );
    18184    echo '<div class="feature-filter">';
    182     $trans = array ('Colors' => __('Colors'), 'black' => __('Black'), 'blue' => __('Blue'), 'brown' => __('Brown'),
    183         'green' => __('Green'), 'orange' => __('Orange'), 'pink' => __('Pink'), 'purple' => __('Purple'), 'red' => __('Red'),
    184         'silver' => __('Silver'), 'tan' => __('Tan'), 'white' => __('White'), 'yellow' => __('Yellow'), 'dark' => __('Dark'),
    185         'light' => __('Light'), 'Columns' => __('Columns'), 'one-column' => __('One Column'), 'two-columns' => __('Two Columns'),
    186         'three-columns' => __('Three Columns'), 'four-columns' => __('Four Columns'), 'left-sidebar' => __('Left Sidebar'),
    187         'right-sidebar' => __('Right Sidebar'), 'Width' => __('Width'), 'fixed-width' => __('Fixed Width'), 'flexible-width' => __('Flexible Width'),
    188         'Features' => __('Features'), 'custom-colors' => __('Custom Colors'), 'custom-header' => __('Custom Header'), 'theme-options' => __('Theme Options'),
    189         'threaded-comments' => __('Threaded Comments'), 'sticky-post' => __('Sticky Post'), 'microformats' => __('Microformats'),
    190         'Subject' => __('Subject'), 'holiday' => __('Holiday'), 'photoblogging' => __('Photoblogging'), 'seasonal' => __('Seasonal'),
    191     );
    19285
    19386    foreach ( (array) $feature_list as $feature_name => $features ) {
    194         if ( isset($trans[$feature_name]) )
    195              $feature_name = $trans[$feature_name];
    19687        $feature_name = esc_html( $feature_name );
    19788        echo '<div class="feature-name">' . $feature_name . '</div>';
    19889
    199         echo '<ol style="float: left; width: 725px;" class="feature-group">';
    200         foreach ( $features as $feature ) {
    201             $feature_name = $feature;
    202             if ( isset($trans[$feature]) )
    203                 $feature_name = $trans[$feature];
     90        echo '<ol class="feature-group">';
     91        foreach ( $features as $feature => $feature_name ) {
    20492            $feature_name = esc_html( $feature_name );
    20593            $feature = esc_attr($feature);
     
    219107</div>
    220108<br class="clear" />
    221 <p><input type="submit" name="search" value="<?php esc_attr_e('Find Themes'); ?>" class="button" /></p>
     109<?php submit_button( __( 'Find Themes' ), 'button', 'search' ); ?>
    222110</form>
    223111<?php
    224112}
    225 
    226 add_action('install_themes_featured', 'install_themes_featured', 10, 1);
    227 /**
    228  * Display featured themes.
    229  *
    230  * @since 2.8.0
    231  *
    232  * @param string $page
    233  */
    234 function install_themes_featured($page = 1) {
    235     global $theme_field_defaults;
    236     $args = array('browse' => 'featured', 'page' => $page, 'fields' => $theme_field_defaults);
    237     $api = themes_api('query_themes', $args);
    238     if ( is_wp_error($api) )
    239         wp_die($api);
    240     display_themes($api->themes, $api->info['page'], $api->info['pages']);
    241 }
    242 
    243 add_action('install_themes_new', 'install_themes_new', 10, 1);
    244 /**
    245  * Display new themes/
    246  *
    247  * @since 2.8.0
    248  *
    249  * @param string $page
    250  */
    251 function install_themes_new($page = 1) {
    252     global $theme_field_defaults;
    253     $args = array('browse' => 'new', 'page' => $page, 'fields' => $theme_field_defaults);
    254     $api = themes_api('query_themes', $args);
    255     if ( is_wp_error($api) )
    256         wp_die($api);
    257     display_themes($api->themes, $api->info['page'], $api->info['pages']);
    258 }
    259 
    260 add_action('install_themes_updated', 'install_themes_updated', 10, 1);
    261 /**
    262  * Display recently updated themes.
    263  *
    264  * @since 2.8.0
    265  *
    266  * @param string $page
    267  */
    268 function install_themes_updated($page = 1) {
    269     global $theme_field_defaults;
    270     $args = array('browse' => 'updated', 'page' => $page, 'fields' => $theme_field_defaults);
    271     $api = themes_api('query_themes', $args);
    272     display_themes($api->themes, $api->info['page'], $api->info['pages']);
    273 }
    274 
    275 add_action('install_themes_upload', 'install_themes_upload', 10, 1);
     113add_action('install_themes_dashboard', 'install_themes_dashboard');
     114
    276115function install_themes_upload($page = 1) {
    277116?>
    278117<h4><?php _e('Install a theme in .zip format') ?></h4>
    279118<p class="install-help"><?php _e('If you have a theme in a .zip format, you may install it by uploading it here.') ?></p>
    280 <form method="post" enctype="multipart/form-data" action="<?php echo admin_url('update.php?action=upload-theme') ?>">
     119<form method="post" enctype="multipart/form-data" action="<?php echo self_admin_url('update.php?action=upload-theme') ?>">
    281120    <?php wp_nonce_field( 'theme-upload') ?>
    282121    <input type="file" name="themezip" />
    283     <input type="submit"
    284     class="button" value="<?php esc_attr_e('Install Now') ?>" />
     122    <?php submit_button( __( 'Install Now' ), 'button', 'install-theme-submit', false ); ?>
    285123</form>
    286124    <?php
    287125}
     126add_action('install_themes_upload', 'install_themes_upload', 10, 1);
    288127
    289128function display_theme($theme, $actions = null, $show_details = true) {
     
    301140    if ( !is_array($actions) ) {
    302141        $actions = array();
    303         $actions[] = '<a href="' . admin_url('theme-install.php?tab=theme-information&amp;theme=' . $theme->slug .
     142        $actions[] = '<a href="' . self_admin_url('theme-install.php?tab=theme-information&amp;theme=' . $theme->slug .
    304143                                        '&amp;TB_iframe=true&amp;tbWidth=500&amp;tbHeight=385') . '" class="thickbox thickbox-preview onclick" title="' . esc_attr(sprintf(__('Install &#8220;%s&#8221;'), $name)) . '">' . __('Install') . '</a>';
    305         $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview onclick previewlink" title="' . esc_attr(sprintf(__('Preview &#8220;%s&#8221;'), $name)) . '">' . __('Preview') . '</a>';
     144        if ( !is_network_admin() )
     145            $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview onclick previewlink" title="' . esc_attr(sprintf(__('Preview &#8220;%s&#8221;'), $name)) . '">' . __('Preview') . '</a>';
    306146        $actions = apply_filters('theme_install_action_links', $actions, $theme);
    307147    }
     
    361201 *
    362202 * @since 2.8.0
    363  *
    364  * @param array $themes List of themes.
    365  * @param string $page
    366  * @param int $totalpages Number of pages.
    367  */
    368 function display_themes($themes, $page = 1, $totalpages = 1) {
    369     $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : '';
    370     $term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : '';
    371     ?>
    372 <div class="tablenav">
    373 <div class="alignleft actions"><?php do_action('install_themes_table_header'); ?></div>
    374     <?php
    375     $url = esc_url($_SERVER['REQUEST_URI']);
    376     if ( ! empty($term) )
    377         $url = add_query_arg('s', $term, $url);
    378     if ( ! empty($type) )
    379         $url = add_query_arg('type', $type, $url);
    380 
    381     $page_links = paginate_links( array(
    382             'base' => add_query_arg('paged', '%#%', $url),
    383             'format' => '',
    384             'prev_text' => __('&laquo;'),
    385             'next_text' => __('&raquo;'),
    386             'total' => $totalpages,
    387             'current' => $page
    388     ));
    389 
    390     if ( $page_links )
    391         echo "\t\t<div class='tablenav-pages'>$page_links</div>";
    392     ?>
    393 </div>
    394 <br class="clear" />
    395 <?php
    396     if ( empty($themes) ) {
    397         _e('No themes found');
    398         return;
    399     }
    400 ?>
    401 <table id="availablethemes" cellspacing="0" cellpadding="0">
    402 <?php
    403     $rows = ceil(count($themes) / 3);
    404     $table = array();
    405     $theme_keys = array_keys($themes);
    406     for ( $row = 1; $row <= $rows; $row++ )
    407         for ( $col = 1; $col <= 3; $col++ )
    408             $table[$row][$col] = array_shift($theme_keys);
    409 
    410     foreach ( $table as $row => $cols ) {
    411     ?>
    412     <tr>
    413     <?php
    414 
    415     foreach ( $cols as $col => $theme_index ) {
    416         $class = array('available-theme');
    417         if ( $row == 1 ) $class[] = 'top';
    418         if ( $col == 1 ) $class[] = 'left';
    419         if ( $row == $rows ) $class[] = 'bottom';
    420         if ( $col == 3 ) $class[] = 'right';
    421         ?>
    422         <td class="<?php echo join(' ', $class); ?>"><?php
    423             if ( isset($themes[$theme_index]) )
    424                 display_theme($themes[$theme_index]);
    425         ?></td>
    426         <?php } // end foreach $cols ?>
    427     </tr>
    428     <?php } // end foreach $table ?>
    429 </table>
    430 
    431 <div class="tablenav"><?php if ( $page_links )
    432 echo "\t\t<div class='tablenav-pages'>$page_links</div>"; ?> <br
    433     class="clear" />
    434 </div>
    435 
    436 <?php
    437 }
    438 
    439 add_action('install_themes_pre_theme-information', 'install_theme_information');
     203 */
     204function display_themes() {
     205    global $wp_list_table;
     206
     207    $wp_list_table->display();
     208}
     209add_action('install_themes_search', 'display_themes');
     210add_action('install_themes_featured', 'display_themes');
     211add_action('install_themes_new', 'display_themes');
     212add_action('install_themes_updated', 'display_themes');
    440213
    441214/**
     
    516289case 'install':
    517290    if ( current_user_can('install_themes') ) :
    518     $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(admin_url('update.php?action=install-theme&theme=' . $api->slug), 'install-theme_' . $api->slug) . '" target="_parent">' . __('Install Now') . '</a>';
     291    $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(self_admin_url('update.php?action=install-theme&theme=' . $api->slug), 'install-theme_' . $api->slug) . '" target="_parent">' . __('Install Now') . '</a>';
    519292    endif;
    520293    break;
    521294case 'update_available':
    522295    if ( current_user_can('update_themes') ) :
    523     $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(admin_url('update.php?action=upgrade-theme&theme=' . $update_file), 'upgrade-theme_' . $update_file) . '" target="_parent">' . __('Install Update Now') . '</a>';
     296    $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(self_admin_url('update.php?action=upgrade-theme&theme=' . $update_file), 'upgrade-theme_' . $update_file) . '" target="_parent">' . __('Install Update Now') . '</a>';
    524297    endif;
    525298    break;
     
    547320    exit;
    548321}
     322add_action('install_themes_pre_theme-information', 'install_theme_information');
     323
Note: See TracChangeset for help on using the changeset viewer.