X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/449d082fcc4873c1f7d363a0d9f7409be7f6e77d..4f4e083f6f77639c41e2b1ddb200de8e34301cee:/wp-admin/includes/plugin-install.php diff --git a/wp-admin/includes/plugin-install.php b/wp-admin/includes/plugin-install.php index 57e24bd7..f81ecc82 100644 --- a/wp-admin/includes/plugin-install.php +++ b/wp-admin/includes/plugin-install.php @@ -40,12 +40,14 @@ function plugins_api($action, $args = null) { if ( ! $res ) { $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'body' => array('action' => $action, 'request' => serialize($args))) ); if ( is_wp_error($request) ) { - $res = new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occured during the API request.

Try again'), $request->get_error_message() ); + $res = new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occurred during the API request.

Try again'), $request->get_error_message() ); } else { $res = unserialize($request['body']); if ( ! $res ) - $res = new WP_Error('plugins_api_failed', __('An unknown error occured'), $request['body']); + $res = new WP_Error('plugins_api_failed', __('An unknown error occurred'), $request['body']); } + } elseif ( !is_wp_error($res) ) { + $res->external = true; } return apply_filters('plugins_api_result', $res, $action, $args); @@ -125,24 +127,11 @@ function install_dashboard() {

WordPress Plugin Directory or upload a plugin in .zip format via this page.') ?>

- ' . __('[need help?]') . '') ?> -
-


- Term: Searches plugins names and descriptions for the specified term') ?>
- Tag: Searches for plugins tagged as such') ?>
- Author: Searches for plugins created by the Author, or which the Author contributed to.') ?>

-
- -

-

-
- - - -
+

+

-

+

clean_url( admin_url('plugin-install.php?tab=search&type=tag&s=' . urlencode($tag['name'])) ), + 'link' => esc_url( admin_url('plugin-install.php?tab=search&type=tag&s=' . urlencode($tag['name'])) ), 'name' => $tag['name'], 'id' => sanitize_title_with_dashes($tag['name']), 'count' => $tag['count'] ); + echo '
'; } /** @@ -167,14 +158,15 @@ function install_search_form(){ $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : ''; $term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : ''; - ?>
+ ?> - - + + +
plugins, $api->info['page'], $api->info['pages']); } +add_action('install_plugins_upload', 'install_plugins_upload', 10, 1); +/** + * Upload from zip + * @since 2.8.0 + * + * @param string $page + */ +function install_plugins_upload( $page = 1 ) { +?> +

+

+
+ + + + +
+ array('href' => array(),'title' => array(), 'target' => array()), 'abbr' => array('title' => array()),'acronym' => array('title' => array()), - 'code' => array(), 'pre' => array(), 'em' => array(),'strong' => array()); + 'code' => array(), 'pre' => array(), 'em' => array(),'strong' => array(), + 'ul' => array(), 'ol' => array(), 'li' => array(), 'p' => array(), 'br' => array()); ?>
@@ -262,7 +275,7 @@ function display_plugins_table($plugins, $page = 1, $totalpages = 1){
400 ) + $description = mb_substr($description, 0, 400) . '…'; + //remove any trailing entities + $description = preg_replace('/&[^;\s]{0,6}$/', '', $description); + //strip leading/trailing & multiple consecutive lines + $description = trim($description); + $description = preg_replace("|(\r?\n)+|", "\n", $description); + //\n =>
+ $description = nl2br($description); $version = wp_kses($plugin['version'], $plugins_allowedtags); $name = strip_tags($title . ' ' . $version); @@ -325,12 +348,12 @@ function display_plugins_table($plugins, $page = 1, $totalpages = 1){ $author = wp_kses($author, $plugins_allowedtags); if( isset($plugin['homepage']) ) - $title = '' . $title . ''; + $title = '' . $title . ''; $action_links = array(); $action_links[] = '' . __('Install') . ''; + '&TB_iframe=true&width=600&height=550') . '" class="thickbox onclick" title="' . + esc_attr($name) . '">' . __('Install') . ''; $action_links = apply_filters('plugin_install_action_links', $action_links, $plugin); ?> @@ -338,8 +361,8 @@ function display_plugins_table($plugins, $page = 1, $totalpages = 1){ -
-
+
+
<?php _e('5 stars') ?>
<?php _e('4 stars') ?>
<?php _e('3 stars') ?>
@@ -347,7 +370,7 @@ function display_plugins_table($plugins, $page = 1, $totalpages = 1){
<?php _e('1 star') ?>
-

+ $tab, 'section' => $section_name) ); - $href = clean_url($href); - $san_title = attribute_escape(sanitize_title_with_dashes($title)); + $href = esc_url($href); + $san_title = esc_attr(sanitize_title_with_dashes($title)); echo "\t
  • $title
  • \n"; } echo "\n"; @@ -420,26 +443,28 @@ function install_plugin_information() { //Default to a "new" plugin $type = 'install'; //Check to see if this plugin is known to be installed, and has an update awaiting it. - $update_plugins = get_option('update_plugins'); - foreach ( (array)$update_plugins->response as $file => $plugin ) { - if ( $plugin->slug === $api->slug ) { - $type = 'update_available'; - $update_file = $file; - break; + $update_plugins = get_transient('update_plugins'); + if ( is_object( $update_plugins ) ) { + foreach ( (array)$update_plugins->response as $file => $plugin ) { + if ( $plugin->slug === $api->slug ) { + $type = 'update_available'; + $update_file = $file; + break; + } } } if ( 'install' == $type && is_dir( WP_PLUGIN_DIR . '/' . $api->slug ) ) { $installed_plugin = get_plugins('/' . $api->slug); if ( ! empty($installed_plugin) ) { $key = array_shift( $key = array_keys($installed_plugin) ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers - if ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '>') ){ + if ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '=') ){ $type = 'latest_installed'; } elseif ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '<') ) { $type = 'newer_installed'; $newer_version = $installed_plugin[ $key ]['Version']; } else { //If the above update check failed, Then that probably means that the update checker has out-of-date information, force a refresh - delete_option('update_plugins'); + delete_transient('update_plugins'); $update_file = $api->slug . '/' . $key; //This code branch only deals with a plugin which is in a folder the same name as its slug, Doesnt support plugins which have 'non-standard' names $type = 'update_available'; } @@ -450,7 +475,7 @@ function install_plugin_information() { default: case 'install': if ( current_user_can('install_plugins') ) : - ?>tested) ) : ?>
  • tested ?>
  • downloaded) ) : ?> -
  • downloaded), number_format_i18n($api->downloaded)) ?>
  • -slug) ) : ?> +
  • downloaded), number_format_i18n($api->downloaded)) ?>
  • +slug) && empty($api->external) ) : ?>
  • homepage) ) : ?>
  • + rating) ) : ?>

    -
    -
    +
    +
    <?php _e('5 stars') ?>
    <?php _e('4 stars') ?>
    <?php _e('3 stars') ?>
    <?php _e('2 stars') ?>
    <?php _e('1 star') ?>
    - num_ratings), number_format_i18n($api->num_ratings)); ?> + num_ratings), number_format_i18n($api->num_ratings)); ?> +
    tested, '>') ) + if ( !empty($api->tested) && version_compare( substr($GLOBALS['wp_version'], 0, strlen($api->tested)), $api->tested, '>') ) echo '

    ' . __('Warning: This plugin has not been tested with your current version of WordPress.') . '

    '; - else if ( version_compare($GLOBALS['wp_version'], $api->requires, '<') ) - echo '

    ' . __('Warning: This plugin has not been marked as compatible with your version of WordPress.') . '

    '; + + else if ( !empty($api->requires) && version_compare( substr($GLOBALS['wp_version'], 0, strlen($api->requires)), $api->requires, '<') ) + echo '

    ' . __('Warning: This plugin has not been marked as compatible with your version of WordPress.') . '

    '; + foreach ( (array)$api->sections as $section_name => $content ) { $title = $section_name; $title[0] = strtoupper($title[0]); @@ -517,7 +546,7 @@ function install_plugin_information() { $content = links_add_base_url($content, 'http://wordpress.org/extend/plugins/' . $api->slug . '/'); $content = links_add_target($content, '_blank'); - $san_title = attribute_escape(sanitize_title_with_dashes($title)); + $san_title = esc_attr(sanitize_title_with_dashes($title)); $display = ( $section_name == $section ) ? 'block' : 'none'; @@ -531,364 +560,3 @@ function install_plugin_information() { iframe_footer(); exit; } - - -add_action('install_plugins_upload', 'upload_plugin'); -function upload_plugin() { - - if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) ) - wp_die($uploads['error']); - - if ( !empty($_FILES) ) - $filename = $_FILES['pluginzip']['name']; - else if ( isset($_GET['package']) ) - $filename = $_GET['package']; - - check_admin_referer('plugin-upload'); - - echo '
    '; - echo '

    ', sprintf( __('Installing Plugin from file: %s'), basename($filename) ), '

    '; - - //Handle a newly uploaded file, Else assume it was - if ( !empty($_FILES) ) { - $filename = wp_unique_filename( $uploads['basedir'], $filename ); - $local_file = $uploads['basedir'] . '/' . $filename; - - // Move the file to the uploads dir - if ( false === @ move_uploaded_file( $_FILES['pluginzip']['tmp_name'], $local_file) ) - wp_die( sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'])); - } else { - $local_file = $uploads['basedir'] . '/' . $filename; - } - - do_plugin_install_local_package($local_file, $filename); - echo '
    '; -} - -add_action('install_plugins_install', 'install_plugin'); - -/** - * Display plugin link and execute install. - * - * @since 2.7.0 - */ -function install_plugin() { - - $plugin = isset($_REQUEST['plugin']) ? stripslashes( $_REQUEST['plugin'] ) : ''; - - check_admin_referer('install-plugin_' . $plugin); - $api = plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth. - - if ( is_wp_error($api) ) - wp_die($api); - - echo '
    '; - echo '

    ', sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ), '

    '; - - do_plugin_install($api->download_link, $api); - echo '
    '; - -} - -/** - * Retrieve plugin and install. - * - * @since 2.7.0 - * - * @param string $download_url Download URL. - * @param object $plugin_information Optional. Plugin information - */ -function do_plugin_install($download_url, $plugin_information = null) { - global $wp_filesystem; - - if ( empty($download_url) ) { - show_message( __('No plugin Specified') ); - return; - } - - $plugin = isset($_REQUEST['plugin']) ? stripslashes( $_REQUEST['plugin'] ) : ''; - - $url = 'plugin-install.php?tab=install'; - $url = add_query_arg(array('plugin' => $plugin, 'plugin_name' => stripslashes( $_REQUEST['plugin_name'] ), 'download_url' => stripslashes( $_REQUEST['download_url'] ) ), $url); - - $url = wp_nonce_url($url, 'install-plugin_' . $plugin); - if ( false === ($credentials = request_filesystem_credentials($url)) ) - return; - - if ( ! WP_Filesystem($credentials) ) { - request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again - return; - } - - if ( $wp_filesystem->errors->get_error_code() ) { - foreach ( $wp_filesystem->errors->get_error_messages() as $message ) - show_message($message); - return; - } - - $result = wp_install_plugin( $download_url, 'show_message' ); - - if ( is_wp_error($result) ) { - show_message($result); - show_message( __('Installation Failed') ); - } else { - show_message( sprintf(__('Successfully installed the plugin %s %s.'), $plugin_information->name, $plugin_information->version) ); - $plugin_file = $result; - - $install_actions = apply_filters('install_plugin_complete_actions', array( - 'activate_plugin' => '' . __('Activate Plugin') . '', - 'plugins_page' => '' . __('Return to Plugins page') . '' - ), $plugin_information, $plugin_file); - if ( ! empty($install_actions) ) - show_message('' . __('Actions:') . ' ' . implode(' | ', (array)$install_actions)); - } -} - -/** - * Install a plugin from a local file. - * - * @since 2.7.0 - * - * @param string $package Local Plugin zip - * @param string $filename Optional. Original filename - * @param object $plugin_information Optional. Plugin information - */ -function do_plugin_install_local_package($package, $filename = '') { - global $wp_filesystem; - - if ( empty($package) ) { - show_message( __('No plugin Specified') ); - return; - } - - if ( empty($filename) ) - $filename = basename($package); - - $url = 'plugin-install.php?tab=upload'; - $url = add_query_arg(array('package' => $filename), $url); - - $url = wp_nonce_url($url, 'plugin-upload'); - if ( false === ($credentials = request_filesystem_credentials($url)) ) - return; - - if ( ! WP_Filesystem($credentials) ) { - request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again - return; - } - - if ( $wp_filesystem->errors->get_error_code() ) { - foreach ( $wp_filesystem->errors->get_error_messages() as $message ) - show_message($message); - return; - } - - $result = wp_install_plugin_local_package( $package, 'show_message' ); - - if ( is_wp_error($result) ) { - show_message($result); - show_message( __('Installation Failed') ); - } else { - show_message( __('Successfully installed the plugin.') ); - $plugin_file = $result; - - $install_actions = apply_filters('install_plugin_complete_actions', array( - 'activate_plugin' => '' . __('Activate Plugin') . '', - 'plugins_page' => '' . __('Return to Plugins page') . '' - ), array(), $plugin_file); - if ( ! empty($install_actions) ) - show_message('' . __('Actions:') . ' ' . implode(' | ', (array)$install_actions)); - } -} - -/** - * Install plugin. - * - * @since 2.7.0 - * - * @param string $package - * @param string $feedback Optional. - * @return mixed. - */ -function wp_install_plugin($package, $feedback = '') { - global $wp_filesystem; - - if ( !empty($feedback) ) - add_filter('install_feedback', $feedback); - - // Is a filesystem accessor setup? - if ( ! $wp_filesystem || ! is_object($wp_filesystem) ) - WP_Filesystem(); - - if ( ! is_object($wp_filesystem) ) - return new WP_Error('fs_unavailable', __('Could not access filesystem.')); - - if ( $wp_filesystem->errors->get_error_code() ) - return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors); - - //Get the base plugin folder - $plugins_dir = $wp_filesystem->wp_plugins_dir(); - if ( empty($plugins_dir) ) - return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.')); - - //And the same for the Content directory. - $content_dir = $wp_filesystem->wp_content_dir(); - if( empty($content_dir) ) - return new WP_Error('fs_no_content_dir', __('Unable to locate WordPress Content directory (wp-content).')); - - $plugins_dir = trailingslashit( $plugins_dir ); - $content_dir = trailingslashit( $content_dir ); - - if ( empty($package) ) - return new WP_Error('no_package', __('Install package not available.')); - - // Download the package - apply_filters('install_feedback', sprintf(__('Downloading plugin package from %s'), $package)); - $download_file = download_url($package); - - if ( is_wp_error($download_file) ) - return new WP_Error('download_failed', __('Download failed.'), $download_file->get_error_message()); - - $working_dir = $content_dir . 'upgrade/' . basename($package, '.zip'); - - // Clean up working directory - if ( $wp_filesystem->is_dir($working_dir) ) - $wp_filesystem->delete($working_dir, true); - - apply_filters('install_feedback', __('Unpacking the plugin package')); - // Unzip package to working directory - $result = unzip_file($download_file, $working_dir); - - // Once extracted, delete the package - @unlink($download_file); - - if ( is_wp_error($result) ) { - $wp_filesystem->delete($working_dir, true); - return $result; - } - - //Get a list of the directories in the working directory before we delete it, We need to know the new folder for the plugin - $filelist = array_keys( $wp_filesystem->dirlist($working_dir) ); - - if( $wp_filesystem->exists( $plugins_dir . $filelist[0] ) ) { - $wp_filesystem->delete($working_dir, true); - return new WP_Error('install_folder_exists', __('Folder already exists.'), $filelist[0] ); - } - - apply_filters('install_feedback', __('Installing the plugin')); - // Copy new version of plugin into place. - $result = copy_dir($working_dir, $plugins_dir); - if ( is_wp_error($result) ) { - $wp_filesystem->delete($working_dir, true); - return $result; - } - - //Get a list of the directories in the working directory before we delete it, We need to know the new folder for the plugin - $filelist = array_keys( $wp_filesystem->dirlist($working_dir) ); - - // Remove working directory - $wp_filesystem->delete($working_dir, true); - - if( empty($filelist) ) - return false; //We couldnt find any files in the working dir, therefor no plugin installed? Failsafe backup. - - $folder = $filelist[0]; - $plugin = get_plugins('/' . $folder); //Ensure to pass with leading slash - $pluginfiles = array_keys($plugin); //Assume the requested plugin is the first in the list - - //Return the plugin files name. - return $folder . '/' . $pluginfiles[0]; -} - -/** - * Install plugin from local package - * - * @since 2.7.0 - * - * @param string $package - * @param string $feedback Optional. - * @return mixed. - */ -function wp_install_plugin_local_package($package, $feedback = '') { - global $wp_filesystem; - - if ( !empty($feedback) ) - add_filter('install_feedback', $feedback); - - // Is a filesystem accessor setup? - if ( ! $wp_filesystem || ! is_object($wp_filesystem) ) - WP_Filesystem(); - - if ( ! is_object($wp_filesystem) ) - return new WP_Error('fs_unavailable', __('Could not access filesystem.')); - - if ( $wp_filesystem->errors->get_error_code() ) - return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors); - - //Get the base plugin folder - $plugins_dir = $wp_filesystem->wp_plugins_dir(); - if ( empty($plugins_dir) ) - return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.')); - - //And the same for the Content directory. - $content_dir = $wp_filesystem->wp_content_dir(); - if( empty($content_dir) ) - return new WP_Error('fs_no_content_dir', __('Unable to locate WordPress Content directory (wp-content).')); - - $plugins_dir = trailingslashit( $plugins_dir ); - $content_dir = trailingslashit( $content_dir ); - - if ( empty($package) ) - return new WP_Error('no_package', __('Install package not available.')); - - $working_dir = $content_dir . 'upgrade/' . basename($package, '.zip'); - - // Clean up working directory - if ( $wp_filesystem->is_dir($working_dir) ) - $wp_filesystem->delete($working_dir, true); - - apply_filters('install_feedback', __('Unpacking the plugin package')); - // Unzip package to working directory - $result = unzip_file($package, $working_dir); - - // Once extracted, delete the package - unlink($package); - - if ( is_wp_error($result) ) { - $wp_filesystem->delete($working_dir, true); - return $result; - } - - //Get a list of the directories in the working directory before we delete it, We need to know the new folder for the plugin - $filelist = array_keys( $wp_filesystem->dirlist($working_dir) ); - - if( $wp_filesystem->exists( $plugins_dir . $filelist[0] ) ) { - $wp_filesystem->delete($working_dir, true); - return new WP_Error('install_folder_exists', __('Folder already exists.'), $filelist[0] ); - } - - apply_filters('install_feedback', __('Installing the plugin')); - // Copy new version of plugin into place. - $result = copy_dir($working_dir, $plugins_dir); - if ( is_wp_error($result) ) { - $wp_filesystem->delete($working_dir, true); - return $result; - } - - //Get a list of the directories in the working directory before we delete it, We need to know the new folder for the plugin - $filelist = array_keys( $wp_filesystem->dirlist($working_dir) ); - - // Remove working directory - $wp_filesystem->delete($working_dir, true); - - if( empty($filelist) ) - return false; //We couldnt find any files in the working dir, therefor no plugin installed? Failsafe backup. - - $folder = $filelist[0]; - $plugin = get_plugins('/' . $folder); //Ensure to pass with leading slash - $pluginfiles = array_keys($plugin); //Assume the requested plugin is the first in the list - - //Return the plugin files name. - return $folder . '/' . $pluginfiles[0]; -} - -?>