Changeset 31897
- Timestamp:
- 03/26/2015 02:29:52 AM (10 years ago)
- Location:
- trunk/src/wp-admin
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-admin/includes/ajax-actions.php
r31829 r31897 2877 2877 } 2878 2878 2879 /**2880 * AJAX handler for installing a plugin.2881 *2882 * @since 4.2.02883 */2884 function wp_ajax_install_plugin() {2885 $status = array(2886 'install' => 'plugin',2887 'slug' => sanitize_key( $_POST['slug'] ),2888 );2889 2890 if ( ! current_user_can( 'install_plugins' ) ) {2891 $status['error'] = __( 'You do not have sufficient permissions to install plugins on this site.' );2892 wp_send_json_error( $status );2893 }2894 2895 check_ajax_referer( 'updates' );2896 2897 include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );2898 include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );2899 2900 $api = plugins_api( 'plugin_information', array(2901 'slug' => sanitize_key( $_POST['slug'] ),2902 'fields' => array( 'sections' => false )2903 ) );2904 2905 if ( is_wp_error( $api ) ) {2906 $status['error'] = $api->get_error_message();2907 wp_send_json_error( $status );2908 }2909 2910 $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );2911 $result = $upgrader->install( $api->download_link );2912 2913 if ( is_wp_error( $result ) ) {2914 $status['error'] = $result->get_error_message();2915 wp_send_json_error( $status );2916 } else if ( is_null( $result ) ) {2917 $status['errorCode'] = 'unable_to_connect_to_filesystem';2918 $status['error'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' );2919 wp_send_json_error( $status );2920 }2921 2922 $plugin_status = install_plugin_install_status( $api );2923 2924 if ( ! is_multisite() ) {2925 activate_plugin( $plugin_status['file'] );2926 }2927 2928 wp_send_json_success( $status );2929 }2930 2879 2931 2880 /** -
trunk/src/wp-admin/js/updates.js
r31831 r31897 52 52 53 53 /** 54 * Flag if we're waiting for an install/update to complete.54 * Flag if we're waiting for an update to complete. 55 55 * 56 56 * @since 4.2.0 … … 61 61 62 62 /** 63 * * Flag if we've done an install orupdate successfully.63 * * Flag if we've done an update successfully. 64 64 * 65 65 * @since 4.2.0 … … 70 70 71 71 /** 72 * If the user tries to install/update a plugin while an install/update is72 * If the user tries to update a plugin while an update is 73 73 * already happening, it can be placed in this queue to perform later. 74 74 * … … 254 254 255 255 $notificationDialog.find( 'h3' ).after( '<div class="error">' + message + '</div>' ); 256 };257 258 /**259 * Send an Ajax request to the server to install a plugin.260 *261 * @since 4.2.0262 *263 * @param {string} slug264 */265 wp.updates.installPlugin = function( slug ) {266 var $message = $( '.plugin-card-' + slug ).find( '.install-now' );267 268 $message.addClass( 'updating-message' );269 $message.text( wp.updates.l10n.installing );270 wp.a11y.speak( wp.updates.l10n.installingMsg );271 272 if ( wp.updates.updateLock ) {273 wp.updates.updateQueue.push( {274 type: 'install-plugin',275 data: {276 slug: slug277 }278 } );279 return;280 }281 282 wp.updates.updateLock = true;283 284 var data = {285 _ajax_nonce: wp.updates.ajaxNonce,286 slug: slug,287 username: wp.updates.filesystemCredentials.ftp.username,288 password: wp.updates.filesystemCredentials.ftp.password,289 hostname: wp.updates.filesystemCredentials.ftp.hostname,290 connection_type: wp.updates.filesystemCredentials.ftp.connectionType,291 public_key: wp.updates.filesystemCredentials.ssh.publicKey,292 private_key: wp.updates.filesystemCredentials.ssh.privateKey293 };294 295 wp.ajax.post( 'install-plugin', data )296 .done( wp.updates.installSuccess )297 .fail( wp.updates.installError );298 };299 300 /**301 * On plugin install success, update the UI with the result.302 *303 * @since 4.2.0304 *305 * @param {object} response306 */307 wp.updates.installSuccess = function( response ) {308 var $message = $( '.plugin-card-' + response.slug ).find( '.install-now' );309 310 $message.removeClass( 'updating-message' ).addClass( 'updated-message button-disabled' );311 $message.text( wp.updates.l10n.installed );312 wp.a11y.speak( wp.updates.l10n.installedMsg );313 wp.updates.updateDoneSuccessfully = true;314 315 /*316 * The lock can be released since the update was successful,317 * and any other updates can commence.318 */319 wp.updates.updateLock = false;320 wp.updates.queueChecker();321 };322 323 /**324 * On plugin install failure, update the UI appropriately.325 *326 * @since 4.2.0327 *328 * @param {object} response329 */330 wp.updates.installError = function( response ) {331 var $message = $( '.plugin-card-' + response.slug ).find( '.install-now' );332 wp.updates.updateDoneSuccessfully = false;333 if ( response.errorCode && response.errorCode == 'unable_to_connect_to_filesystem' ) {334 wp.updates.credentialError( response, 'install-plugin' );335 return;336 }337 338 $message.removeClass( 'updating-message' );339 $message.text( wp.updates.l10n.installNow );340 341 wp.updates.updateLock = false;342 256 }; 343 257 … … 362 276 363 277 /** 364 * If an install/update job has been placed in the queue, queueChecker pulls it out and runs it.278 * If an update job has been placed in the queue, queueChecker pulls it out and runs it. 365 279 * 366 280 * @since 4.2.0 … … 373 287 var job = wp.updates.updateQueue.shift(); 374 288 289 /* This normally wouldn't be a switch, but is there since updates and installs 290 originally were developed together. Kept as a switch to help with bringing 291 installs back in and to preserve commit history. */ 375 292 switch ( job.type ) { 376 293 case 'update-plugin': 377 294 wp.updates.updatePlugin( job.data.plugin, job.data.slug ); 378 break;379 case 'install-plugin':380 wp.updates.installPlugin( job.data.slug );381 295 break; 382 296 default: … … 464 378 } ); 465 379 466 $( '.plugin-card .install-now' ).on( 'click', function( e ) {467 e.preventDefault();468 if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.updateLock ) {469 wp.updates.requestFilesystemCredentials();470 }471 var $button = $( e.target );472 if ( $button.hasClass( 'button-disabled' ) ) {473 return;474 }475 wp.updates.installPlugin( $button.data( 'slug' ) );476 } );477 380 } ); 478 381
Note: See TracChangeset
for help on using the changeset viewer.