diff --git a/wp-admin/css/plugin-install.css b/wp-admin/css/plugin-install.css
index 1bd75c79f..af0bd334f 100644
--- a/wp-admin/css/plugin-install.css
+++ b/wp-admin/css/plugin-install.css
@@ -1,122 +1,122 @@
-/* NOTE: the following CSS rules(.star*) are taken more or less straight from the bbPress rating plugin. */
-div.star-holder {
- position: relative;
- height: 19px;
- width: 100px;
- font-size: 19px;
-}
-div.star {
- height: 100%;
- position: absolute;
- top: 0px;
- left: 0px;
- background-color: transparent;
- letter-spacing: 1ex;
- border: none;
-}
-div.star.select:hover { background-color: #d00; }
-.star1 { width: 20%; }
-.star2 { width: 40%; }
-.star3 { width: 60%; }
-.star4 { width: 80%; }
-.star5 { width: 100%; }
-.star-average, .star.star-rating { background-color: #fc0; } /* TODO: Colour CSS file */
-.star img, div.star a, div.star a:hover, div.star a:visited {
- display: block;
- position: absolute;
- right: 0px;
- border: none;
- text-decoration: none;
-}
-div.star img {
- width: 19px;
- height: 19px;
- border-left: 1px solid #fff;
- border-right: 1px solid #fff;
-}
-
-/* Start custom CSS */
-/* TODO: Move remaining colours to Colours CSS */
-/* Header on thickbox */
-#plugin-information-header {
- margin: 0;
- padding: 0 5px;
- font-weight: bold;
- position: relative;
- border-bottom-width: 1px;
- border-bottom-style: solid;
- height: 2.5em;
-}
-#plugin-information ul#sidemenu {
- font-weight: normal;
- margin: 0 5px;
- position: absolute;
- left: 0px;
- bottom: -1px;
-}
-
-/* Install sidemenu */
-
-#plugin-information p.action-button {
- width: 100%;
- padding-bottom:0;
- margin-bottom:0;
- margin-top: 10px;
-}
-
-#plugin-information .action-button a {
- text-align: center;
- font-weight: bold;
- text-decoration: none;
- display: block;
- line-height: 2em;
-}
-
-#plugin-information h2 {
- clear: none !important;
- margin-right: 200px;
-}
-
-#plugin-information .fyi {
- margin-left: 10px;
- margin-bottom: 50px;
- width: 210px;
-}
-
-#plugin-information .fyi h2 {
- font-size: 0.9em;
- margin-bottom: 0px;
- margin-right: 0px;
-}
-
-#plugin-information .fyi h2.mainheader {
- background-color: #cee1ef; /* TODO: Colour CSS file */
- padding: 5px;
-}
-
-#plugin-information .fyi ul {
- background-color: #eaf3fa; /* TODO: Colour CSS file */
- padding-top: 10px;
- padding-bottom: 10px;
- padding-left: 7px;
- padding-right: 5px;
- margin: 0px;
- list-style: none;
-}
-
-#plugin-information .fyi li {
- margin-right: 0px;
-}
-
-#plugin-information #section-holder {
- padding: 10px;
-}
-
-#plugin-information #section-screenshots li img {
- vertical-align: text-top;
-}
-#plugin-information #section-screenshots li p {
- font-style: italic;
- padding-left: 20px;
- padding-bottom: 2em;
+/* NOTE: the following CSS rules(.star*) are taken more or less straight from the bbPress rating plugin. */
+div.star-holder {
+ position: relative;
+ height: 19px;
+ width: 100px;
+ font-size: 19px;
+}
+div.star {
+ height: 100%;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ background-color: transparent;
+ letter-spacing: 1ex;
+ border: none;
+}
+div.star.select:hover { background-color: #d00; }
+.star1 { width: 20%; }
+.star2 { width: 40%; }
+.star3 { width: 60%; }
+.star4 { width: 80%; }
+.star5 { width: 100%; }
+.star-average, .star.star-rating { background-color: #fc0; } /* TODO: Colour CSS file */
+.star img, div.star a, div.star a:hover, div.star a:visited {
+ display: block;
+ position: absolute;
+ right: 0px;
+ border: none;
+ text-decoration: none;
+}
+div.star img {
+ width: 19px;
+ height: 19px;
+ border-left: 1px solid #fff;
+ border-right: 1px solid #fff;
+}
+
+/* Start custom CSS */
+/* TODO: Move remaining colours to Colours CSS */
+/* Header on thickbox */
+#plugin-information-header {
+ margin: 0;
+ padding: 0 5px;
+ font-weight: bold;
+ position: relative;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+ height: 2.5em;
+}
+#plugin-information ul#sidemenu {
+ font-weight: normal;
+ margin: 0 5px;
+ position: absolute;
+ left: 0px;
+ bottom: -1px;
+}
+
+/* Install sidemenu */
+
+#plugin-information p.action-button {
+ width: 100%;
+ padding-bottom:0;
+ margin-bottom:0;
+ margin-top: 10px;
+}
+
+#plugin-information .action-button a {
+ text-align: center;
+ font-weight: bold;
+ text-decoration: none;
+ display: block;
+ line-height: 2em;
+}
+
+#plugin-information h2 {
+ clear: none !important;
+ margin-right: 200px;
+}
+
+#plugin-information .fyi {
+ margin-left: 10px;
+ margin-bottom: 50px;
+ width: 210px;
+}
+
+#plugin-information .fyi h2 {
+ font-size: 0.9em;
+ margin-bottom: 0px;
+ margin-right: 0px;
+}
+
+#plugin-information .fyi h2.mainheader {
+ background-color: #cee1ef; /* TODO: Colour CSS file */
+ padding: 5px;
+}
+
+#plugin-information .fyi ul {
+ background-color: #eaf3fa; /* TODO: Colour CSS file */
+ padding-top: 10px;
+ padding-bottom: 10px;
+ padding-left: 7px;
+ padding-right: 5px;
+ margin: 0px;
+ list-style: none;
+}
+
+#plugin-information .fyi li {
+ margin-right: 0px;
+}
+
+#plugin-information #section-holder {
+ padding: 10px;
+}
+
+#plugin-information #section-screenshots li img {
+ vertical-align: text-top;
+}
+#plugin-information #section-screenshots li p {
+ font-style: italic;
+ padding-left: 20px;
+ padding-bottom: 2em;
}
\ No newline at end of file
diff --git a/wp-admin/includes/plugin-install.php b/wp-admin/includes/plugin-install.php
index d80d89b11..1fddfb9a6 100644
--- a/wp-admin/includes/plugin-install.php
+++ b/wp-admin/includes/plugin-install.php
@@ -1,532 +1,532 @@
- $action, 'request' => serialize($args))) );//Note: http_build_query() can be removed once WP_HTTP accepts unencoded data.
- $res = unserialize($request['body']);
- if ( ! $res )
- wp_die($request['body']);
- }
-
- return apply_filters('plugins_api_result', $res);
-}
-
-function install_popular_tags( $args = array() ) {
- if ( ! $cache = get_option('wporg_popular_tags') )
- add_option('wporg_popular_tags', array(), '', 'no');///No autoload.
-
- if ( $cache && $cache->timeout + 3 * 60 * 60 > time() )
- return $cache->cached;
-
- $tags = plugins_api('hot_tags');
-
- update_option('wporg_popular_tags', (object) array('timeout' => time(), 'cached' => $tags));
-
- return $tags;
-}
-
-add_action('install_plugins_search', 'install_search', 10, 1);
-function install_search($page) {
- $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
- $term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
-
- if( ! empty($term) ){
- $args = array();
-
- switch( $type ){
- case 'tag':
- $args['tag'] = sanitize_title_with_dashes($term);
- break;
- case 'term':
- $args['search'] = $term;
- break;
- case 'author':
- $args['author'] = $term;
- break;
- }
-
- $args['page'] = $page;
-
- $api = plugins_api('query_plugins', $args);
-
- add_action('install_plugins_table_header', 'install_search_form');
-
- display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
-
- return;
- }
- ?>
-
-
WordPress Plugin Directory via this page.') ?>
-
-
-
-
- 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'])) ),
- 'name' => $tag['name'],
- 'count' => $tag['count'] );
- echo wp_generate_tag_cloud($tags, array( 'single_text' => __('%d plugin'), 'multiple_text' => __('%d plugins') ) );
-}
-
-function install_search_form(){
- $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
- $term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
-
- ?> 'featured', 'page' => $page);
- $api = plugins_api('query_plugins', $args);
- display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
-}
-add_action('install_plugins_popular', 'install_popular', 10, 1);
-function install_popular($page){
- $args = array('browse' => 'popular', 'page' => $page);
- $api = plugins_api('query_plugins', $args);
- display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
-}
-add_action('install_plugins_new', 'install_new', 10, 1);
-function install_new($page){
- $args = array('browse' => 'new', 'page' => $page);
- $api = plugins_api('query_plugins', $args);
- display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
-}
-add_action('install_plugins_updated', 'install_updated', 10, 1);
-function install_updated($page){
- $args = array('browse' => 'updated', 'page' => $page);
- $api = plugins_api('query_plugins', $args);
- display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
-}
-add_action('install_plugins_upload', 'install_upload_custom', 10, 1);
-function install_upload_custom($page){
- //$args = array('browse' => 'updated', 'page' => $page);
- //$api = plugins_api('query_plugins', $args);
- //display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
- echo 'Not Implemented
Will utilise SwfUpload(if available) & unzip .zip plugin packages
';
-}
-
-function display_plugins_table($plugins, $page = 1, $totalpages = 1){
- global $tab;
-
- $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
- $term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
-
- $plugins_allowedtags = array('a' => array('href' => array(),'title' => array(), 'target' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
-
-?>
-
-
-
-
- add_query_arg('paged', '%#%', $url),
- 'format' => '',
- 'total' => $totalpages,
- 'current' => $page
- ));
-
- if ( $page_links )
- echo "\t\t
$page_links
";
-?>
-
-
-
-
-
- |
- |
- |
- |
- |
-
-
-
- ', __('No plugins match your request.'), ' | ';
-
- foreach( (array) $plugins as $plugin ){
- if ( is_object($plugin) )
- $plugin = (array) $plugin;
-
- $title = wp_kses($plugin['name'], $plugins_allowedtags);
- $description = wp_kses($plugin['description'], $plugins_allowedtags);
- $version = wp_kses($plugin['version'], $plugins_allowedtags);
-
- $name = strip_tags($title . ' ' . $version);
-
- $author = $plugin['author'];
- if( ! empty($plugin['author']) )
- $author = ' ' . sprintf( __('By %s'), $author ) . '.';
-
- $author = wp_kses($author, $plugins_allowedtags);
-
- if( isset($plugin['homepage']) )
- $title = '' . $title . '';
-
- $action_links = array();
- $action_links[] = '' . __('Install') . '';
-
- $action_links = apply_filters('plugin_install_action_links', $action_links, $plugin);
- ?>
-
- |
- |
-
-
- |
- |
- |
-
-
-
-
-
-
- >
-
-
- ›
-
-
-
-
->
-
-';
-}
-
-add_action('install_plugins_pre_plugin-information', 'install_plugin_information');
-function install_plugin_information() {
- global $tab;
-
- $api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin']));
-
- $section = isset($_REQUEST['section']) ? $_REQUEST['section'] : 'description'; //Default to the Description tab, Do not translate, API returns English.
- if( empty($section) || ! isset($api->sections[ $section ]) )
- $section = array_shift( $section_titles = array_keys((array)$api->sections) );
-
- install_iframe_header();
- echo "\n";
-
- ?>
-
- download_link) ) : ?>
-
- slug ) ) { //TODO: Make more.. searchable?
- $type = 'latest_installed';
- $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;
- }
- }
- }
-
- switch ( $type ) :
- default:
- case 'install':
- if ( current_user_can('install_plugins') ) :
- ?>
-
-
-
-
-version) ) : ?>
- - version ?>
-author) ) : ?>
- - author, '_blank') ?>
-last_updated) ) : ?>
- - last_updated)) ) ?>
-requires) ) : ?>
- - requires) ?>
-tested) ) : ?>
- - tested ?>
-downloaded) ) : ?>
- - downloaded)) ?>
-slug) ) : ?>
-
-homepage) ) : ?>
-
-
-
-
-
-
num_ratings) ?>
-
- \n";
- foreach ( (array)$api->sections as $section_name => $content ) {
- $title = $section_name;
- $title[0] = strtoupper($title[0]);
- $title = str_replace('_', ' ', $title);
-
- $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));
-
- $display = ( $section_name == $section ) ? 'block' : 'none';
-
- echo "\t\n";
- echo "\t\t";
- echo $content;
- echo "\t
\n";
- }
- echo "\n";
-
- //var_dump($api);
- exit;
-}
-
-add_action('install_plugins_pre_install', 'install_plugin');
-function install_plugin() {
-
- check_admin_referer('install-plugin_' . $_REQUEST['plugin']);
-
- install_iframe_header();
-
- $api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin'], 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth.
-
- echo '';
- echo '
', sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ), '
';
-
- do_plugin_install($api->download_link);
- echo '';
-
- exit;
-}
-function do_plugin_install($download_url = '') {
- global $wp_filesystem;
-
- if ( empty($download_url) ) {
- show_message( __('No plugin Specified') );
- return;
- }
-
- $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
-
- $url = 'plugin-install.php?tab=install';
- $url = add_query_arg(array('plugin' => $plugin, 'plugin_name' => $_REQUEST['plugin_name'], 'download_url' => $_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) );
- }
-}
-
-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 allready 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;
- }
-
- // Remove working directory
- $wp_filesystem->delete($working_dir, true);
-
-}
-
-
+ $action, 'request' => serialize($args))) );//Note: http_build_query() can be removed once WP_HTTP accepts unencoded data.
+ $res = unserialize($request['body']);
+ if ( ! $res )
+ wp_die($request['body']);
+ }
+
+ return apply_filters('plugins_api_result', $res);
+}
+
+function install_popular_tags( $args = array() ) {
+ if ( ! $cache = get_option('wporg_popular_tags') )
+ add_option('wporg_popular_tags', array(), '', 'no');///No autoload.
+
+ if ( $cache && $cache->timeout + 3 * 60 * 60 > time() )
+ return $cache->cached;
+
+ $tags = plugins_api('hot_tags');
+
+ update_option('wporg_popular_tags', (object) array('timeout' => time(), 'cached' => $tags));
+
+ return $tags;
+}
+
+add_action('install_plugins_search', 'install_search', 10, 1);
+function install_search($page) {
+ $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
+ $term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
+
+ if( ! empty($term) ){
+ $args = array();
+
+ switch( $type ){
+ case 'tag':
+ $args['tag'] = sanitize_title_with_dashes($term);
+ break;
+ case 'term':
+ $args['search'] = $term;
+ break;
+ case 'author':
+ $args['author'] = $term;
+ break;
+ }
+
+ $args['page'] = $page;
+
+ $api = plugins_api('query_plugins', $args);
+
+ add_action('install_plugins_table_header', 'install_search_form');
+
+ display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
+
+ return;
+ }
+ ?>
+
+ WordPress Plugin Directory via this page.') ?>
+
+
+
+
+ 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'])) ),
+ 'name' => $tag['name'],
+ 'count' => $tag['count'] );
+ echo wp_generate_tag_cloud($tags, array( 'single_text' => __('%d plugin'), 'multiple_text' => __('%d plugins') ) );
+}
+
+function install_search_form(){
+ $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
+ $term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
+
+ ?> 'featured', 'page' => $page);
+ $api = plugins_api('query_plugins', $args);
+ display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
+}
+add_action('install_plugins_popular', 'install_popular', 10, 1);
+function install_popular($page){
+ $args = array('browse' => 'popular', 'page' => $page);
+ $api = plugins_api('query_plugins', $args);
+ display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
+}
+add_action('install_plugins_new', 'install_new', 10, 1);
+function install_new($page){
+ $args = array('browse' => 'new', 'page' => $page);
+ $api = plugins_api('query_plugins', $args);
+ display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
+}
+add_action('install_plugins_updated', 'install_updated', 10, 1);
+function install_updated($page){
+ $args = array('browse' => 'updated', 'page' => $page);
+ $api = plugins_api('query_plugins', $args);
+ display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
+}
+add_action('install_plugins_upload', 'install_upload_custom', 10, 1);
+function install_upload_custom($page){
+ //$args = array('browse' => 'updated', 'page' => $page);
+ //$api = plugins_api('query_plugins', $args);
+ //display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
+ echo 'Not Implemented
Will utilise SwfUpload(if available) & unzip .zip plugin packages
';
+}
+
+function display_plugins_table($plugins, $page = 1, $totalpages = 1){
+ global $tab;
+
+ $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
+ $term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
+
+ $plugins_allowedtags = array('a' => array('href' => array(),'title' => array(), 'target' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
+
+?>
+
+
+
+
+ add_query_arg('paged', '%#%', $url),
+ 'format' => '',
+ 'total' => $totalpages,
+ 'current' => $page
+ ));
+
+ if ( $page_links )
+ echo "\t\t
$page_links
";
+?>
+
+
+
+
+
+ |
+ |
+ |
+ |
+ |
+
+
+
+ ', __('No plugins match your request.'), ' | ';
+
+ foreach( (array) $plugins as $plugin ){
+ if ( is_object($plugin) )
+ $plugin = (array) $plugin;
+
+ $title = wp_kses($plugin['name'], $plugins_allowedtags);
+ $description = wp_kses($plugin['description'], $plugins_allowedtags);
+ $version = wp_kses($plugin['version'], $plugins_allowedtags);
+
+ $name = strip_tags($title . ' ' . $version);
+
+ $author = $plugin['author'];
+ if( ! empty($plugin['author']) )
+ $author = ' ' . sprintf( __('By %s'), $author ) . '.';
+
+ $author = wp_kses($author, $plugins_allowedtags);
+
+ if( isset($plugin['homepage']) )
+ $title = '' . $title . '';
+
+ $action_links = array();
+ $action_links[] = '' . __('Install') . '';
+
+ $action_links = apply_filters('plugin_install_action_links', $action_links, $plugin);
+ ?>
+
+ |
+ |
+
+
+ |
+ |
+ |
+
+
+
+
+
+
+ >
+
+
+ ›
+
+
+
+
+>
+
+';
+}
+
+add_action('install_plugins_pre_plugin-information', 'install_plugin_information');
+function install_plugin_information() {
+ global $tab;
+
+ $api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin']));
+
+ $section = isset($_REQUEST['section']) ? $_REQUEST['section'] : 'description'; //Default to the Description tab, Do not translate, API returns English.
+ if( empty($section) || ! isset($api->sections[ $section ]) )
+ $section = array_shift( $section_titles = array_keys((array)$api->sections) );
+
+ install_iframe_header();
+ echo "\n";
+
+ ?>
+
+ download_link) ) : ?>
+
+ slug ) ) { //TODO: Make more.. searchable?
+ $type = 'latest_installed';
+ $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;
+ }
+ }
+ }
+
+ switch ( $type ) :
+ default:
+ case 'install':
+ if ( current_user_can('install_plugins') ) :
+ ?>
+
+
+
+
+version) ) : ?>
+ - version ?>
+author) ) : ?>
+ - author, '_blank') ?>
+last_updated) ) : ?>
+ - last_updated)) ) ?>
+requires) ) : ?>
+ - requires) ?>
+tested) ) : ?>
+ - tested ?>
+downloaded) ) : ?>
+ - downloaded)) ?>
+slug) ) : ?>
+
+homepage) ) : ?>
+
+
+
+
+
+
num_ratings) ?>
+
+ \n";
+ foreach ( (array)$api->sections as $section_name => $content ) {
+ $title = $section_name;
+ $title[0] = strtoupper($title[0]);
+ $title = str_replace('_', ' ', $title);
+
+ $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));
+
+ $display = ( $section_name == $section ) ? 'block' : 'none';
+
+ echo "\t\n";
+ echo "\t\t";
+ echo $content;
+ echo "\t
\n";
+ }
+ echo "\n";
+
+ //var_dump($api);
+ exit;
+}
+
+add_action('install_plugins_pre_install', 'install_plugin');
+function install_plugin() {
+
+ check_admin_referer('install-plugin_' . $_REQUEST['plugin']);
+
+ install_iframe_header();
+
+ $api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin'], 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth.
+
+ echo '';
+ echo '
', sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ), '
';
+
+ do_plugin_install($api->download_link);
+ echo '';
+
+ exit;
+}
+function do_plugin_install($download_url = '') {
+ global $wp_filesystem;
+
+ if ( empty($download_url) ) {
+ show_message( __('No plugin Specified') );
+ return;
+ }
+
+ $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
+
+ $url = 'plugin-install.php?tab=install';
+ $url = add_query_arg(array('plugin' => $plugin, 'plugin_name' => $_REQUEST['plugin_name'], 'download_url' => $_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) );
+ }
+}
+
+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 allready 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;
+ }
+
+ // Remove working directory
+ $wp_filesystem->delete($working_dir, true);
+
+}
+
+
?>
\ No newline at end of file
diff --git a/wp-admin/js/plugin-install.js b/wp-admin/js/plugin-install.js
index 5222efa54..f1691d5cf 100644
--- a/wp-admin/js/plugin-install.js
+++ b/wp-admin/js/plugin-install.js
@@ -1,53 +1,53 @@
-/* Plugin Browser Thickbox related JS*/
-jQuery(function($) {
- var thickDims = function() {
- var tbWindow = $('#TB_window');
- var width = $(window).width();
- var H = $(window).height();
- var W = ( 720 < width ) ? 720 : width;
-
- if ( tbWindow.size() ) {
- tbWindow.width( W - 50 ).height( H - 45 );
- $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
- tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
- if ( ! ( $.browser.msie && $.browser.version.substr(0,1) < 7 ) )
- tbWindow.css({'top':'20px','margin-top':'0'});
- };
-
- return $('a.thickbox').each( function() {
- var href = $(this).attr('href');
- if ( ! href )
- return;
- href = href.replace(/&width=[0-9]+/g, '');
- href = href.replace(/&height=[0-9]+/g, '');
- $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
- });
- };
-
- thickDims().click( function() {
- $('#TB_title').css({'background-color':'#222','color':'#cfcfcf'});
- $('#TB_ajaxWindowTitle').html('' + plugininstallL10n.plugin_information + ' ' + $(this).attr('title') );
- return false;
- });
-
- $(window).resize( function() { tb_position() } );
-});
-
-/* Plugin install related JS*/
-jQuery(function($) {
- $('#install-plugins tbody.plugins tr').click( function() {
- $(this).find('.action-links a.onclick').click();
- return false;
- });
-
- $('#plugin-information #sidemenu a').click( function() {
- var tab = $(this).attr('name');
- //Flip the tab
- $('#plugin-information-header a.current').removeClass('current');
- $(this).addClass('current');
- //Flip the content.
- $('#section-holder div').hide(); //Hide 'em all
- $('#section-' + tab).show();
- return false;
- });
+/* Plugin Browser Thickbox related JS*/
+jQuery(function($) {
+ var thickDims = function() {
+ var tbWindow = $('#TB_window');
+ var width = $(window).width();
+ var H = $(window).height();
+ var W = ( 720 < width ) ? 720 : width;
+
+ if ( tbWindow.size() ) {
+ tbWindow.width( W - 50 ).height( H - 45 );
+ $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
+ tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
+ if ( ! ( $.browser.msie && $.browser.version.substr(0,1) < 7 ) )
+ tbWindow.css({'top':'20px','margin-top':'0'});
+ };
+
+ return $('a.thickbox').each( function() {
+ var href = $(this).attr('href');
+ if ( ! href )
+ return;
+ href = href.replace(/&width=[0-9]+/g, '');
+ href = href.replace(/&height=[0-9]+/g, '');
+ $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
+ });
+ };
+
+ thickDims().click( function() {
+ $('#TB_title').css({'background-color':'#222','color':'#cfcfcf'});
+ $('#TB_ajaxWindowTitle').html('' + plugininstallL10n.plugin_information + ' ' + $(this).attr('title') );
+ return false;
+ });
+
+ $(window).resize( function() { tb_position() } );
+});
+
+/* Plugin install related JS*/
+jQuery(function($) {
+ $('#install-plugins tbody.plugins tr').click( function() {
+ $(this).find('.action-links a.onclick').click();
+ return false;
+ });
+
+ $('#plugin-information #sidemenu a').click( function() {
+ var tab = $(this).attr('name');
+ //Flip the tab
+ $('#plugin-information-header a.current').removeClass('current');
+ $(this).addClass('current');
+ //Flip the content.
+ $('#section-holder div').hide(); //Hide 'em all
+ $('#section-' + tab).show();
+ return false;
+ });
});
\ No newline at end of file
diff --git a/wp-admin/plugin-install.php b/wp-admin/plugin-install.php
index 4bbe871cf..1361a140a 100644
--- a/wp-admin/plugin-install.php
+++ b/wp-admin/plugin-install.php
@@ -1,59 +1,59 @@
- __('Search Plugins'),
- 'upload' => __('Upload a Plugin'),
- 'featured' => __('Featured Plugins'),
- 'popular' => __('Popular Plugins'),
- 'new' => __('Newest Plugins'),
- 'updated' => __('Recently Updated Plugins')
- );
-
-$tabs = apply_filters('install_plugins_tabs', $tabs );
-
-if( empty($tab) || ( ! isset($tabs[ $tab ]) && ! in_array($tab, array('install', 'plugin-information')) ) ){
- $tab_actions = array_keys($tabs);
- $tab = $tab_actions[0];
-}
-if( empty($paged) )
- $paged = 1;
-
-$body_id = $tab;
-
-do_action('install_plugins_pre_' . $tab);
-
-include('admin-header.php');
-?>
-
-
-
- $text ) {
- $sep = ( end($tabs) != $text ) ? ' | ' : '';
- $class = ( $action == $tab ) ? ' class="current"' : '';
- $href = admin_url('plugin-install.php?tab='. $action);
- echo "\t\t- $text$sep
\n";
-}
-?>
-
-
-
- __('Search Plugins'),
+ 'upload' => __('Upload a Plugin'),
+ 'featured' => __('Featured Plugins'),
+ 'popular' => __('Popular Plugins'),
+ 'new' => __('Newest Plugins'),
+ 'updated' => __('Recently Updated Plugins')
+ );
+
+$tabs = apply_filters('install_plugins_tabs', $tabs );
+
+if( empty($tab) || ( ! isset($tabs[ $tab ]) && ! in_array($tab, array('install', 'plugin-information')) ) ){
+ $tab_actions = array_keys($tabs);
+ $tab = $tab_actions[0];
+}
+if( empty($paged) )
+ $paged = 1;
+
+$body_id = $tab;
+
+do_action('install_plugins_pre_' . $tab);
+
+include('admin-header.php');
+?>
+
+
+
+ $text ) {
+ $sep = ( end($tabs) != $text ) ? ' | ' : '';
+ $class = ( $action == $tab ) ? ' class="current"' : '';
+ $href = admin_url('plugin-install.php?tab='. $action);
+ echo "\t\t- $text$sep
\n";
+}
+?>
+
+
+
+
\ No newline at end of file