| Conditions | 38 |
| Paths | 2882 |
| Total Lines | 163 |
| Code Lines | 98 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 63 | public function upgrade( $current, $args = array() ) { |
||
| 64 | global $wp_filesystem; |
||
| 65 | |||
| 66 | include( ABSPATH . WPINC . '/version.php' ); // $wp_version; |
||
| 67 | |||
| 68 | $start_time = time(); |
||
| 69 | |||
| 70 | $defaults = array( |
||
| 71 | 'pre_check_md5' => true, |
||
| 72 | 'attempt_rollback' => false, |
||
| 73 | 'do_rollback' => false, |
||
| 74 | 'allow_relaxed_file_ownership' => false, |
||
| 75 | ); |
||
| 76 | $parsed_args = wp_parse_args( $args, $defaults ); |
||
| 77 | |||
| 78 | $this->init(); |
||
| 79 | $this->upgrade_strings(); |
||
| 80 | |||
| 81 | // Is an update available? |
||
| 82 | if ( !isset( $current->response ) || $current->response == 'latest' ) |
||
| 83 | return new WP_Error('up_to_date', $this->strings['up_to_date']); |
||
| 84 | |||
| 85 | $res = $this->fs_connect( array( ABSPATH, WP_CONTENT_DIR ), $parsed_args['allow_relaxed_file_ownership'] ); |
||
| 86 | if ( ! $res || is_wp_error( $res ) ) { |
||
| 87 | return $res; |
||
| 88 | } |
||
| 89 | |||
| 90 | $wp_dir = trailingslashit($wp_filesystem->abspath()); |
||
| 91 | |||
| 92 | $partial = true; |
||
| 93 | if ( $parsed_args['do_rollback'] ) |
||
| 94 | $partial = false; |
||
| 95 | elseif ( $parsed_args['pre_check_md5'] && ! $this->check_files() ) |
||
| 96 | $partial = false; |
||
| 97 | |||
| 98 | /* |
||
| 99 | * If partial update is returned from the API, use that, unless we're doing |
||
| 100 | * a reinstall. If we cross the new_bundled version number, then use |
||
| 101 | * the new_bundled zip. Don't though if the constant is set to skip bundled items. |
||
| 102 | * If the API returns a no_content zip, go with it. Finally, default to the full zip. |
||
| 103 | */ |
||
| 104 | if ( $parsed_args['do_rollback'] && $current->packages->rollback ) |
||
| 105 | $to_download = 'rollback'; |
||
| 106 | elseif ( $current->packages->partial && 'reinstall' != $current->response && $wp_version == $current->partial_version && $partial ) |
||
| 107 | $to_download = 'partial'; |
||
| 108 | elseif ( $current->packages->new_bundled && version_compare( $wp_version, $current->new_bundled, '<' ) |
||
| 109 | && ( ! defined( 'CORE_UPGRADE_SKIP_NEW_BUNDLED' ) || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) |
||
| 110 | $to_download = 'new_bundled'; |
||
| 111 | elseif ( $current->packages->no_content ) |
||
| 112 | $to_download = 'no_content'; |
||
| 113 | else |
||
| 114 | $to_download = 'full'; |
||
| 115 | |||
| 116 | // Lock to prevent multiple Core Updates occurring |
||
| 117 | $lock = WP_Upgrader::create_lock( 'core_updater', 15 * MINUTE_IN_SECONDS ); |
||
| 118 | if ( ! $lock ) { |
||
| 119 | return new WP_Error( 'locked', $this->strings['locked'] ); |
||
| 120 | } |
||
| 121 | |||
| 122 | $download = $this->download_package( $current->packages->$to_download ); |
||
| 123 | if ( is_wp_error( $download ) ) { |
||
| 124 | WP_Upgrader::release_lock( 'core_updater' ); |
||
| 125 | return $download; |
||
| 126 | } |
||
| 127 | |||
| 128 | $working_dir = $this->unpack_package( $download ); |
||
| 129 | if ( is_wp_error( $working_dir ) ) { |
||
| 130 | WP_Upgrader::release_lock( 'core_updater' ); |
||
| 131 | return $working_dir; |
||
| 132 | } |
||
| 133 | |||
| 134 | // Copy update-core.php from the new version into place. |
||
| 135 | if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) { |
||
| 136 | $wp_filesystem->delete($working_dir, true); |
||
| 137 | WP_Upgrader::release_lock( 'core_updater' ); |
||
| 138 | return new WP_Error( 'copy_failed_for_update_core_file', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), 'wp-admin/includes/update-core.php' ); |
||
| 139 | } |
||
| 140 | $wp_filesystem->chmod($wp_dir . 'wp-admin/includes/update-core.php', FS_CHMOD_FILE); |
||
| 141 | |||
| 142 | require_once( ABSPATH . 'wp-admin/includes/update-core.php' ); |
||
| 143 | |||
| 144 | if ( ! function_exists( 'update_core' ) ) { |
||
| 145 | WP_Upgrader::release_lock( 'core_updater' ); |
||
| 146 | return new WP_Error( 'copy_failed_space', $this->strings['copy_failed_space'] ); |
||
| 147 | } |
||
| 148 | |||
| 149 | $result = update_core( $working_dir, $wp_dir ); |
||
| 150 | |||
| 151 | // In the event of an issue, we may be able to roll back. |
||
| 152 | if ( $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) { |
||
| 153 | $try_rollback = false; |
||
| 154 | if ( is_wp_error( $result ) ) { |
||
| 155 | $error_code = $result->get_error_code(); |
||
| 156 | /* |
||
| 157 | * Not all errors are equal. These codes are critical: copy_failed__copy_dir, |
||
| 158 | * mkdir_failed__copy_dir, copy_failed__copy_dir_retry, and disk_full. |
||
| 159 | * do_rollback allows for update_core() to trigger a rollback if needed. |
||
| 160 | */ |
||
| 161 | if ( false !== strpos( $error_code, 'do_rollback' ) ) |
||
| 162 | $try_rollback = true; |
||
| 163 | elseif ( false !== strpos( $error_code, '__copy_dir' ) ) |
||
| 164 | $try_rollback = true; |
||
| 165 | elseif ( 'disk_full' === $error_code ) |
||
| 166 | $try_rollback = true; |
||
| 167 | } |
||
| 168 | |||
| 169 | if ( $try_rollback ) { |
||
| 170 | /** This filter is documented in wp-admin/includes/update-core.php */ |
||
| 171 | apply_filters( 'update_feedback', $result ); |
||
| 172 | |||
| 173 | /** This filter is documented in wp-admin/includes/update-core.php */ |
||
| 174 | apply_filters( 'update_feedback', $this->strings['start_rollback'] ); |
||
| 175 | |||
| 176 | $rollback_result = $this->upgrade( $current, array_merge( $parsed_args, array( 'do_rollback' => true ) ) ); |
||
| 177 | |||
| 178 | $original_result = $result; |
||
| 179 | $result = new WP_Error( 'rollback_was_required', $this->strings['rollback_was_required'], (object) array( 'update' => $original_result, 'rollback' => $rollback_result ) ); |
||
| 180 | } |
||
| 181 | } |
||
| 182 | |||
| 183 | /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ |
||
| 184 | do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'core' ) ); |
||
| 185 | |||
| 186 | // Clear the current updates |
||
| 187 | delete_site_transient( 'update_core' ); |
||
| 188 | |||
| 189 | if ( ! $parsed_args['do_rollback'] ) { |
||
| 190 | $stats = array( |
||
| 191 | 'update_type' => $current->response, |
||
| 192 | 'success' => true, |
||
| 193 | 'fs_method' => $wp_filesystem->method, |
||
| 194 | 'fs_method_forced' => defined( 'FS_METHOD' ) || has_filter( 'filesystem_method' ), |
||
| 195 | 'fs_method_direct' => !empty( $GLOBALS['_wp_filesystem_direct_method'] ) ? $GLOBALS['_wp_filesystem_direct_method'] : '', |
||
| 196 | 'time_taken' => time() - $start_time, |
||
| 197 | 'reported' => $wp_version, |
||
| 198 | 'attempted' => $current->version, |
||
| 199 | ); |
||
| 200 | |||
| 201 | if ( is_wp_error( $result ) ) { |
||
| 202 | $stats['success'] = false; |
||
| 203 | // Did a rollback occur? |
||
| 204 | if ( ! empty( $try_rollback ) ) { |
||
| 205 | $stats['error_code'] = $original_result->get_error_code(); |
||
| 206 | $stats['error_data'] = $original_result->get_error_data(); |
||
| 207 | // Was the rollback successful? If not, collect its error too. |
||
| 208 | $stats['rollback'] = ! is_wp_error( $rollback_result ); |
||
| 209 | if ( is_wp_error( $rollback_result ) ) { |
||
| 210 | $stats['rollback_code'] = $rollback_result->get_error_code(); |
||
| 211 | $stats['rollback_data'] = $rollback_result->get_error_data(); |
||
| 212 | } |
||
| 213 | } else { |
||
| 214 | $stats['error_code'] = $result->get_error_code(); |
||
| 215 | $stats['error_data'] = $result->get_error_data(); |
||
| 216 | } |
||
| 217 | } |
||
| 218 | |||
| 219 | wp_version_check( $stats ); |
||
| 220 | } |
||
| 221 | |||
| 222 | WP_Upgrader::release_lock( 'core_updater' ); |
||
| 223 | |||
| 224 | return $result; |
||
| 225 | } |
||
| 226 | |||
| 366 |
This check compares the return type specified in the
@returnannotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.