-
-
-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 '<div class="wrap">';
- echo '<h2>', sprintf( __('Installing Plugin from file: %s'), basename($filename) ), '</h2>';
-
- //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 '</div>';
-}
-
-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 '<div class="wrap">';
- echo '<h2>', sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ), '</h2>';
-
- do_plugin_install($api->download_link, $api);
- echo '</div>';
-
-}
-
-/**
- * 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 <strong>%s %s</strong>.'), $plugin_information->name, $plugin_information->version) );
- $plugin_file = $result;
-
- $install_actions = apply_filters('install_plugin_complete_actions', array(
- 'activate_plugin' => '<a href="' . wp_nonce_url('plugins.php?action=activate&plugin=' . $plugin_file, 'activate-plugin_' . $plugin_file) . '" title="' . attribute_escape(__('Activate this plugin')) . '" target="_parent">' . __('Activate Plugin') . '</a>',
- 'plugins_page' => '<a href="' . admin_url('plugins.php') . '" title="' . attribute_escape(__('Goto plugins page')) . '" target="_parent">' . __('Return to Plugins page') . '</a>'
- ), $plugin_information, $plugin_file);
- if ( ! empty($install_actions) )
- show_message('<strong>' . __('Actions:') . '</strong> ' . 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' => '<a href="' . wp_nonce_url('plugins.php?action=activate&plugin=' . $plugin_file, 'activate-plugin_' . $plugin_file) . '" title="' . __('Activate this plugin') . '" target="_parent">' . __('Activate Plugin') . '</a>',
- 'plugins_page' => '<a href="' . admin_url('plugins.php') . '" title="' . __('Goto plugins page') . '" target="_parent">' . __('Return to Plugins page') . '</a>'
- ), array(), $plugin_file);
- if ( ! empty($install_actions) )
- show_message('<strong>' . __('Actions:') . '</strong> ' . 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];
-}
-
-?>