/** * Run an upgrade/install. * * Attempts to download the package (if it is not a local file), unpack it, and * install it in the destination folder. * * @since 2.8.0 * * @param array $options { * Array or string of arguments for upgrading/installing a package. * * @type string $package The full path or URI of the package to install. * Default empty. * @type string $destination The full path to the destination folder. * Default empty. * @type bool $clear_destination Whether to delete any files already in the * destination folder. Default false. * @type bool $clear_working Whether to delete the files form the working * directory after copying to the destination. * Default false. * @type bool $abort_if_destination_exists Whether to abort the installation if the destination * folder already exists. When true, `$clear_destination` * should be false. Default true. * @type bool $is_multi Whether this run is one of multiple upgrade/install * actions being performed in bulk. When true, the skin * {@see WP_Upgrader::header()} and {@see WP_Upgrader::footer()} * aren't called. Default false. * @type array $hook_extra Extra arguments to pass to the filter hooks called by * {@see WP_Upgrader::run()}. * } * * @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error, * or false if unable to connect to the filesystem. */ public function run($options) { $defaults = array('package' => '', 'destination' => '', 'clear_destination' => false, 'abort_if_destination_exists' => true, 'clear_working' => true, 'is_multi' => false, 'hook_extra' => array()); $options = wp_parse_args($options, $defaults); if (!$options['is_multi']) { // call $this->header separately if running multiple times $this->skin->header(); } // Connect to the Filesystem first. $res = $this->fs_connect(array(WP_CONTENT_DIR, $options['destination'])); // Mainly for non-connected filesystem. if (!$res) { if (!$options['is_multi']) { $this->skin->footer(); } return false; } $this->skin->before(); if (is_wp_error($res)) { $this->skin->error($res); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $res; } //Download the package (Note, This just returns the filename of the file if the package is a local file) $download = $this->download_package($options['package']); if (is_wp_error($download)) { $this->skin->error($download); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $download; } $delete_package = $download != $options['package']; // Do not delete a "local" file //Unzips the file into a temporary directory $working_dir = $this->unpack_package($download, $delete_package); if (is_wp_error($working_dir)) { $this->skin->error($working_dir); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $working_dir; } //With the given options, this installs it to the destination directory. $result = $this->install_package(array('source' => $working_dir, 'destination' => $options['destination'], 'clear_destination' => $options['clear_destination'], 'abort_if_destination_exists' => $options['abort_if_destination_exists'], 'clear_working' => $options['clear_working'], 'hook_extra' => $options['hook_extra'])); $this->skin->set_result($result); if (is_wp_error($result)) { $this->skin->error($result); $this->skin->feedback('process_failed'); } else { //Install Succeeded $this->skin->feedback('process_success'); } $this->skin->after(); if (!$options['is_multi']) { /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ do_action('upgrader_process_complete', $this, $options['hook_extra']); $this->skin->footer(); } return $result; }
function bulk_footer() { $this->decrement_update_count('translation'); $update_actions = array(); $update_actions['updates_page'] = '<a href="' . self_admin_url('update-core.php') . '" title="' . esc_attr__('Go to WordPress Updates page') . '" target="_parent">' . __('Return to WordPress Updates') . '</a>'; /** * Filter the list of action links available following a translations update. * * @since 3.7.0 * * @param array $update_actions Array of translations update links. */ $update_actions = apply_filters('update_translations_complete_actions', $update_actions); if ($update_actions && $this->display_footer_actions) { $this->feedback(implode(' | ', $update_actions)); } parent::footer(); }
/** * Run an upgrade/install. * * Attempts to download the package (if it is not a local file), unpack it, and * install it in the destination folder. * * @since 2.8.0 * @access public * * @param array $options { * Array or string of arguments for upgrading/installing a package. * * @type string $package The full path or URI of the package to install. * Default empty. * @type string $destination The full path to the destination folder. * Default empty. * @type bool $clear_destination Whether to delete any files already in the * destination folder. Default false. * @type bool $clear_working Whether to delete the files form the working * directory after copying to the destination. * Default false. * @type bool $abort_if_destination_exists Whether to abort the installation if the destination * folder already exists. When true, `$clear_destination` * should be false. Default true. * @type bool $is_multi Whether this run is one of multiple upgrade/install * actions being performed in bulk. When true, the skin * {@see WP_Upgrader::header()} and {@see WP_Upgrader::footer()} * aren't called. Default false. * @type array $hook_extra Extra arguments to pass to the filter hooks called by * {@see WP_Upgrader::run()}. * } * @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error, * or false if unable to connect to the filesystem. */ public function run($options) { $defaults = array('package' => '', 'destination' => '', 'clear_destination' => false, 'abort_if_destination_exists' => true, 'clear_working' => true, 'is_multi' => false, 'hook_extra' => array()); $options = wp_parse_args($options, $defaults); /** * Filter the package options before running an update. * * @since 4.3.0 * * @param array $options { * Options used by the upgrader. * * @type string $package Package for update. * @type string $destination Update location. * @type bool $clear_destination Clear the destination resource. * @type bool $clear_working Clear the working resource. * @type bool $abort_if_destination_exists Abort if the Destination directory exists. * @type bool $is_multi Whether the upgrader is running multiple times. * @type array $hook_extra Extra hook arguments. * } */ $options = apply_filters('upgrader_package_options', $options); if (!$options['is_multi']) { // call $this->header separately if running multiple times $this->skin->header(); } // Connect to the Filesystem first. $res = $this->fs_connect(array(WP_CONTENT_DIR, $options['destination'])); // Mainly for non-connected filesystem. if (!$res) { if (!$options['is_multi']) { $this->skin->footer(); } return false; } $this->skin->before(); if (is_wp_error($res)) { $this->skin->error($res); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $res; } /* * Download the package (Note, This just returns the filename * of the file if the package is a local file) */ $download = $this->download_package($options['package']); if (is_wp_error($download)) { $this->skin->error($download); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $download; } $delete_package = $download != $options['package']; // Do not delete a "local" file // Unzips the file into a temporary directory. $working_dir = $this->unpack_package($download, $delete_package); if (is_wp_error($working_dir)) { $this->skin->error($working_dir); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $working_dir; } // With the given options, this installs it to the destination directory. $result = $this->install_package(array('source' => $working_dir, 'destination' => $options['destination'], 'clear_destination' => $options['clear_destination'], 'abort_if_destination_exists' => $options['abort_if_destination_exists'], 'clear_working' => $options['clear_working'], 'hook_extra' => $options['hook_extra'])); $this->skin->set_result($result); if (is_wp_error($result)) { $this->skin->error($result); $this->skin->feedback('process_failed'); } else { // Install succeeded. $this->skin->feedback('process_success'); } $this->skin->after(); if (!$options['is_multi']) { /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ do_action('upgrader_process_complete', $this, $options['hook_extra']); $this->skin->footer(); } return $result; }
/** * Run an upgrade/install. * * Attempts to download the package (if it is not a local file), unpack it, and * install it in the destination folder. * * @since 2.8.0 * @access public * * @param array $options { * Array or string of arguments for upgrading/installing a package. * * @type string $package The full path or URI of the package to install. * Default empty. * @type string $destination The full path to the destination folder. * Default empty. * @type bool $clear_destination Whether to delete any files already in the * destination folder. Default false. * @type bool $clear_working Whether to delete the files form the working * directory after copying to the destination. * Default false. * @type bool $abort_if_destination_exists Whether to abort the installation if the destination * folder already exists. When true, `$clear_destination` * should be false. Default true. * @type bool $is_multi Whether this run is one of multiple upgrade/install * actions being performed in bulk. When true, the skin * WP_Upgrader::header() and WP_Upgrader::footer() * aren't called. Default false. * @type array $hook_extra Extra arguments to pass to the filter hooks called by * WP_Upgrader::run(). * } * @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error, * or false if unable to connect to the filesystem. */ public function run($options) { $defaults = array('package' => '', 'destination' => '', 'clear_destination' => false, 'abort_if_destination_exists' => true, 'clear_working' => true, 'is_multi' => false, 'hook_extra' => array()); $options = wp_parse_args($options, $defaults); /** * Filters the package options before running an update. * * See also {@see 'upgrader_process_complete'}. * * @since 4.3.0 * * @param array $options { * Options used by the upgrader. * * @type string $package Package for update. * @type string $destination Update location. * @type bool $clear_destination Clear the destination resource. * @type bool $clear_working Clear the working resource. * @type bool $abort_if_destination_exists Abort if the Destination directory exists. * @type bool $is_multi Whether the upgrader is running multiple times. * @type array $hook_extra { * Extra hook arguments. * * @type string $action Type of action. Default 'update'. * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'. * @type bool $bulk Whether the update process is a bulk update. Default true. * @type string $plugin The base plugin path from the plugins directory. * @type string $theme The stylesheet or template name of the theme. * @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme', * or 'core'. * @type object $language_update The language pack update offer. * } * } */ $options = apply_filters('upgrader_package_options', $options); if (!$options['is_multi']) { // call $this->header separately if running multiple times $this->skin->header(); } // Connect to the Filesystem first. $res = $this->fs_connect(array(WP_CONTENT_DIR, $options['destination'])); // Mainly for non-connected filesystem. if (!$res) { if (!$options['is_multi']) { $this->skin->footer(); } return false; } $this->skin->before(); if (is_wp_error($res)) { $this->skin->error($res); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $res; } /* * Download the package (Note, This just returns the filename * of the file if the package is a local file) */ $download = $this->download_package($options['package']); if (is_wp_error($download)) { $this->skin->error($download); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $download; } $delete_package = $download != $options['package']; // Do not delete a "local" file // Unzips the file into a temporary directory. $working_dir = $this->unpack_package($download, $delete_package); if (is_wp_error($working_dir)) { $this->skin->error($working_dir); $this->skin->after(); if (!$options['is_multi']) { $this->skin->footer(); } return $working_dir; } // With the given options, this installs it to the destination directory. $result = $this->install_package(array('source' => $working_dir, 'destination' => $options['destination'], 'clear_destination' => $options['clear_destination'], 'abort_if_destination_exists' => $options['abort_if_destination_exists'], 'clear_working' => $options['clear_working'], 'hook_extra' => $options['hook_extra'])); $this->skin->set_result($result); if (is_wp_error($result)) { $this->skin->error($result); $this->skin->feedback('process_failed'); } else { // Install succeeded. $this->skin->feedback('process_success'); } $this->skin->after(); if (!$options['is_multi']) { /** * Fires when the upgrader process is complete. * * See also {@see 'upgrader_package_options'}. * * @since 3.6.0 * @since 3.7.0 Added to WP_Upgrader::run(). * * @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a * Theme_Upgrader, Plugin_Upgrader or Core_Upgrade instance. * @param array $hook_extra { * Array of bulk item update data. * * @type string $action Type of action. Default 'update'. * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'. * @type bool $bulk Whether the update process is a bulk update. Default true. * @type array $plugins Array of the basename paths of the plugins' main files. * @type array $themes The theme slugs. * } */ do_action('upgrader_process_complete', $this, $options['hook_extra']); $this->skin->footer(); } return $result; }
function bulk_footer() { $update_actions = array(); $update_actions['updates_page'] = '<a href="' . self_admin_url('update-core.php') . '" title="' . esc_attr__('Go to WordPress Updates page') . '" target="_parent">' . __('Return to WordPress Updates') . '</a>'; $update_actions = apply_filters('update_translations_complete_actions', $update_actions); if ($update_actions && $this->display_footer_actions) { $this->feedback(implode(' | ', $update_actions)); } parent::footer(); }
/** * Cancel installer. * * @param WP_Upgrader_Skin $skin Skin to set message on. * @param WP_Error|string $error Error to display. */ protected function cancel_installer($skin, $error) { $skin->error($error); $skin->after(); $skin->footer(); }