diff -r c7c34916027a -r 177826044cd9 wp/wp-admin/includes/update.php --- a/wp/wp-admin/includes/update.php Mon Oct 14 18:06:33 2019 +0200 +++ b/wp/wp-admin/includes/update.php Mon Oct 14 18:28:13 2019 +0200 @@ -13,10 +13,12 @@ */ function get_preferred_from_update_core() { $updates = get_core_updates(); - if ( ! is_array( $updates ) ) + if ( ! is_array( $updates ) ) { return false; - if ( empty( $updates ) ) + } + if ( empty( $updates ) ) { return (object) array( 'response' => 'latest' ); + } return $updates[0]; } @@ -24,36 +26,45 @@ * Get available core updates. * * @param array $options Set $options['dismissed'] to true to show dismissed upgrades too, - * set $options['available'] to false to skip not-dismissed updates. + * set $options['available'] to false to skip not-dismissed updates. * @return array|false Array of the update objects on success, false on failure. */ function get_core_updates( $options = array() ) { - $options = array_merge( array( 'available' => true, 'dismissed' => false ), $options ); + $options = array_merge( + array( + 'available' => true, + 'dismissed' => false, + ), + $options + ); $dismissed = get_site_option( 'dismissed_update_core' ); - if ( ! is_array( $dismissed ) ) + if ( ! is_array( $dismissed ) ) { $dismissed = array(); + } $from_api = get_site_transient( 'update_core' ); - if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) { return false; + } $updates = $from_api->updates; - $result = array(); + $result = array(); foreach ( $updates as $update ) { - if ( $update->response == 'autoupdate' ) + if ( $update->response == 'autoupdate' ) { continue; + } if ( array_key_exists( $update->current . '|' . $update->locale, $dismissed ) ) { if ( $options['dismissed'] ) { $update->dismissed = true; - $result[] = $update; + $result[] = $update; } } else { if ( $options['available'] ) { $update->dismissed = false; - $result[] = $update; + $result[] = $update; } } } @@ -71,22 +82,26 @@ */ function find_core_auto_update() { $updates = get_site_transient( 'update_core' ); - if ( ! $updates || empty( $updates->updates ) ) + if ( ! $updates || empty( $updates->updates ) ) { return false; + } include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); $auto_update = false; - $upgrader = new WP_Automatic_Updater; + $upgrader = new WP_Automatic_Updater; foreach ( $updates->updates as $update ) { - if ( 'autoupdate' != $update->response ) + if ( 'autoupdate' != $update->response ) { continue; + } - if ( ! $upgrader->should_update( 'core', $update, ABSPATH ) ) + if ( ! $upgrader->should_update( 'core', $update, ABSPATH ) ) { continue; + } - if ( ! $auto_update || version_compare( $update->current, $auto_update->current, '>' ) ) + if ( ! $auto_update || version_compare( $update->current, $auto_update->current, '>' ) ) { $auto_update = $update; + } } return $auto_update; } @@ -103,8 +118,9 @@ function get_core_checksums( $version, $locale ) { $url = $http_url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query( compact( 'version', 'locale' ), null, '&' ); - if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) { $url = set_url_scheme( $url, 'https' ); + } $options = array( 'timeout' => wp_doing_cron() ? 30 : 3, @@ -123,20 +139,21 @@ $response = wp_remote_get( $http_url, $options ); } - if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { return false; + } $body = trim( wp_remote_retrieve_body( $response ) ); $body = json_decode( $body, true ); - if ( ! is_array( $body ) || ! isset( $body['checksums'] ) || ! is_array( $body['checksums'] ) ) + if ( ! is_array( $body ) || ! isset( $body['checksums'] ) || ! is_array( $body['checksums'] ) ) { return false; + } return $body['checksums']; } /** - * * @param object $update * @return bool */ @@ -147,24 +164,23 @@ } /** - * * @param string $version * @param string $locale * @return bool */ function undismiss_core_update( $version, $locale ) { $dismissed = get_site_option( 'dismissed_update_core' ); - $key = $version . '|' . $locale; + $key = $version . '|' . $locale; - if ( ! isset( $dismissed[$key] ) ) + if ( ! isset( $dismissed[ $key ] ) ) { return false; + } - unset( $dismissed[$key] ); + unset( $dismissed[ $key ] ); return update_site_option( 'dismissed_update_core', $dismissed ); } /** - * * @param string $version * @param string $locale * @return object|false @@ -172,94 +188,100 @@ function find_core_update( $version, $locale ) { $from_api = get_site_transient( 'update_core' ); - if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) { return false; + } $updates = $from_api->updates; foreach ( $updates as $update ) { - if ( $update->current == $version && $update->locale == $locale ) + if ( $update->current == $version && $update->locale == $locale ) { return $update; + } } return false; } /** - * * @param string $msg * @return string */ function core_update_footer( $msg = '' ) { - if ( !current_user_can('update_core') ) + if ( ! current_user_can( 'update_core' ) ) { return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + } $cur = get_preferred_from_update_core(); - if ( ! is_object( $cur ) ) + if ( ! is_object( $cur ) ) { $cur = new stdClass; + } - if ( ! isset( $cur->current ) ) + if ( ! isset( $cur->current ) ) { $cur->current = ''; + } - if ( ! isset( $cur->url ) ) + if ( ! isset( $cur->url ) ) { $cur->url = ''; + } - if ( ! isset( $cur->response ) ) + if ( ! isset( $cur->response ) ) { $cur->response = ''; + } switch ( $cur->response ) { - case 'development' : - /* translators: 1: WordPress version number, 2: WordPress updates admin screen URL */ - return sprintf( __( 'You are using a development version (%1$s). Cool! Please stay updated.' ), get_bloginfo( 'version', 'display' ), network_admin_url( 'update-core.php' ) ); + case 'development': + /* translators: 1: WordPress version number, 2: WordPress updates admin screen URL */ + return sprintf( __( 'You are using a development version (%1$s). Cool! Please stay updated.' ), get_bloginfo( 'version', 'display' ), network_admin_url( 'update-core.php' ) ); - case 'upgrade' : - return '' . sprintf( __( 'Get Version %s' ), $cur->current ) . ''; + case 'upgrade': + return '' . sprintf( __( 'Get Version %s' ), $cur->current ) . ''; - case 'latest' : - default : - return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + case 'latest': + default: + return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); } } /** - * * @global string $pagenow * @return false|void */ function update_nag() { - if ( is_multisite() && !current_user_can('update_core') ) + if ( is_multisite() && ! current_user_can( 'update_core' ) ) { return false; + } global $pagenow; - if ( 'update-core.php' == $pagenow ) + if ( 'update-core.php' == $pagenow ) { return; + } $cur = get_preferred_from_update_core(); - if ( ! isset( $cur->response ) || $cur->response != 'upgrade' ) + if ( ! isset( $cur->response ) || $cur->response != 'upgrade' ) { return false; + } + + $version_url = sprintf( + /* translators: %s: WordPress version */ + esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), + sanitize_title( $cur->current ) + ); if ( current_user_can( 'update_core' ) ) { $msg = sprintf( - /* translators: 1: Codex URL to release notes, 2: new WordPress version, 3: URL to network admin, 4: accessibility text */ + /* translators: 1: URL to WordPress release notes, 2: new WordPress version, 3: URL to network admin, 4: accessibility text */ __( 'WordPress %2$s is available! Please update now.' ), - sprintf( - /* translators: %s: WordPress version */ - esc_url( __( 'https://codex.wordpress.org/Version_%s' ) ), - $cur->current - ), + $version_url, $cur->current, network_admin_url( 'update-core.php' ), esc_attr__( 'Please update WordPress now' ) ); } else { $msg = sprintf( - /* translators: 1: Codex URL to release notes, 2: new WordPress version */ + /* translators: 1: URL to WordPress release notes, 2: new WordPress version */ __( 'WordPress %2$s is available! Please notify the site administrator.' ), - sprintf( - /* translators: %s: WordPress version */ - esc_url( __( 'https://codex.wordpress.org/Version_%s' ) ), - $cur->current - ), + $version_url, $cur->current ); } @@ -275,11 +297,12 @@ $msg = ''; - if ( current_user_can('update_core') ) { + if ( current_user_can( 'update_core' ) ) { $cur = get_preferred_from_update_core(); - if ( isset( $cur->response ) && $cur->response == 'upgrade' ) + if ( isset( $cur->response ) && $cur->response == 'upgrade' ) { $msg .= '' . sprintf( __( 'Update to %s' ), $cur->current ? $cur->current : __( 'Latest' ) ) . ' '; + } } /* translators: 1: version number, 2: theme name */ @@ -307,12 +330,12 @@ * @return array */ function get_plugin_updates() { - $all_plugins = get_plugins(); + $all_plugins = get_plugins(); $upgrade_plugins = array(); - $current = get_site_transient( 'update_plugins' ); - foreach ( (array)$all_plugins as $plugin_file => $plugin_data) { + $current = get_site_transient( 'update_plugins' ); + foreach ( (array) $all_plugins as $plugin_file => $plugin_data ) { if ( isset( $current->response[ $plugin_file ] ) ) { - $upgrade_plugins[ $plugin_file ] = (object) $plugin_data; + $upgrade_plugins[ $plugin_file ] = (object) $plugin_data; $upgrade_plugins[ $plugin_file ]->update = $current->response[ $plugin_file ]; } } @@ -324,11 +347,12 @@ * @since 2.9.0 */ function wp_plugin_update_rows() { - if ( !current_user_can('update_plugins' ) ) + if ( ! current_user_can( 'update_plugins' ) ) { return; + } $plugins = get_site_transient( 'update_plugins' ); - if ( isset($plugins->response) && is_array($plugins->response) ) { + if ( isset( $plugins->response ) && is_array( $plugins->response ) ) { $plugins = array_keys( $plugins->response ); foreach ( $plugins as $plugin_file ) { add_action( "after_plugin_row_$plugin_file", 'wp_plugin_update_row', 10, 2 ); @@ -352,7 +376,10 @@ $response = $current->response[ $file ]; $plugins_allowedtags = array( - 'a' => array( 'href' => array(), 'title' => array() ), + 'a' => array( + 'href' => array(), + 'title' => array(), + ), 'abbr' => array( 'title' => array() ), 'acronym' => array( 'title' => array() ), 'code' => array(), @@ -360,8 +387,8 @@ 'strong' => array(), ); - $plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags ); - $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $response->slug . '§ion=changelog&TB_iframe=true&width=600&height=800' ); + $plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags ); + $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $response->slug . '§ion=changelog&TB_iframe=true&width=600&height=800' ); /** @var WP_Plugins_List_Table $wp_list_table */ $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' ); @@ -373,46 +400,74 @@ $active_class = is_plugin_active( $file ) ? ' active' : ''; } - echo '

'; + $requires_php = isset( $response->requires_php ) ? $response->requires_php : null; + $compatible_php = is_php_version_compatible( $requires_php ); + $notice_type = $compatible_php ? 'notice-warning' : 'notice-error'; + + echo '

'; if ( ! current_user_can( 'update_plugins' ) ) { /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */ - printf( __( 'There is a new version of %1$s available. View version %4$s details.' ), + printf( + __( 'There is a new version of %1$s available. View version %4$s details.' ), $plugin_name, esc_url( $details_url ), - sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"', + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', /* translators: 1: plugin name, 2: version number */ esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) ), - $response->new_version + esc_attr( $response->new_version ) ); } elseif ( empty( $response->package ) ) { /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */ - printf( __( 'There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin.' ), + printf( + __( 'There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin.' ), $plugin_name, esc_url( $details_url ), - sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"', + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', /* translators: 1: plugin name, 2: version number */ esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) ), - $response->new_version + esc_attr( $response->new_version ) ); } else { - /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number, 5: update URL, 6: additional link attributes */ - printf( __( 'There is a new version of %1$s available. View version %4$s details or update now.' ), - $plugin_name, - esc_url( $details_url ), - sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"', - /* translators: 1: plugin name, 2: version number */ - esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) - ), - $response->new_version, - wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file, 'upgrade-plugin_' . $file ), - sprintf( 'class="update-link" aria-label="%s"', - /* translators: %s: plugin name */ - esc_attr( sprintf( __( 'Update %s now' ), $plugin_name ) ) - ) - ); + if ( $compatible_php ) { + /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number, 5: update URL, 6: additional link attributes */ + printf( + __( 'There is a new version of %1$s available. View version %4$s details or update now.' ), + $plugin_name, + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: plugin name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) + ), + esc_attr( $response->new_version ), + wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file, 'upgrade-plugin_' . $file ), + sprintf( + 'class="update-link" aria-label="%s"', + /* translators: %s: plugin name */ + esc_attr( sprintf( __( 'Update %s now' ), $plugin_name ) ) + ) + ); + } else { + /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number 5: Update PHP page URL */ + printf( + __( 'There is a new version of %1$s available, but it doesn’t work with your version of PHP. View version %4$s details or learn more about updating PHP.' ), + $plugin_name, + esc_url( $details_url ), + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', + /* translators: 1: plugin name, 2: version number */ + esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_name, $response->new_version ) ) + ), + esc_attr( $response->new_version ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '
', '' ); + } } /** @@ -457,18 +512,18 @@ } /** - * * @return array */ function get_theme_updates() { - $current = get_site_transient('update_themes'); + $current = get_site_transient( 'update_themes' ); - if ( ! isset( $current->response ) ) + if ( ! isset( $current->response ) ) { return array(); + } $update_themes = array(); foreach ( $current->response as $stylesheet => $data ) { - $update_themes[ $stylesheet ] = wp_get_theme( $stylesheet ); + $update_themes[ $stylesheet ] = wp_get_theme( $stylesheet ); $update_themes[ $stylesheet ]->update = $data; } @@ -479,11 +534,12 @@ * @since 3.1.0 */ function wp_theme_update_rows() { - if ( !current_user_can('update_themes' ) ) + if ( ! current_user_can( 'update_themes' ) ) { return; + } $themes = get_site_transient( 'update_themes' ); - if ( isset($themes->response) && is_array($themes->response) ) { + if ( isset( $themes->response ) && is_array( $themes->response ) ) { $themes = array_keys( $themes->response ); foreach ( $themes as $theme ) { @@ -508,11 +564,14 @@ $response = $current->response[ $theme_key ]; - $details_url = add_query_arg( array( - 'TB_iframe' => 'true', - 'width' => 1024, - 'height' => 800, - ), $current->response[ $theme_key ]['url'] ); + $details_url = add_query_arg( + array( + 'TB_iframe' => 'true', + 'width' => 1024, + 'height' => 800, + ), + $current->response[ $theme_key ]['url'] + ); /** @var WP_MS_Themes_List_Table $wp_list_table */ $wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' ); @@ -522,10 +581,12 @@ echo '

'; if ( ! current_user_can( 'update_themes' ) ) { /* translators: 1: theme name, 2: details URL, 3: additional link attributes, 4: version number */ - printf( __( 'There is a new version of %1$s available. View version %4$s details.'), + printf( + __( 'There is a new version of %1$s available. View version %4$s details.' ), $theme['Name'], esc_url( $details_url ), - sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"', + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', /* translators: 1: theme name, 2: version number */ esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $theme['Name'], $response['new_version'] ) ) ), @@ -533,10 +594,12 @@ ); } elseif ( empty( $response['package'] ) ) { /* translators: 1: theme name, 2: details URL, 3: additional link attributes, 4: version number */ - printf( __( 'There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme.' ), + printf( + __( 'There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme.' ), $theme['Name'], esc_url( $details_url ), - sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"', + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', /* translators: 1: theme name, 2: version number */ esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $theme['Name'], $response['new_version'] ) ) ), @@ -544,16 +607,19 @@ ); } else { /* translators: 1: theme name, 2: details URL, 3: additional link attributes, 4: version number, 5: update URL, 6: additional link attributes */ - printf( __( 'There is a new version of %1$s available. View version %4$s details or update now.' ), + printf( + __( 'There is a new version of %1$s available. View version %4$s details or update now.' ), $theme['Name'], esc_url( $details_url ), - sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"', + sprintf( + 'class="thickbox open-plugin-details-modal" aria-label="%s"', /* translators: 1: theme name, 2: version number */ esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $theme['Name'], $response['new_version'] ) ) ), $response['new_version'], wp_nonce_url( self_admin_url( 'update.php?action=upgrade-theme&theme=' ) . $theme_key, 'upgrade-theme_' . $theme_key ), - sprintf( 'class="update-link" aria-label="%s"', + sprintf( + 'class="update-link" aria-label="%s"', /* translators: %s: theme name */ esc_attr( sprintf( __( 'Update %s now' ), $theme['Name'] ) ) ) @@ -584,7 +650,6 @@ } /** - * * @global int $upgrading * @return false|void */ @@ -605,17 +670,20 @@ * This flag is cleared whenever a successful update occurs using Core_Upgrader. */ $comparison = ! empty( $failed['critical'] ) ? '>=' : '>'; - if ( version_compare( $failed['attempted'], $wp_version, $comparison ) ) + if ( version_compare( $failed['attempted'], $wp_version, $comparison ) ) { $nag = true; + } } - if ( ! $nag ) + if ( ! $nag ) { return false; + } - if ( current_user_can('update_core') ) - $msg = sprintf( __('An automated WordPress update has failed to complete - please attempt the update again now.'), 'update-core.php' ); - else - $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.'); + if ( current_user_can( 'update_core' ) ) { + $msg = sprintf( __( 'An automated WordPress update has failed to complete - please attempt the update again now.' ), 'update-core.php' ); + } else { + $msg = __( 'An automated WordPress update has failed to complete! Please notify the site administrator.' ); + } echo "

$msg
"; } @@ -762,3 +830,32 @@ +
+

+ Exit Recovery Mode' ), + esc_url( $url ) + ); + ?> +

+
+