- echo '<tr><td colspan="5" class="plugin-update">';
- if ( ! current_user_can('update_plugins') )
- printf( __('There is a new version of %1$s available. <a href="%2$s">Download version %3$s here</a>.'), $plugin_data['Name'], $r->url, $r->new_version);
- else if ( empty($r->package) )
- printf( __('There is a new version of %1$s available. <a href="%2$s">Download version %3$s here</a> <em>automatic upgrade unavailable for this plugin</em>.'), $plugin_data['Name'], $r->url, $r->new_version);
- else
- printf( __('There is a new version of %1$s available. <a href="%2$s">Download version %3$s here</a> or <a href="%4$s">upgrade automatically</a>.'), $plugin_data['Name'], $r->url, $r->new_version, wp_nonce_url('update.php?action=upgrade-plugin&plugin=' . $file, 'upgrade-plugin_' . $file) );
-
- echo '</td></tr>';
-}
-add_action( 'after_plugin_row', 'wp_plugin_update_row', 10, 2 );
-
-function wp_update_plugin($plugin, $feedback = '') {
- global $wp_filesystem;
-
- if ( !empty($feedback) )
- add_filter('update_feedback', $feedback);
-
- // Is an update available?
- $current = get_option( 'update_plugins' );
- if ( !isset( $current->response[ $plugin ] ) )
- return new WP_Error('up_to_date', __('The plugin is at the latest version.'));
-
- // 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 );
-
- // Get the URL to the zip file
- $r = $current->response[ $plugin ];
-
- if ( empty($r->package) )
- return new WP_Error('no_package', __('Upgrade package not available.'));
-
- // Download the package
- $package = $r->package;
- apply_filters('update_feedback', sprintf(__('Downloading update 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($plugin, '.php');
-
- // Clean up working directory
- if ( $wp_filesystem->is_dir($working_dir) )
- $wp_filesystem->delete($working_dir, true);
-
- apply_filters('update_feedback', __('Unpacking the update'));
- // 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;
- }