/**
  * @param $options
  */
 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);
     // 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;
     }
     //Download the package (Note, This just returns the filename of the file if the package is a local file)
     if (file_exists($options['package'])) {
         $download = $options['package'];
     } else {
         $download = $this->download_package($options['package']);
     }
     if (is_wp_error($download)) {
         $this->skin->error($download);
         //$this->skin->after();
         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();
         return $working_dir;
     }
     $options['source'] = $working_dir;
     $options['package_folder'] = basename($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');
         //update packages xml file
         $result = $this->update_packages_wxr($options);
         if (is_wp_error($result)) {
             $this->skin->error($result);
             $this->skin->feedback('process_failed');
         } else {
             $this->skin->feedback('process_success');
         }
     }
     $this->update_packages_wxr($options);
     $this->skin->feedback('go_manage_page');
     $this->skin->after();
     return $result;
 }
Beispiel #2
0
 function error($errors)
 {
     $folder_exists = false;
     if (is_wp_error($errors)) {
         $error_codes = $errors->get_error_codes();
         if (in_array('folder_exists', $error_codes)) {
             $folder_exists = true;
         }
     }
     parent::error($errors);
     if ($folder_exists) {
         $this->feedback($this->get_folder_exsists_message());
     }
 }
	/**
	 *
	 * @param string|WP_Error $error
	 */
	public function error( $error ) {
		echo '<div class="lp-error">';
		parent::error( $error );
		echo '</div>';
	}
 /**
  * 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;
 }
Beispiel #5
0
 /**
  * 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;
 }
 /**
  * Set the error flag to true, then let the base class handle the rest.
  *
  * @param $errors
  */
 public function error($errors)
 {
     $this->error = true;
     parent::error($errors);
 }
 /**
  * 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();
 }