diff -r 3d4e9c994f10 -r a86126ab1dd4 wp/wp-admin/includes/update.php --- a/wp/wp-admin/includes/update.php Tue Oct 22 16:11:46 2019 +0200 +++ b/wp/wp-admin/includes/update.php Tue Dec 15 13:49:49 2020 +0100 @@ -9,6 +9,8 @@ /** * Selects the first update version from the update_core option. * + * @since 2.7.0 + * * @return object|array|false The response from the API on success, false on failure. */ function get_preferred_from_update_core() { @@ -23,7 +25,9 @@ } /** - * Get available core updates. + * Gets available core updates. + * + * @since 2.7.0 * * @param array $options Set $options['dismissed'] to true to show dismissed upgrades too, * set $options['available'] to false to skip not-dismissed updates. @@ -52,7 +56,7 @@ $updates = $from_api->updates; $result = array(); foreach ( $updates as $update ) { - if ( $update->response == 'autoupdate' ) { + if ( 'autoupdate' === $update->response ) { continue; } @@ -72,13 +76,13 @@ } /** - * Gets the best available (and enabled) Auto-Update for WordPress Core. + * Gets the best available (and enabled) Auto-Update for WordPress core. * - * If there's 1.2.3 and 1.3 on offer, it'll choose 1.3 if the installation allows it, else, 1.2.3 + * If there's 1.2.3 and 1.3 on offer, it'll choose 1.3 if the installation allows it, else, 1.2.3. * * @since 3.7.0 * - * @return array|false False on failure, otherwise the core update offering. + * @return object|false The core update offering on success, false on failure. */ function find_core_auto_update() { $updates = get_site_transient( 'update_core' ); @@ -86,12 +90,12 @@ return false; } - include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $auto_update = false; $upgrader = new WP_Automatic_Updater; foreach ( $updates->updates as $update ) { - if ( 'autoupdate' != $update->response ) { + if ( 'autoupdate' !== $update->response ) { continue; } @@ -113,12 +117,14 @@ * * @param string $version Version string to query. * @param string $locale Locale to query. - * @return bool|array False on failure. An array of checksums on success. + * @return array|false An array of checksums on success, false on failure. */ function get_core_checksums( $version, $locale ) { - $url = $http_url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query( compact( 'version', 'locale' ), null, '&' ); + $http_url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query( compact( 'version', 'locale' ), null, '&' ); + $url = $http_url; - if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) { + $ssl = wp_http_supports( array( 'ssl' ) ); + if ( $ssl ) { $url = set_url_scheme( $url, 'https' ); } @@ -130,9 +136,9 @@ if ( $ssl && is_wp_error( $response ) ) { trigger_error( sprintf( - /* translators: %s: support forums URL */ + /* translators: %s: Support forums URL. */ __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ), - __( 'https://wordpress.org/support/' ) + __( 'https://wordpress.org/support/forums/' ) ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); @@ -154,6 +160,10 @@ } /** + * Dismisses core update. + * + * @since 2.7.0 + * * @param object $update * @return bool */ @@ -164,6 +174,10 @@ } /** + * Undismisses core update. + * + * @since 2.7.0 + * * @param string $version * @param string $locale * @return bool @@ -181,9 +195,13 @@ } /** - * @param string $version - * @param string $locale - * @return object|false + * Finds the available update for WordPress core. + * + * @since 2.7.0 + * + * @param string $version Version string to find the update for. + * @param string $locale Locale to find the update for. + * @return object|false The core update offering on success, false on failure. */ function find_core_update( $version, $locale ) { $from_api = get_site_transient( 'update_core' ); @@ -202,11 +220,14 @@ } /** + * @since 2.3.0 + * * @param string $msg * @return string */ function core_update_footer( $msg = '' ) { if ( ! current_user_can( 'update_core' ) ) { + /* translators: %s: WordPress version. */ return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); } @@ -229,21 +250,33 @@ 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' ) ); + return sprintf( + /* translators: 1: WordPress version number, 2: URL to WordPress Updates screen. */ + __( '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 ) . ''; + return sprintf( + '%s', + network_admin_url( 'update-core.php' ), + /* translators: %s: WordPress version. */ + sprintf( __( 'Get Version %s' ), $cur->current ) + ); case 'latest': default: + /* translators: %s: WordPress version. */ return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); } } /** + * @since 2.3.0 + * * @global string $pagenow - * @return false|void + * @return void|false */ function update_nag() { if ( is_multisite() && ! current_user_can( 'update_core' ) ) { @@ -252,25 +285,25 @@ 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 ) || 'upgrade' !== $cur->response ) { return false; } $version_url = sprintf( - /* translators: %s: WordPress version */ + /* 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: URL to WordPress 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.' ), $version_url, $cur->current, @@ -279,16 +312,21 @@ ); } else { $msg = sprintf( - /* translators: 1: URL to WordPress 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.' ), $version_url, $cur->current ); } - echo "
$msg
"; + + echo "
$msg
"; } -// Called directly from dashboard +/** + * Displays WordPress version and active theme in the 'At a Glance' dashboard widget. + * + * @since 2.5.0 + */ function update_right_now_message() { $theme_name = wp_get_theme(); if ( current_user_can( 'switch_themes' ) ) { @@ -300,12 +338,17 @@ if ( current_user_can( 'update_core' ) ) { $cur = get_preferred_from_update_core(); - if ( isset( $cur->response ) && $cur->response == 'upgrade' ) { - $msg .= '' . sprintf( __( 'Update to %s' ), $cur->current ? $cur->current : __( 'Latest' ) ) . ' '; + if ( isset( $cur->response ) && 'upgrade' === $cur->response ) { + $msg .= sprintf( + '%s ', + network_admin_url( 'update-core.php' ), + /* translators: %s: WordPress version number, or 'Latest' string. */ + sprintf( __( 'Update to %s' ), $cur->current ? $cur->current : __( 'Latest' ) ) + ); } } - /* translators: 1: version number, 2: theme name */ + /* translators: 1: Version number, 2: Theme name. */ $content = __( 'WordPress %1$s running %2$s theme.' ); /** @@ -355,7 +398,7 @@ 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 ); + add_action( "after_plugin_row_{$plugin_file}", 'wp_plugin_update_row', 10, 2 ); } } } @@ -363,9 +406,11 @@ /** * Displays update information for a plugin. * + * @since 2.3.0 + * * @param string $file Plugin basename. * @param array $plugin_data Plugin information. - * @return false|void + * @return void|false */ function wp_plugin_update_row( $file, $plugin_data ) { $current = get_site_transient( 'update_plugins' ); @@ -391,7 +436,12 @@ $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' ); + $wp_list_table = _get_list_table( + 'WP_Plugins_List_Table', + array( + 'screen' => get_current_screen(), + ) + ); if ( is_network_admin() || ! is_multisite() ) { if ( is_network_admin() ) { @@ -404,63 +454,73 @@ $compatible_php = is_php_version_compatible( $requires_php ); $notice_type = $compatible_php ? 'notice-warning' : 'notice-error'; - echo '

'; + printf( + '' . + '' . + '

', + $active_class, + esc_attr( $response->slug . '-update' ), + esc_attr( $response->slug ), + esc_attr( $file ), + esc_attr( $wp_list_table->get_column_count() ), + $notice_type + ); if ( ! current_user_can( 'update_plugins' ) ) { - /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */ printf( + /* translators: 1: Plugin name, 2: Details URL, 3: Additional link attributes, 4: Version number. */ __( '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"', - /* translators: 1: plugin name, 2: version number */ + /* 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 ) ); } elseif ( empty( $response->package ) ) { - /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */ printf( + /* translators: 1: Plugin name, 2: Details URL, 3: Additional link attributes, 4: Version number. */ __( '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"', - /* translators: 1: plugin name, 2: version number */ + /* 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 ) ); } else { 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( + /* translators: 1: Plugin name, 2: Details URL, 3: Additional link attributes, 4: Version number, 5: Update URL, 6: Additional link attributes. */ __( '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 */ + /* 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 ) ) + /* translators: %s: Plugin name. */ + esc_attr( sprintf( _x( 'Update %s now', 'plugin' ), $plugin_name ) ) ) ); } else { - /* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number 5: Update PHP page URL */ printf( + /* translators: 1: Plugin name, 2: Details URL, 3: Additional link attributes, 4: Version number 5: URL to Update PHP page. */ __( '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 */ + /* 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 ), @@ -505,13 +565,15 @@ * @type string $package Plugin update package URL. * } */ - do_action( "in_plugin_update_message-{$file}", $plugin_data, $response ); + do_action( "in_plugin_update_message-{$file}", $plugin_data, $response ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores echo '

'; } } /** + * @since 2.9.0 + * * @return array */ function get_theme_updates() { @@ -543,7 +605,7 @@ $themes = array_keys( $themes->response ); foreach ( $themes as $theme ) { - add_action( "after_theme_row_$theme", 'wp_theme_update_row', 10, 2 ); + add_action( "after_theme_row_{$theme}", 'wp_theme_update_row', 10, 2 ); } } } @@ -551,9 +613,11 @@ /** * Displays update information for a theme. * + * @since 3.1.0 + * * @param string $theme_key Theme stylesheet. * @param WP_Theme $theme Theme object. - * @return false|void + * @return void|false */ function wp_theme_update_row( $theme_key, $theme ) { $current = get_site_transient( 'update_themes' ); @@ -578,52 +642,126 @@ $active = $theme->is_allowed( 'network' ) ? ' active' : ''; - 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.' ), - $theme['Name'], - esc_url( $details_url ), - 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'] - ); - } 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.' ), - $theme['Name'], - esc_url( $details_url ), - 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'] - ); + $requires_wp = isset( $response['requires'] ) ? $response['requires'] : null; + $requires_php = isset( $response['requires_php'] ) ? $response['requires_php'] : null; + + $compatible_wp = is_wp_version_compatible( $requires_wp ); + $compatible_php = is_php_version_compatible( $requires_php ); + + printf( + '' . + '' . + '

', + $active, + esc_attr( $theme->get_stylesheet() . '-update' ), + esc_attr( $theme->get_stylesheet() ), + $wp_list_table->get_column_count() + ); + + if ( $compatible_wp && $compatible_php ) { + if ( ! current_user_can( 'update_themes' ) ) { + printf( + /* translators: 1: Theme name, 2: Details URL, 3: Additional link attributes, 4: Version number. */ + __( '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"', + /* 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'] + ); + } elseif ( empty( $response['package'] ) ) { + printf( + /* translators: 1: Theme name, 2: Details URL, 3: Additional link attributes, 4: Version number. */ + __( '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"', + /* 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'] + ); + } else { + printf( + /* translators: 1: Theme name, 2: Details URL, 3: Additional link attributes, 4: Version number, 5: Update URL, 6: Additional link attributes. */ + __( '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"', + /* 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"', + /* translators: %s: Theme name. */ + esc_attr( sprintf( _x( 'Update %s now', 'theme' ), $theme['Name'] ) ) + ) + ); + } } 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.' ), - $theme['Name'], - esc_url( $details_url ), - 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"', - /* translators: %s: theme name */ - esc_attr( sprintf( __( 'Update %s now' ), $theme['Name'] ) ) - ) - ); + if ( ! $compatible_wp && ! $compatible_php ) { + printf( + /* translators: %s: Theme name. */ + __( 'There is a new version of %s available, but it doesn’t work with your versions of WordPress and PHP.' ), + $theme['Name'] + ); + if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) { + printf( + /* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */ + ' ' . __( 'Please update WordPress, and then learn more about updating PHP.' ), + self_admin_url( 'update-core.php' ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '

', '' ); + } elseif ( current_user_can( 'update_core' ) ) { + printf( + /* translators: %s: URL to WordPress Updates screen. */ + ' ' . __( 'Please update WordPress.' ), + self_admin_url( 'update-core.php' ) + ); + } elseif ( current_user_can( 'update_php' ) ) { + printf( + /* translators: %s: URL to Update PHP page. */ + ' ' . __( 'Learn more about updating PHP.' ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '

', '' ); + } + } elseif ( ! $compatible_wp ) { + printf( + /* translators: %s: Theme name. */ + __( 'There is a new version of %s available, but it doesn’t work with your version of WordPress.' ), + $theme['Name'] + ); + if ( current_user_can( 'update_core' ) ) { + printf( + /* translators: %s: URL to WordPress Updates screen. */ + ' ' . __( 'Please update WordPress.' ), + self_admin_url( 'update-core.php' ) + ); + } + } elseif ( ! $compatible_php ) { + printf( + /* translators: %s: Theme name. */ + __( 'There is a new version of %s available, but it doesn’t work with your version of PHP.' ), + $theme['Name'] + ); + if ( current_user_can( 'update_php' ) ) { + printf( + /* translators: %s: URL to Update PHP page. */ + ' ' . __( 'Learn more about updating PHP.' ), + esc_url( wp_get_update_php_url() ) + ); + wp_update_php_annotation( '

', '' ); + } + } } /** @@ -644,17 +782,20 @@ * @type string $package Theme update package URL. * } */ - do_action( "in_theme_update_message-{$theme_key}", $theme, $response ); + do_action( "in_theme_update_message-{$theme_key}", $theme, $response ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores echo '

'; } /** + * @since 2.7.0 + * * @global int $upgrading - * @return false|void + * @return void|false */ function maintenance_nag() { - include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version + // Include an unmodified $wp_version. + require ABSPATH . WPINC . '/version.php'; global $upgrading; $nag = isset( $upgrading ); if ( ! $nag ) { @@ -670,7 +811,7 @@ * 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 ( isset( $failed['attempted'] ) && version_compare( $failed['attempted'], $wp_version, $comparison ) ) { $nag = true; } } @@ -680,12 +821,16 @@ } 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' ); + $msg = sprintf( + /* translators: %s: URL to WordPress Updates screen. */ + __( '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
"; + echo "
$msg
"; } /** @@ -716,24 +861,24 @@ <# if ( 1 === data.successes ) { #> <# if ( 'plugin' === data.type ) { #> <# } else { #> <# } #> <# } else { #> <# if ( 'plugin' === data.type ) { #> <# } else { #> <# } #> @@ -743,12 +888,12 @@
is_disabled(); + + switch ( $type ) { + case 'plugin': + /** + * Filters whether plugins auto-update is enabled. + * + * @since 5.5.0 + * + * @param bool $enabled True if plugins auto-update is enabled, false otherwise. + */ + return apply_filters( 'plugins_auto_update_enabled', $enabled ); + case 'theme': + /** + * Filters whether themes auto-update is enabled. + * + * @since 5.5.0 + * + * @param bool $enabled True if themes auto-update is enabled, false otherwise. + */ + return apply_filters( 'themes_auto_update_enabled', $enabled ); + } + + return false; +} + +/** + * Determines the appropriate auto-update message to be displayed. + * + * @since 5.5.0 + * + * @return string The update message to be shown. + */ +function wp_get_auto_update_message() { + $next_update_time = wp_next_scheduled( 'wp_version_check' ); + + // Check if the event exists. + if ( false === $next_update_time ) { + $message = __( 'Automatic update not scheduled. There may be a problem with WP-Cron.' ); + } else { + $time_to_next_update = human_time_diff( intval( $next_update_time ) ); + + // See if cron is overdue. + $overdue = ( time() - $next_update_time ) > 0; + + if ( $overdue ) { + $message = sprintf( + /* translators: %s: Duration that WP-Cron has been overdue. */ + __( 'Automatic update overdue by %s. There may be a problem with WP-Cron.' ), + $time_to_next_update + ); + } else { + $message = sprintf( + /* translators: %s: Time until the next update. */ + __( 'Automatic update scheduled in %s.' ), + $time_to_next_update + ); + } + } + + return $message; +}