PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.1
16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 All 504 releases
← All changes | src/class-deprecate.php +133 -55 13.6.216.3-a.1 View file →
@@ -7,9 +7,8 @@
7 7
8 8 namespace Automattic\Jetpack\Plugin;
9 9
10 10 use Automattic\Jetpack\Assets;
11 -use Automattic\Jetpack\Modules;
12 11 use Automattic\Jetpack\Redirect;
13 12 use Automattic\Jetpack\Status\Host;
14 13
15 14 /**
@@ -24,14 +23,45 @@
24 23 */
25 24 private static $instance;
26 25
27 26 /**
27 + * An array of notices to display.
28 + *
29 + * @var array
30 + */
31 + private $notices = array();
32 +
33 + /**
28 34 * Initialize the class.
29 35 */
30 36 private function __construct() {
31 - add_action( 'admin_notices', array( $this, 'render_admin_notices' ) );
32 - add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
33 - add_filter( 'my_jetpack_red_bubble_notification_slugs', array( $this, 'add_my_jetpack_red_bubbles' ) );
37 + // Modify the notices array to include the notices you want to display.
38 + // For more information, see /docs/deprecating-features.md.
39 + $this->notices = array(
40 + 'my-admin' => array(
41 + 'title' => __( "Retired feature: Jetpack's XYZ Feature", 'jetpack' ),
42 + 'message' => __( 'This feature is being retired and will be removed effective November, 2024. Please use the Classic Theme Helper plugin instead.', 'jetpack' ),
43 + 'link' => array(
44 + 'label' => __( 'Learn more', 'jetpack' ),
45 + 'url' => 'jetpack-support-xyz',
46 + ),
47 + 'show' => false, // 'show' is not required, but setting it to false will ensure that the notice will not be displayed.
48 + 'hide_in_woa' => true, // 'hide_in_woa' is not required, but setting it to true will ensure that the notice will not be displayed in the WoA admin (none will display in Simple regardless).
49 + ),
50 + );
51 + $this->set_notices();
52 +
53 + if ( $this->has_notices() ) {
54 + // We only want the notice to appear on the main WP Admin dashboard, which hooking into load-index.php will allow.
55 + add_action(
56 + 'load-index.php',
57 + function () {
58 + add_action( 'admin_notices', array( $this, 'render_admin_notices' ) );
59 + }
60 + );
61 + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
62 + add_filter( 'my_jetpack_red_bubble_notification_slugs', array( $this, 'add_my_jetpack_red_bubbles' ) );
63 + }
34 64 }
35 65
36 66 /**
37 67 * Create/get the singleton instance.
@@ -66,24 +96,82 @@
66 96 );
67 97 }
68 98
69 99 wp_enqueue_script( 'jetpack-deprecate' );
100 + wp_add_inline_script(
101 + 'jetpack-deprecate',
102 + 'window.noticeInfo = ' . wp_json_encode( $this->notices, JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ) . ';',
103 + 'before'
104 + );
70 105 }
71 106
72 107 /**
73 - * Render Google Analytics deprecation notice.
108 + * Ensure the notices variable is properly formatted and includes the required suffix and show value.
74 109 *
75 110 * @return void
76 111 */
112 + private function set_notices() {
113 + $notices = array();
114 + $required_id_suffix = '-deprecate-feature';
115 + $host = new Host();
116 +
117 + foreach ( $this->notices as $id => $notice ) {
118 + if ( $host->is_woa_site() && isset( $notice['hide_in_woa'] ) && true === $notice['hide_in_woa'] ) {
119 + continue;
120 + }
121 +
122 + if ( isset( $notice['show'] ) && false === $notice['show'] ) {
123 + continue;
124 + }
125 +
126 + if ( empty( $notice['title'] ) || empty( $notice['message'] ) || empty( $notice['link']['url'] ) ) {
127 + continue;
128 + }
129 +
130 + if ( empty( $notice['link']['label'] ) ) {
131 + $notice['link']['label'] = __( 'Learn more', 'jetpack' );
132 + }
133 +
134 + if ( strpos( $id, $required_id_suffix ) === false ) {
135 + $id .= $required_id_suffix;
136 + }
137 +
138 + $notices[ $id ] = $notice;
139 + }
140 +
141 + $this->notices = $notices;
142 + }
143 +
144 + /**
145 + * Render deprecation notices for relevant features.
146 + *
147 + * @return void
148 + */
77 149 public function render_admin_notices() {
78 - if ( $this->show_ga_notice() ) {
79 - $support_url = Redirect::get_url( 'jetpack-support-google-analytics' );
80 150
81 - $this->render_notice(
82 - 'jetpack-ga-admin-notice',
83 - esc_html__( "Jetpack's Google Analytics feature will be removed on August 6, 2024.", 'jetpack' )
84 - . ' <a href="' . $support_url . '" target="_blank">' . esc_html__( 'Read this document for details and how to keep tracking visits with Google Analytics', 'jetpack' ) . '</a>.'
85 - );
151 + foreach ( $this->notices as $id => $notice ) {
152 + if ( $this->show_feature_notice( $id ) ) {
153 + $support_url = Redirect::get_url( $notice['link']['url'] );
154 +
155 + $this->render_notice(
156 + $id,
157 + '<div class="jetpack-deprecation-notice-container">' .
158 + '<div class="jetpack-deprecation-notice-svg">' .
159 + '<svg class="jetpack-deprecation-notice-icon gridicon gridicons-info-outline needs-offset" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" color="#000000">' .
160 + '<g><path d="M13 9h-2V7h2v2zm0 2h-2v6h2v-6zm-1-7c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8m0-2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2z"></path></g>' .
161 + '</svg>' .
162 + '</div>' .
163 + '<div class="jetpack-deprecation-notice-text">' .
164 + '<p class="jetpack-deprection-notice-title">' . esc_html( $notice['title'] ) . '</p>' .
165 + '<p>' . esc_html( $notice['message'] ) . '</p>' .
166 + '<a href="' . $support_url . '" target="_blank" class="jetpack-deprecation-notice-link"> ' . esc_html( $notice['link']['label'] ) . '</a>' .
167 + '<svg class="gridicons-external" height="14" width="14" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 20">' .
168 + '<g><path d="M19 13v6c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2V7c0-1.105.895-2 2-2h6v2H5v12h12v-6h2zM13 3v2h4.586l-7.793 7.793 1.414 1.414L19 6.414V11h2V3h-8z"></path></g>' .
169 + '</svg>' .
170 + '</div>' .
171 + '</div>'
172 + );
173 + }
86 174 }
87 175 }
88 176
89 177 /**
@@ -90,23 +178,27 @@
90 178 * Add the deprecation notices to My Jetpack.
91 179 *
92 180 * @param array $slugs Already added bubbles.
93 181 *
94 - * @return mixed
182 + * @return array
95 183 */
96 184 public function add_my_jetpack_red_bubbles( $slugs ) {
97 - if ( $this->show_ga_notice() ) {
98 - $slugs['jetpack-google-analytics-deprecate-feature'] = array(
99 - 'data' => array(
100 - 'text' => __( "Jetpack's Google Analytics feature will be removed on August 6, 2024. Read the documentation for details and how to keep tracking visits with Google Analytics.", 'jetpack' ),
101 - 'link' => array(
102 - 'label' => esc_html__( 'See documentation', 'jetpack' ),
103 - 'url' => Redirect::get_url( 'jetpack-support-google-analytics' ),
185 +
186 + foreach ( $this->notices as $id => $notice ) {
187 + if ( $this->show_feature_notice( $id ) ) {
188 + $slugs[ $id ] = array(
189 + 'data' => array(
190 + 'text' => $notice['message'],
191 + 'title' => $notice['title'],
192 + 'link' => array(
193 + 'label' => esc_html( $notice['link']['label'] ),
194 + 'url' => Redirect::get_url( $notice['link']['url'] ),
195 + ),
196 + 'id' => $id,
104 197 ),
105 - ),
106 - );
198 + );
199 + }
107 200 }
108 -
109 201 return $slugs;
110 202 }
111 203
112 204 /**
@@ -113,54 +205,40 @@
113 205 * Render the notice.
114 206 *
115 207 * @param string $id The notice ID.
116 208 * @param string $text The notice text.
117 - * @param array $params Additional notice params.
118 209 *
119 210 * @return void
120 211 */
121 - private function render_notice( $id, $text, $params = array() ) {
122 - if ( ! empty( $_COOKIE['jetpack_deprecate_dismissed'][ $id ] ) ) {
123 - return;
124 - }
125 -
126 - $params['id'] = $id;
127 -
128 - if ( empty( $params['type'] ) ) {
129 - $params['type'] = 'warning';
130 - }
131 -
132 - if ( empty( $params['dismissible'] ) ) {
133 - $params['dismissible'] = true;
134 - }
135 -
136 - if ( $params['dismissible'] ) {
137 - if ( empty( $params['additional_classes'] ) ) {
138 - $params['additional_classes'] = array();
139 - }
140 -
141 - $params['additional_classes'][] = 'jetpack-deprecate-dismissible';
142 - }
143 -
144 - wp_admin_notice( $text, $params );
212 + private function render_notice( $id, $text ) {
213 + printf(
214 + '<div id="%1$s" class="notice notice-warning is-dismissible jetpack-deprecate-dismissible" style="border-left-color: #000000;">%2$s</div>',
215 + esc_html( $id ),
216 + $text // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output already escaped in render_admin_notices
217 + );
145 218 }
146 219
147 220 /**
148 - * Check if there are any notices to be displayed, so we wouldn't load unnecessary JS.
221 + * Check if there are any notices to be displayed, so we wouldn't load unnecessary JS and run excessive hooks.
149 222 *
150 223 * @return bool
151 224 */
152 225 private function has_notices() {
153 - return $this->show_ga_notice();
226 + foreach ( $this->notices as $id => $notice ) {
227 + if ( $this->show_feature_notice( $id ) ) {
228 + return true;
229 + }
230 + }
231 + return false;
154 232 }
155 233
156 234 /**
157 - * Check if Google Analytics notice should show up.
235 + * Check if the feature notice should be shown, based on the existence of the cookie.
158 236 *
237 + * @param string $id The notice ID.
238 + *
159 239 * @return bool
160 240 */
161 - private function show_ga_notice() {
162 - return ( new Modules() )->is_active( 'google-analytics', false )
163 - && ! is_plugin_active( 'jetpack-legacy-google-analytics/jetpack-legacy-google-analytics.php' )
164 - && ! ( new Host() )->is_woa_site();
241 + private function show_feature_notice( $id ) {
242 + return empty( $_COOKIE['jetpack_deprecate_dismissed'][ $id ] );
165 243 }
166 244 }