Make WordPress Core

Ticket #47223: 47223.7.diff

File 47223.7.diff, 4.1 KB (added by afragen, 6 years ago)

fixed with feedback from @clorith

  • wp-admin/includes/class-wp-site-health.php

    diff --git a/wp-admin/includes/class-wp-site-health.php b/wp-admin/includes/class-wp-site-health.php
    index d8c097c93d..4659e5610e 100644
    a b class WP_Site_Health { 
    1111        private $mysql_min_version_check;
    1212        private $mysql_rec_version_check;
    1313
    14         public  $is_mariadb                          = false;
     14        public $is_mariadb                           = false;
    1515        private $mysql_server_version                = '';
    1616        private $health_check_mysql_required_version = '5.5';
    1717        private $health_check_mysql_rec_version      = '';
    1818
    1919        public $schedules;
    2020        public $crons;
    21         public $last_missed_cron = null;
     21        public $last_missed_cron     = null;
     22        public $last_late_cron       = null;
     23        private $timeout_missed_cron = null;
     24        private $timeout_late_cron   = null;
    2225
    2326        /**
    2427         * WP_Site_Health constructor.
    class WP_Site_Health { 
    2831        public function __construct() {
    2932                $this->prepare_sql_data();
    3033
     34                $this->timeout_late_cron   = 0;
     35                $this->timeout_missed_cron = - 5 * MINUTE_IN_SECONDS;
     36
     37                if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
     38                        $this->timeout_late_cron   = - 15 * MINUTE_IN_SECONDS;
     39                        $this->timeout_missed_cron = - 1 * HOUR_IN_SECONDS;
     40                }
     41
    3142                add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
    3243
    3344                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
    class WP_Site_Health { 
    14161427                                        $this->has_missed_cron()->get_error_message()
    14171428                                )
    14181429                        );
    1419                 } else {
    1420                         if ( $this->has_missed_cron() ) {
    1421                                 $result['status'] = 'recommended';
     1430                } elseif ( $this->has_missed_cron() ) {
     1431                        $result['status'] = 'recommended';
    14221432
    1423                                 $result['label'] = __( 'A scheduled event has failed' );
     1433                        $result['label'] = __( 'A scheduled event has failed' );
    14241434
    1425                                 $result['description'] = sprintf(
    1426                                         '<p>%s</p>',
    1427                                         sprintf(
    1428                                                 /* translators: %s: The name of the failed cron event. */
    1429                                                 __( 'The scheduled event, %s, failed to run. Your site still works, but this may indicate that scheduling posts or automated updates may not work as intended.' ),
    1430                                                 $this->last_missed_cron
    1431                                         )
    1432                                 );
    1433                         }
     1435                        $result['description'] = sprintf(
     1436                                '<p>%s</p>',
     1437                                sprintf(
     1438                                        /* translators: %s: The name of the failed cron event. */
     1439                                        __( 'The scheduled event, %s, failed to run. Your site still works, but this may indicate that scheduling posts or automated updates may not work as intended.' ),
     1440                                        $this->last_missed_cron
     1441                                )
     1442                        );
     1443                } elseif ( $this->has_late_cron() ) {
     1444                        $result['status'] = 'recommended';
     1445
     1446                        $result['label'] = __( 'A scheduled event is late' );
     1447
     1448                        $result['description'] = sprintf(
     1449                                '<p>%s</p>',
     1450                                sprintf(
     1451                                        /* translators: %s: The name of the late cron event. */
     1452                                        __( 'The scheduled event, %s, is late to run. Your site still works, but this may indicate that scheduling posts or automated updates may not work as intended.' ),
     1453                                        $this->last_late_cron
     1454                                )
     1455                        );
    14341456                }
    14351457
    14361458                return $result;
    class WP_Site_Health { 
    19261948                }
    19271949
    19281950                foreach ( $this->crons as $id => $cron ) {
    1929                         if ( ( $cron->time - time() ) < 0 ) {
     1951                        if ( ( $cron->time - time() ) < $this->timeout_missed_cron ) {
    19301952                                $this->last_missed_cron = $cron->hook;
    19311953                                return true;
    19321954                        }
    class WP_Site_Health { 
    19351957                return false;
    19361958        }
    19371959
     1960        /**
     1961         * Check if any scheduled tasks are late.
     1962         *
     1963         * Returns a boolean value of `true` if a scheduled task is late and ends processing. If the list of
     1964         * crons is an instance of WP_Error, return the instance instead of a boolean value.
     1965         *
     1966         * @return bool|WP_Error true if a cron is late, false if it wasn't. WP_Error if the cron is set to that.
     1967         */
     1968        public function has_late_cron() {
     1969                if ( is_wp_error( $this->crons ) ) {
     1970                        return $this->crons;
     1971                }
     1972
     1973                foreach ( $this->crons as $id => $cron ) {
     1974                        $cron_offset = $cron->time - time();
     1975                        if ( $cron_offset >= $this->timeout_missed_cron
     1976                                 && ( $cron_offset < $this->timeout_late_cron ) ) {
     1977                                $this->last_late_cron = $cron->hook;
     1978                                return true;
     1979                        }
     1980                }
     1981
     1982                return false;
     1983        }
     1984
    19381985        /**
    19391986         * Run a loopback test on our site.
    19401987         *