263 /** |
263 /** |
264 * Uploads a plugin and optionally activates it. |
264 * Uploads a plugin and optionally activates it. |
265 * |
265 * |
266 * @since 5.5.0 |
266 * @since 5.5.0 |
267 * |
267 * |
|
268 * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. |
|
269 * |
268 * @param WP_REST_Request $request Full details about the request. |
270 * @param WP_REST_Request $request Full details about the request. |
269 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. |
271 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. |
270 */ |
272 */ |
271 public function create_item( $request ) { |
273 public function create_item( $request ) { |
|
274 global $wp_filesystem; |
|
275 |
272 require_once ABSPATH . 'wp-admin/includes/file.php'; |
276 require_once ABSPATH . 'wp-admin/includes/file.php'; |
273 require_once ABSPATH . 'wp-admin/includes/plugin.php'; |
277 require_once ABSPATH . 'wp-admin/includes/plugin.php'; |
274 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
278 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
275 require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; |
279 require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; |
276 |
280 |
327 |
331 |
328 return $error; |
332 return $error; |
329 } |
333 } |
330 |
334 |
331 if ( is_null( $result ) ) { |
335 if ( is_null( $result ) ) { |
332 global $wp_filesystem; |
|
333 // Pass through the error from WP_Filesystem if one was raised. |
336 // Pass through the error from WP_Filesystem if one was raised. |
334 if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) { |
337 if ( $wp_filesystem instanceof WP_Filesystem_Base |
335 return new WP_Error( 'unable_to_connect_to_filesystem', $wp_filesystem->errors->get_error_message(), array( 'status' => 500 ) ); |
338 && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() |
336 } |
339 ) { |
337 |
340 return new WP_Error( |
338 return new WP_Error( 'unable_to_connect_to_filesystem', __( 'Unable to connect to the filesystem. Please confirm your credentials.' ), array( 'status' => 500 ) ); |
341 'unable_to_connect_to_filesystem', |
|
342 $wp_filesystem->errors->get_error_message(), |
|
343 array( 'status' => 500 ) |
|
344 ); |
|
345 } |
|
346 |
|
347 return new WP_Error( |
|
348 'unable_to_connect_to_filesystem', |
|
349 __( 'Unable to connect to the filesystem. Please confirm your credentials.' ), |
|
350 array( 'status' => 500 ) |
|
351 ); |
339 } |
352 } |
340 |
353 |
341 $file = $upgrader->plugin_info(); |
354 $file = $upgrader->plugin_info(); |
342 |
355 |
343 if ( ! $file ) { |
356 if ( ! $file ) { |
344 return new WP_Error( 'unable_to_determine_installed_plugin', __( 'Unable to determine what plugin was installed.' ), array( 'status' => 500 ) ); |
357 return new WP_Error( |
|
358 'unable_to_determine_installed_plugin', |
|
359 __( 'Unable to determine what plugin was installed.' ), |
|
360 array( 'status' => 500 ) |
|
361 ); |
345 } |
362 } |
346 |
363 |
347 if ( 'inactive' !== $request['status'] ) { |
364 if ( 'inactive' !== $request['status'] ) { |
348 $can_change_status = $this->plugin_status_permission_check( $file, $request['status'], 'inactive' ); |
365 $can_change_status = $this->plugin_status_permission_check( $file, $request['status'], 'inactive' ); |
349 |
366 |
362 $installed_locales = array_values( get_available_languages() ); |
379 $installed_locales = array_values( get_available_languages() ); |
363 /** This filter is documented in wp-includes/update.php */ |
380 /** This filter is documented in wp-includes/update.php */ |
364 $installed_locales = apply_filters( 'plugins_update_check_locales', $installed_locales ); |
381 $installed_locales = apply_filters( 'plugins_update_check_locales', $installed_locales ); |
365 |
382 |
366 $language_packs = array_map( |
383 $language_packs = array_map( |
367 function( $item ) { |
384 static function( $item ) { |
368 return (object) $item; |
385 return (object) $item; |
369 }, |
386 }, |
370 $api->language_packs |
387 $api->language_packs |
371 ); |
388 ); |
372 |
389 |
373 $language_packs = array_filter( |
390 $language_packs = array_filter( |
374 $language_packs, |
391 $language_packs, |
375 function( $pack ) use ( $installed_locales ) { |
392 static function( $pack ) use ( $installed_locales ) { |
376 return in_array( $pack->language, $installed_locales, true ); |
393 return in_array( $pack->language, $installed_locales, true ); |
377 } |
394 } |
378 ); |
395 ); |
379 |
396 |
380 if ( $language_packs ) { |
397 if ( $language_packs ) { |