Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
75.00% covered (warning)
75.00%
12 / 16
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Jetpack_Heartbeat
75.00% covered (warning)
75.00%
12 / 16
75.00% covered (warning)
75.00%
3 / 4
9.00
0.00% covered (danger)
0.00%
0 / 1
 init
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 generate_stats_array
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
3
 add_stats_to_heartbeat
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
1<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2/**
3 * Jetpack Heartbeat.
4 *
5 * @package automattic/jetpack
6 */
7
8use Automattic\Jetpack\Heartbeat;
9
10/**
11 * Jetpack Heartbeat.
12 */
13class Jetpack_Heartbeat {
14
15    /**
16     * Holds the singleton instance of this class
17     *
18     * @since 2.3.3
19     * @var Jetpack_Heartbeat
20     */
21    private static $instance = false;
22
23    /**
24     * Holds the singleton instance of the proxied class
25     *
26     * @since 8.9.0
27     * @var Automattic\Jetpack\Heartbeat
28     */
29    private static $proxied_instance = false;
30
31    /**
32     * Singleton
33     *
34     * @since 2.3.3
35     * @static
36     * @return Jetpack_Heartbeat
37     */
38    public static function init() {
39        if ( ! self::$instance ) {
40            self::$instance         = new Jetpack_Heartbeat();
41            self::$proxied_instance = Heartbeat::init();
42        }
43
44        return self::$instance;
45    }
46
47    /**
48     * Constructor for singleton
49     *
50     * @since 2.3.3
51     */
52    private function __construct() {
53        add_filter( 'jetpack_heartbeat_stats_array', array( $this, 'add_stats_to_heartbeat' ) );
54    }
55
56    /**
57     * Generates Jetpack plugin heartbeat stats data.
58     *
59     * Site environment stats (WordPress/PHP versions, site configuration, etc.) are generated by
60     * the Connection package via `Automattic\Jetpack\Heartbeat::get_environment_stats()` so they are
61     * reported for every connected site. This method only returns Jetpack-plugin-specific stats.
62     *
63     * @param string $prefix Prefix to add before stats identifier.
64     *
65     * @return array The stats array.
66     */
67    public static function generate_stats_array( $prefix = '' ) {
68        $return = array();
69
70        $return[ "{$prefix}version" ]        = JETPACK__VERSION;
71        $return[ "{$prefix}branch" ]         = (float) JETPACK__VERSION;
72        $return[ "{$prefix}manage-enabled" ] = true;
73
74        foreach ( Jetpack::get_available_modules() as $slug ) {
75            $return[ "{$prefix}module-{$slug}" ] = Jetpack::is_module_active( $slug ) ? 'on' : 'off';
76        }
77
78        return $return;
79    }
80
81    /**
82     * Add Jetpack Stats array to Heartbeat if Jetpack is connected
83     *
84     * @since 8.9.0
85     *
86     * @param array $stats Jetpack Heartbeat stats.
87     * @return array $stats
88     */
89    public function add_stats_to_heartbeat( $stats ) {
90
91        if ( ! Jetpack::is_connection_ready() ) {
92            return $stats;
93        }
94
95        $jetpack_stats = self::generate_stats_array();
96
97        return array_merge( $stats, $jetpack_stats );
98    }
99}