PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
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-stats-admin / src / class-notices.php
jetpack / jetpack_vendor / automattic / jetpack-stats-admin / src Last commit date
class-admin-post-list-column.php 3 days ago class-dashboard.php 3 days ago class-main.php 3 days ago class-notices.php 8 months ago class-odyssey-assets.php 2 weeks ago class-odyssey-config-data.php 3 days ago class-rest-controller.php 1 month ago class-wp-dashboard-odyssey-widget.php 2 years ago class-wpcom-client.php 3 days ago
class-notices.php
140 lines
1 <?php
2 /**
3 * A class that handles the notices for the Stats Admin dashboard.
4 *
5 * @package automattic/jetpack-stats-admin
6 */
7
8 namespace Automattic\Jetpack\Stats_Admin;
9
10 use Automattic\Jetpack\Stats\Options as Stats_Options;
11 use Jetpack_Options;
12
13 /**
14 * The Notices class handles the notices for the Stats Admin dashboard.
15 *
16 * @package Automattic\Jetpack\Stats_Admin
17 */
18 class Notices {
19 const STATS_DASHBOARD_NOTICES_CACHE_KEY = 'jetpack_stats_dashboard_notices_cache_key';
20 const OPT_OUT_NEW_STATS_NOTICE_ID = 'opt_out_new_stats';
21 const NEW_STATS_FEEDBACK_NOTICE_ID = 'new_stats_feedback';
22 const OPT_IN_NEW_STATS_NOTICE_ID = 'opt_in_new_stats';
23 const GDPR_COOKIE_CONSENT_NOTICE_ID = 'gdpr_cookie_consent';
24
25 const VIEWS_TO_SHOW_FEEDBACK = 3;
26 const POSTPONE_OPT_IN_NOTICE_DAYS = 30;
27
28 /**
29 * Update notice status.
30 *
31 * @param mixed $id ID of the notice.
32 * @param mixed $status Status of the notice.
33 * @param int $postponed_for Postponed for how many seconds.
34 * @return bool
35 */
36 public function update_notice( $id, $status, $postponed_for = 0 ) {
37 delete_transient( self::STATS_DASHBOARD_NOTICES_CACHE_KEY );
38 return WPCOM_Client::request_as_blog(
39 sprintf(
40 '/sites/%d/jetpack-stats-dashboard/notices',
41 Jetpack_Options::get_option( 'id' )
42 ),
43 'v2',
44 array(
45 'timeout' => 5,
46 'method' => 'POST',
47 'headers' => array(
48 'Content-Type' => 'application/json',
49 ),
50 ),
51 wp_json_encode(
52 array(
53 'id' => $id,
54 'status' => $status,
55 'postponed_for' => $postponed_for,
56 ),
57 JSON_UNESCAPED_SLASHES
58 ),
59 'wpcom'
60 );
61 }
62
63 /**
64 * Return an array of notices IDs as keys and their value to flag whther to show them.
65 *
66 * @return array
67 */
68 public function get_notices_to_show() {
69 $notices_wpcom = $this->get_notices_from_wpcom();
70
71 $new_stats_enabled = Stats_Options::get_option( 'enable_odyssey_stats' );
72 $stats_views = intval( Stats_Options::get_option( 'views' ) );
73 $odyssey_stats_changed_at = intval( Stats_Options::get_option( 'odyssey_stats_changed_at' ) );
74
75 // Check if Jetpack is integrated with the Complianz plugin, which blocks the Stats.
76 $complianz_options_integrations = get_option( 'complianz_options_integrations' );
77 $is_jetpack_blocked_by_complianz = ! isset( $complianz_options_integrations['jetpack'] ) || $complianz_options_integrations['jetpack'];
78
79 return array_merge(
80 $notices_wpcom,
81 array(
82 // Show Opt-in notice 30 days after the new stats being disabled.
83 self::OPT_IN_NEW_STATS_NOTICE_ID => ! $new_stats_enabled
84 && $odyssey_stats_changed_at < time() - self::POSTPONE_OPT_IN_NOTICE_DAYS * DAY_IN_SECONDS
85 && ! $this->is_notice_hidden( self::OPT_IN_NEW_STATS_NOTICE_ID ),
86
87 // Show feedback notice after 3 views of the new stats.
88 self::NEW_STATS_FEEDBACK_NOTICE_ID => $new_stats_enabled
89 && $stats_views >= self::VIEWS_TO_SHOW_FEEDBACK
90 && ! $this->is_notice_hidden( self::NEW_STATS_FEEDBACK_NOTICE_ID ),
91
92 // Show opt-out notice before 3 views of the new stats, where 3 is included.
93 self::OPT_OUT_NEW_STATS_NOTICE_ID => $new_stats_enabled
94 && $stats_views < self::VIEWS_TO_SHOW_FEEDBACK
95 && ! $this->is_notice_hidden( self::OPT_OUT_NEW_STATS_NOTICE_ID ),
96
97 // GDPR cookie consent notice for Complianz users.
98 self::GDPR_COOKIE_CONSENT_NOTICE_ID => class_exists( 'COMPLIANZ' ) && $is_jetpack_blocked_by_complianz
99 && ! $this->is_notice_hidden( self::GDPR_COOKIE_CONSENT_NOTICE_ID ),
100 )
101 );
102 }
103
104 /**
105 * Get the array of hidden notices from WPCOM.
106 */
107 public function get_notices_from_wpcom() {
108 $notices_wpcom = WPCOM_Client::request_as_blog_cached(
109 sprintf(
110 '/sites/%d/jetpack-stats-dashboard/notices',
111 Jetpack_Options::get_option( 'id' )
112 ),
113 'v2',
114 array(
115 'timeout' => 5,
116 ),
117 null,
118 'wpcom',
119 true,
120 static::STATS_DASHBOARD_NOTICES_CACHE_KEY
121 );
122
123 if ( is_wp_error( $notices_wpcom ) ) {
124 return array();
125 }
126 return $notices_wpcom;
127 }
128
129 /**
130 * Checks if a notice is hidden.
131 *
132 * @param mixed $id ID of the notice.
133 * @return bool
134 */
135 public function is_notice_hidden( $id ) {
136 $notices_wpcom = $this->get_notices_from_wpcom();
137 return array_key_exists( $id, $notices_wpcom ) && $notices_wpcom[ $id ] === false;
138 }
139 }
140