PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-masterbar / src / admin-menu / class-dashboard-switcher-tracking.php
jetpack / jetpack_vendor / automattic / jetpack-masterbar / src / admin-menu Last commit date
class-admin-menu.php 5 months ago class-atomic-admin-menu.php 3 weeks ago class-base-admin-menu.php 2 months ago class-dashboard-switcher-tracking.php 2 years ago class-domain-only-admin-menu.php 9 months ago class-wpcom-admin-menu.php 5 months ago class-wpcom-email-subscription-checker.php 2 years ago dashicon-set.php 2 years ago globe-icon.svg 2 years ago load.php 9 months ago menu-mappings.php 9 months ago
class-dashboard-switcher-tracking.php
176 lines
1 <?php
2 /**
3 * Quick switcher tracking file.
4 *
5 * @package automattic/jetpack-masterbar
6 */
7
8 namespace Automattic\Jetpack\Masterbar;
9
10 use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
11 use Automattic\Jetpack\Status\Host;
12 use Automattic\Jetpack\Terms_Of_Service;
13 use Automattic\Jetpack\Tracking;
14
15 /**
16 * Class Dashboard_Switcher_Tracking
17 */
18 class Dashboard_Switcher_Tracking {
19
20 /**
21 * Jetpack Tracking library will prefix the event name with "jetpack_*" automatically.
22 */
23 const JETPACK_EVENT_NAME = 'dashboard_quick_switch_link_clicked';
24
25 const WPCOM_EVENT_NAME = 'wpcom_dashboard_quick_switch_link_clicked';
26 /**
27 * Jetpack tracking object.
28 *
29 * @var Tracking
30 */
31 private $tracking;
32
33 /**
34 * Current site plan.
35 *
36 * @var string
37 */
38 private $plan;
39
40 /**
41 * The wpcom_tracks wrapper function.
42 *
43 * @var callable
44 */
45 private $wpcom_tracking;
46
47 /**
48 * Dashboard_Switcher_Tracking constructor.
49 *
50 * @param Tracking $tracking Jetpack tracking object.
51 * @param callable $wpcom_tracking A wrapper over wpcom event record.
52 * @param string $plan The current site plan.
53 */
54 public function __construct( Tracking $tracking, callable $wpcom_tracking, $plan ) {
55 $this->tracking = $tracking;
56 $this->plan = $plan;
57 $this->wpcom_tracking = $wpcom_tracking;
58 }
59
60 /**
61 * Create an event for the Quick switcher when the user changes it's preferred view.
62 *
63 * @param string $screen The screen page.
64 * @param string $view The new preferred view.
65 */
66 public function record_switch_event( $screen, $view ) {
67 $event_props = array(
68 'current_page' => $screen,
69 'destination' => $view,
70 'plan' => $this->plan,
71 );
72
73 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
74 $event_props['blog_id'] = get_current_blog_id();
75
76 /**
77 * Callable injected in the constructor with the static::wpcom_tracks_record_event() static method.
78 *
79 * @see wpcom_tracks_record_event A static method from this class that executes the actual WPCOM event record.
80 */
81 $wpcom_tracking = $this->wpcom_tracking;
82 $wpcom_tracking( $event_props );
83 } else {
84 $this->record_jetpack_event( $event_props );
85 }
86 }
87
88 /**
89 * Get the current site plan or 'N/A' when we cannot determine site's plan.
90 *
91 * @todo: This method can be reused as a wrapper over WPCOM and Atomic as way to get site's current plan (display name).
92 *
93 * @return string
94 */
95 public static function get_plan() {
96 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
97 if ( class_exists( '\WPCOM_Store_API' ) ) {
98 // @todo: Maybe introduce a wrapper for this since we are duplicating it from WPCOM_Admin_Menu:253
99 $products = \WPCOM_Store_API::get_current_plan( \get_current_blog_id() );
100 if ( ! empty( $products['product_slug'] ) ) {
101 return $products['product_slug'];
102 }
103 }
104
105 return 'N/A'; // maybe we should return free or null? At the moment it's safe to return 'N/A' since we use it only for passing it to the event.
106 }
107
108 // @todo: Maybe introduce a helper for this since we are duplicating it from Atomic_Admin_Menu:240
109 $products = Jetpack_Plan::get();
110 if ( ! empty( $products['product_slug'] ) ) {
111 return $products['product_slug'];
112 }
113
114 return 'N/A'; // maybe we should return free or null? At the moment we use it for passing it to the event.
115 }
116
117 /**
118 * Record the event with Jetpack implementation.
119 *
120 * For Atomic sites we mark the Jetpack ToS option temporary as read.
121 *
122 * @todo Remove the jetpack_options_tos_agreed filter for Atomic sites after the Tracking is properly working for AT sites.
123 *
124 * @param array $event_properties The event properties.
125 */
126 private function record_jetpack_event( $event_properties ) {
127 $woa = ( new Host() )->is_woa_site();
128 if ( $woa ) {
129 add_filter( 'jetpack_options', array( __CLASS__, 'mark_jetpack_tos_as_read' ), 10, 2 );
130 }
131
132 $this->tracking->record_user_event( self::JETPACK_EVENT_NAME, $event_properties );
133
134 if ( $woa ) {
135 \remove_filter( 'jetpack_options', array( __CLASS__, 'mark_jetpack_tos_as_read' ) );
136 }
137 }
138
139 /**
140 * Trigger the WPCOM tracks_record_event.
141 *
142 * @param array $event_props Event props.
143 */
144 public static function wpcom_tracks_record_event( $event_props ) {
145 require_lib( 'tracks/client' );
146 \tracks_record_event( \wp_get_current_user(), self::WPCOM_EVENT_NAME, $event_props );
147 }
148
149 /**
150 * Get the tracking product name for the Tracking library.
151 *
152 * The tracking product name is used by the Tracking as a prefix for the event name.
153 *
154 * @return string
155 */
156 public static function get_jetpack_tracking_product() {
157 return ( new Host() )->is_woa_site() ? 'atomic' : 'jetpack';
158 }
159
160 /**
161 * Mark the Jetpack ToS as read for Atomic Sites.
162 *
163 * @param mixed $option_value The value of the Jetpack option.
164 * @param string $option_name The name of the Jetpack option.
165 *
166 * @return bool
167 */
168 public static function mark_jetpack_tos_as_read( $option_value, $option_name ) {
169 if ( Terms_Of_Service::OPTION_NAME === $option_name ) {
170 return true;
171 }
172
173 return $option_value;
174 }
175 }
176