WordPress.org

Make WordPress Core

Ticket #6015: 6015.2.diff

File 6015.2.diff, 11.4 KB (added by DD32, 10 years ago)
  • wp-admin/includes/dashboard.php

     
    438438                else
    439439                        $slug = '';
    440440
    441                 $ilink = wp_nonce_url('plugin-install.php?tab=install-confirmation&plugin=' . $slug, 'install-plugin_' . $slug) .
     441                $ilink = wp_nonce_url('plugin-install.php?tab=plugin-information&plugin=' . $slug, 'install-plugin_' . $slug) .
    442442                                                        '&TB_iframe=true&width=600&height=800';
    443443
    444444                echo "<h4>$label</h4>\n";
  • wp-admin/includes/plugin-install.php

     
    11<?php
    22
    3 function plugins_api($action, $args = '') {
     3function plugins_api($action, $args = NULL) {
    44        global $wp_version;
    55
    66        if( is_array($args) )
    77                $args = (object)$args;
    88
    99        $args = apply_filters('plugins_api_args', $args, $action); //NOTE: Ensure that an object is returned via this filter.
    10         $res = apply_filters('plugins_api', false); //NOTE: Allows a plugin to completely override the builtin WordPress.org API.
     10        $res = apply_filters('plugins_api', false, $action, $args); //NOTE: Allows a plugin to completely override the builtin WordPress.org API.
    1111       
    1212        if ( ! $res ) {
    13                 $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array(), array(), http_build_query(array('action' => $action, 'request' => serialize($args))) );//Note: http_build_query() can be removed once WP_HTTP accepts unencoded data.
     13                $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array(), array(), array('action' => $action, 'request' => serialize($args)) );
    1414                $res = unserialize($request['body']);
    1515                if ( ! $res )
    1616                        wp_die($request['body']);
    1717        }
    1818
    19         return apply_filters('plugins_api_result', $res);
     19        return apply_filters('plugins_api_result', $res, $action, $args);
    2020}
    2121
    2222function install_popular_tags( $args = array() ) {
    23         if ( ! $cache = get_option('wporg_popular_tags') )
     23        if ( ! ($cache = wp_cache_get('popular_tags', 'api')) && ! ($cache = get_option('wporg_popular_tags')) )
    2424                add_option('wporg_popular_tags', array(), '', 'no');///No autoload.
    2525
    2626        if ( $cache && $cache->timeout + 3 * 60 * 60 > time() )
    2727                return $cache->cached;
    2828
    29         $tags = plugins_api('hot_tags');
     29        $tags = plugins_api('hot_tags', $args);
    3030
    31         update_option('wporg_popular_tags', (object) array('timeout' => time(), 'cached' => $tags));
     31        $cache = (object) array('timeout' => time(), 'cached' => $tags);
    3232
     33        update_option('wporg_popular_tags', $cache);
     34        wp_cache_set('popular_tags', $cache, 'api');
     35
    3336        return $tags;
    3437}
    3538
     
    236239
    237240function install_iframe_header($title = '') {
    238241if( empty($title) )
    239         $title = __('Plugin Install') . ' &#8212; ' . __('WordPress');
     242        $title = __('Plugin Install &#8212; WordPress');
    240243
    241 register_shutdown_function('install_iframe_footer'); //Do footer after content, Allows us to simply die or return at any point.
     244register_shutdown_function('install_iframe_footer'); //Do footer after content, Allows us to simply die or return at any point as may happen with error handlers
    242245
    243246?>
    244247<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    288291        foreach ( (array)$api->sections as $section_name => $content ) {
    289292       
    290293                $title = $section_name;
    291                 $title[0] = strtoupper($title[0]);
     294                $title[0] = strtoupper($title[0]); //Capitalize first character.
    292295                $title = str_replace('_', ' ', $title);
    293296
    294297                $class = ( $section_name == $section ) ? ' class="current"' : '';
     
    305308                <?php if ( ! empty($api->download_link) ) : ?>
    306309                <p class="action-button">
    307310                <?php
     311                        //Default to a "new" plugin
    308312                        $type = 'install';
    309                         if ( file_exists( WP_PLUGIN_DIR  . '/' . $api->slug ) ) { //TODO: Make more.. searchable?
    310                                 $type = 'latest_installed';
    311                                 $update_plugins = get_option('update_plugins');
    312                                 foreach ( (array)$update_plugins->response as $file => $plugin ) {
    313                                         if ( $plugin->slug === $api->slug ) {
    314                                                 $type = 'update_available';
    315                                                 $update_file = $file;
    316                                                 break;
    317                                         }
     313                        //Check to see if this plugin is known to be installed, and has an update awaiting it.
     314                        $update_plugins = get_option('update_plugins');
     315                        foreach ( (array)$update_plugins->response as $file => $plugin ) {
     316                                if ( $plugin->slug === $api->slug ) {
     317                                        $type = 'update_available';
     318                                        $update_file = $file;
     319                                        break;
    318320                                }
    319321                        }
     322                        if ( 'install' == $type && file_exists( WP_PLUGIN_DIR  . '/' . $api->slug ) ) //TODO: Make more.. searchable?
     323                                $type = 'latest_installed';
    320324
    321325                        switch ( $type ) :
    322326                                default:
     
    370374                </div>
    371375                <small><?php printf(__('(based on %d ratings)'), $api->num_ratings) ?></small>
    372376        </div>
     377        <div id="section-holder" class="wrap">
    373378                <?php
    374         echo "<div id='section-holder' class='wrap'>\n";
    375         foreach ( (array)$api->sections as $section_name => $content ) {
    376                 $title = $section_name;
    377                 $title[0] = strtoupper($title[0]);
    378                 $title = str_replace('_', ' ', $title);
    379                
    380                 $content = links_add_base_url($content, 'http://wordpress.org/extend/plugins/' . $api->slug . '/');
    381                 $content = links_add_target($content, '_blank');
    382                
    383                 $san_title = attribute_escape(sanitize_title_with_dashes($title));
    384                
    385                 $display = ( $section_name == $section ) ? 'block' : 'none';
    386                
    387                 echo "\t<div id='section-{$san_title}' style='display: {$display};'>\n";
    388                 echo "\t\t<h2 class='long-header'>$title</h2>";
    389                 echo $content;
    390                 echo "\t</div>\n";
    391         }
     379                foreach ( (array)$api->sections as $section_name => $content ) {
     380                        $title = $section_name;
     381                        $title[0] = strtoupper($title[0]);
     382                        $title = str_replace('_', ' ', $title);
     383                       
     384                        $content = links_add_base_url($content, 'http://wordpress.org/extend/plugins/' . $api->slug . '/');
     385                        $content = links_add_target($content, '_blank');
     386                       
     387                        $san_title = attribute_escape(sanitize_title_with_dashes($title));
     388                       
     389                        $display = ( $section_name == $section ) ? 'block' : 'none';
     390                       
     391                        echo "\t<div id='section-{$san_title}' style='display: {$display};'>\n";
     392                        echo "\t\t<h2 class='long-header'>$title</h2>";
     393                        echo $content;
     394                        echo "\t</div>\n";
     395                }
    392396        echo "</div>\n";
    393                
    394         //var_dump($api);
     397
    395398        exit;
    396399}
    397400
    398401add_action('install_plugins_pre_install', 'install_plugin');
    399402function install_plugin() {
    400403
    401         check_admin_referer('install-plugin_' . $_REQUEST['plugin']);
     404        $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
    402405
     406        check_admin_referer('install-plugin_' . $plugin);
     407
    403408        install_iframe_header();
    404409       
    405         $api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin'], 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth.
     410        $api = plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth.
    406411       
    407412        echo '<div class="wrap">';
    408413        echo '<h2>', sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ), '</h2>';
    409414
    410         do_plugin_install($api->download_link);
     415        do_plugin_install($api->download_link, $api);
    411416        echo '</div>';
    412417
    413418        exit;
    414419}
    415 function do_plugin_install($download_url = '') {
     420function do_plugin_install($download_url = '', $plugin_information = NULL) {
    416421        global $wp_filesystem;
    417422       
    418423        if ( empty($download_url) ) {
     
    425430        $url = 'plugin-install.php?tab=install';
    426431        $url = add_query_arg(array('plugin' => $plugin, 'plugin_name' => $_REQUEST['plugin_name'], 'download_url' => $_REQUEST['download_url']), $url);
    427432
    428         $url = wp_nonce_url($url, "install-plugin_$plugin");
     433        $url = wp_nonce_url($url, 'install-plugin_' . $plugin);
    429434        if ( false === ($credentials = request_filesystem_credentials($url)) )
    430435                return;
    431436
     
    446451                show_message($result);
    447452                show_message( __('Installation Failed') );
    448453        } else {
    449                 show_message( sprintf(__('Successfully installed the plugin <strong>%s %s</strong>.'), $plugin_information->name, $plugin_information->version) );     
     454                show_message( sprintf(__('Successfully installed the plugin <strong>%s %s</strong>.'), $plugin_information->name, $plugin_information->version) );
     455                $plugin_file = $result;
     456
     457                $install_actions = apply_filters('install_plugin_complete_actions', array(
     458                                                        'activate_plugin' => '<a href="' . wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $plugin_file, 'activate-plugin_' . $plugin_file) . '" title="' . __('Activate this plugin') . '" target="_parent">' . __('Activate Plugin') . '</a>',
     459                                                        'plugins_page' => '<a href="' . admin_url('plugins.php') . '" title="' . __('Goto plugins page') . '" target="_parent">' . __('Return to Plugins page') . '</a>',
     460                                                        'dismiss_dialog' => '<a href="' . admin_url('plugin-installer.php') . '" onclick="window.parent.tb_remove(); return false;" title="' . __('Dismiss Dialog') . '" target="_parent">' . __('Dismiss Dialog') . '</a>'
     461                                                        ), $plugin_information, $plugin_file);
     462
     463                echo '<p><strong>' . __('Actions:') . '</strong>' . implode(' | ', (array)$install_actions) . '</p>';
    450464        }
    451465}
    452466
     
    523537                return $result;
    524538        }
    525539
     540        //Get a list of the directories in the working directory before we delete it, We need to know the new folder for the plugin
     541        $filelist = array_keys( $wp_filesystem->dirlist($working_dir) );
     542
    526543        // Remove working directory
    527544        $wp_filesystem->delete($working_dir, true);
     545       
     546        if( empty($filelist) )
     547                return false; //We couldnt find any files in the working dir, therefor no plugin installed? Failsafe backup.
     548       
     549        $folder = $filelist[0];
     550        $plugin = get_plugins('/' . $folder); //Ensure to pass with leading slash
     551        $pluginfiles = array_keys($plugin); //Assume the requested plugin is the first in the list
    528552
     553        //Return the plugin files name.
     554        return  $folder . '/' . $pluginfiles[0];
    529555}
    530556
    531557
  • wp-admin/index.php

     
    2727add_action( 'admin_head', 'index_js' );
    2828
    2929wp_enqueue_script( 'jquery' );
    30 wp_enqueue_script( 'plugin-installer' );
     30wp_enqueue_script( 'plugin-install' );
    3131wp_admin_css( 'dashboard' );
    32 wp_admin_css( 'plugin-installer' );
     32wp_admin_css( 'plugin-install' );
    3333add_thickbox();
    3434
    3535$title = __('Dashboard');
  • wp-admin/plugin-install.php

     
    11<?php
    22require_once('admin.php');
    33
     4if ( ! current_user_can('install_plugins') )
     5        wp_die(__('You do not have sufficient permissions to install plugins on this blog.'));
     6
    47include(ABSPATH . 'wp-admin/includes/plugin-install.php');
    58
    69$title = __('Install Plugins');
    710$parent_file = 'plugins.php';
    811
    9 if ( ! current_user_can('install_plugins') )
    10         wp_die(__('You do not have sufficient permissions to install plugins on this blog.'));
    11 
    1212wp_reset_vars( array('tab', 'paged') );
    1313wp_enqueue_style( 'plugin-install' );
    1414wp_enqueue_script( 'plugin-install' );
  • wp-admin/plugins.php

     
    113113                                        <ul>
    114114                                                <?php
    115115                                                foreach( $plugin_info as $plugin )
    116                                                         echo '<li>', $plugin['Title'], ' ', __('By'), ' ', $plugin['Author'], '</li>';
     116                                                        echo '<li>', sprintf(__('%s by %s'), $plugin['Name'], $plugin['Author']), '</li>';
    117117                                                ?>
    118118                                        </ul>
    119119                                </p>