| @@ 6-83 (lines=78) @@ | ||
| 3 | include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
|
| 4 | include_once ABSPATH . 'wp-admin/includes/file.php'; |
|
| 5 | ||
| 6 | class Jetpack_JSON_API_Plugins_New_Endpoint extends Jetpack_JSON_API_Plugins_Endpoint { |
|
| 7 | ||
| 8 | // POST /sites/%s/plugins/new |
|
| 9 | protected $needed_capabilities = 'install_plugins'; |
|
| 10 | protected $action = 'install'; |
|
| 11 | ||
| 12 | protected function validate_call( $_blog_id, $capability, $check_manage_active = true ) { |
|
| 13 | $validate = parent::validate_call( $_blog_id, $capability, $check_manage_active ); |
|
| 14 | if ( is_wp_error( $validate ) ) { |
|
| 15 | ||
| 16 | // Lets delete the attachment... if the user doesn't have the right permissions to do things. |
|
| 17 | $args = $this->input(); |
|
| 18 | if ( isset( $args['zip'][0]['id'] ) ) { |
|
| 19 | wp_delete_attachment( $args['zip'][0]['id'], true ); |
|
| 20 | } |
|
| 21 | } |
|
| 22 | ||
| 23 | return $validate; |
|
| 24 | } |
|
| 25 | ||
| 26 | // no need to try to validate the plugin since we didn't pass one in. |
|
| 27 | protected function validate_input( $plugin ) { |
|
| 28 | $this->bulk = false; |
|
| 29 | $this->plugins = array(); |
|
| 30 | } |
|
| 31 | ||
| 32 | function install() { |
|
| 33 | $args = $this->input(); |
|
| 34 | ||
| 35 | if ( isset( $args['zip'][0]['id'] ) ) { |
|
| 36 | $plugin_attachment_id = $args['zip'][0]['id']; |
|
| 37 | $local_file = get_attached_file( $plugin_attachment_id ); |
|
| 38 | if ( ! $local_file ) { |
|
| 39 | return new WP_Error( 'local-file-does-not-exist' ); |
|
| 40 | } |
|
| 41 | $skin = new Jetpack_Automatic_Install_Skin(); |
|
| 42 | $upgrader = new Plugin_Upgrader( $skin ); |
|
| 43 | ||
| 44 | $pre_install_plugin_list = get_plugins(); |
|
| 45 | $result = $upgrader->install( $local_file ); |
|
| 46 | ||
| 47 | // clean up. |
|
| 48 | wp_delete_attachment( $plugin_attachment_id, true ); |
|
| 49 | ||
| 50 | if ( is_wp_error( $result ) ) { |
|
| 51 | return $result; |
|
| 52 | } |
|
| 53 | ||
| 54 | $after_install_plugin_list = get_plugins(); |
|
| 55 | $plugin = array_values( array_diff( array_keys( $after_install_plugin_list ), array_keys( $pre_install_plugin_list ) ) ); |
|
| 56 | ||
| 57 | if ( ! $result ) { |
|
| 58 | $error_code = $upgrader->skin->get_main_error_code(); |
|
| 59 | $message = $upgrader->skin->get_main_error_message(); |
|
| 60 | if ( empty( $message ) ) { |
|
| 61 | $message = __( 'An unknown error occurred during installation', 'jetpack' ); |
|
| 62 | } |
|
| 63 | ||
| 64 | if ( 'download_failed' === $error_code ) { |
|
| 65 | $error_code = 'no_package'; |
|
| 66 | } |
|
| 67 | ||
| 68 | return new WP_Error( $error_code, $message, 400 ); |
|
| 69 | } |
|
| 70 | ||
| 71 | if ( empty( $plugin ) ) { |
|
| 72 | return new WP_Error( 'plugin_already_installed' ); |
|
| 73 | } |
|
| 74 | ||
| 75 | $this->plugins = $plugin; |
|
| 76 | $this->log[ $plugin[0] ] = $upgrader->skin->get_upgrade_messages(); |
|
| 77 | ||
| 78 | return true; |
|
| 79 | } |
|
| 80 | ||
| 81 | return new WP_Error( 'no_plugin_installed' ); |
|
| 82 | } |
|
| 83 | } |
|
| 84 | ||
| @@ 6-82 (lines=77) @@ | ||
| 3 | include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
|
| 4 | include_once ABSPATH . 'wp-admin/includes/file.php'; |
|
| 5 | ||
| 6 | class Jetpack_JSON_API_Themes_New_Endpoint extends Jetpack_JSON_API_Themes_Endpoint { |
|
| 7 | ||
| 8 | // POST /sites/%s/themes/%s/install |
|
| 9 | protected $needed_capabilities = 'install_themes'; |
|
| 10 | protected $action = 'install'; |
|
| 11 | protected $download_links = array(); |
|
| 12 | ||
| 13 | protected function validate_call( $_blog_id, $capability, $check_manage_active = true ) { |
|
| 14 | $validate = parent::validate_call( $_blog_id, $capability, $check_manage_active ); |
|
| 15 | if ( is_wp_error( $validate ) ) { |
|
| 16 | // Lets delete the attachment... if the user doesn't have the right permissions to do things. |
|
| 17 | $args = $this->input(); |
|
| 18 | if ( isset( $args['zip'][0]['id'] ) ) { |
|
| 19 | wp_delete_attachment( $args['zip'][0]['id'], true ); |
|
| 20 | } |
|
| 21 | } |
|
| 22 | ||
| 23 | return $validate; |
|
| 24 | } |
|
| 25 | ||
| 26 | protected function validate_input( $theme ) { |
|
| 27 | $this->bulk = false; |
|
| 28 | $this->themes = array(); |
|
| 29 | } |
|
| 30 | ||
| 31 | function install() { |
|
| 32 | $args = $this->input(); |
|
| 33 | ||
| 34 | if ( isset( $args['zip'][0]['id'] ) ) { |
|
| 35 | $attachment_id = $args['zip'][0]['id']; |
|
| 36 | $local_file = get_attached_file( $attachment_id ); |
|
| 37 | if ( ! $local_file ) { |
|
| 38 | return new WP_Error( 'local-file-does-not-exist' ); |
|
| 39 | } |
|
| 40 | $skin = new Jetpack_Automatic_Install_Skin(); |
|
| 41 | $upgrader = new Theme_Upgrader( $skin ); |
|
| 42 | ||
| 43 | $pre_install_list = wp_get_themes(); |
|
| 44 | $result = $upgrader->install( $local_file ); |
|
| 45 | ||
| 46 | // clean up. |
|
| 47 | wp_delete_attachment( $attachment_id, true ); |
|
| 48 | ||
| 49 | if ( is_wp_error( $result ) ) { |
|
| 50 | return $result; |
|
| 51 | } |
|
| 52 | ||
| 53 | $after_install_list = wp_get_themes(); |
|
| 54 | $plugin = array_values( array_diff( array_keys( $after_install_list ), array_keys( $pre_install_list ) ) ); |
|
| 55 | ||
| 56 | if ( ! $result ) { |
|
| 57 | $error_code = $upgrader->skin->get_main_error_code(); |
|
| 58 | $message = $upgrader->skin->get_main_error_message(); |
|
| 59 | if ( empty( $message ) ) { |
|
| 60 | $message = __( 'An unknown error occurred during installation', 'jetpack' ); |
|
| 61 | } |
|
| 62 | ||
| 63 | if ( 'download_failed' === $error_code ) { |
|
| 64 | $error_code = 'no_package'; |
|
| 65 | } |
|
| 66 | ||
| 67 | return new WP_Error( $error_code, $message, 400 ); |
|
| 68 | } |
|
| 69 | ||
| 70 | if ( empty( $plugin ) ) { |
|
| 71 | return new WP_Error( 'theme_already_installed' ); |
|
| 72 | } |
|
| 73 | ||
| 74 | $this->themes = $plugin; |
|
| 75 | $this->log[ $plugin[0] ] = $upgrader->skin->get_upgrade_messages(); |
|
| 76 | ||
| 77 | return true; |
|
| 78 | } |
|
| 79 | ||
| 80 | return new WP_Error( 'no_theme_installed' ); |
|
| 81 | } |
|
| 82 | } |
|
| 83 | ||