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
@return
annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.