wp/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php
changeset 19 3d72ae0968f4
parent 18 be944660c56a
child 21 48c4eec2b7e6
equal deleted inserted replaced
18:be944660c56a 19:3d72ae0968f4
   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 ) {