PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.7
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.7
16.3-a.5 16.3-a.7 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 All 506 releases
← All changes | src/class-deprecate.php +126 -67 13.8.3 → 16.3-a.7 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,16 +23,44 @@
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() {
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 +
31 53 if ( $this->has_notices() ) {
32 - add_action( 'admin_notices', array( $this, 'render_admin_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 + );
33 61 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
34 62 add_filter( 'my_jetpack_red_bubble_notification_slugs', array( $this, 'add_my_jetpack_red_bubbles' ) );
35 - add_filter( 'jetpack_modules_list_table_items', array( $this, 'remove_masterbar_module_list' ) );
36 63 }
37 64 }
38 65
39 66 /**
@@ -69,24 +96,82 @@
69 96 );
70 97 }
71 98
72 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 + );
73 105 }
74 106
75 107 /**
108 + * Ensure the notices variable is properly formatted and includes the required suffix and show value.
109 + *
110 + * @return void
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 + /**
76 145 * Render deprecation notices for relevant features.
77 146 *
78 147 * @return void
79 148 */
80 149 public function render_admin_notices() {
81 - if ( $this->show_masterbar_notice() ) {
82 - $support_url = Redirect::get_url( 'jetpack-support-masterbar' );
83 150
84 - $this->render_notice(
85 - 'jetpack-masterbar-admin-removal-notice',
86 - esc_html__( "Jetpack's WordPress.com Toolbar feature has been removed.", 'jetpack' )
87 - . ' <a href="' . $support_url . '" target="_blank">' . esc_html__( 'To find out more about what this means for you, please refer to this document', 'jetpack' ) . '</a>.'
88 - );
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 + }
89 174 }
90 175 }
91 176
92 177 /**
@@ -96,21 +181,24 @@
96 181 *
97 182 * @return array
98 183 */
99 184 public function add_my_jetpack_red_bubbles( $slugs ) {
100 - if ( $this->show_masterbar_notice() ) {
101 - $slugs['jetpack-masterbar-deprecate-feature'] = array(
102 - 'data' => array(
103 - 'text' => __( "Jetpack's WordPress.com Toolbar feature has been removed.", 'jetpack' ),
104 - 'link' => array(
105 - 'label' => esc_html__( 'See documentation', 'jetpack' ),
106 - 'url' => Redirect::get_url( 'jetpack-support-masterbar' ),
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,
107 197 ),
108 - 'id' => 'jetpack-masterbar-admin-removal-notice',
109 - ),
110 - );
198 + );
199 + }
111 200 }
112 -
113 201 return $slugs;
114 202 }
115 203
116 204 /**
@@ -117,36 +205,17 @@
117 205 * Render the notice.
118 206 *
119 207 * @param string $id The notice ID.
120 208 * @param string $text The notice text.
121 - * @param array $params Additional notice params.
122 209 *
123 210 * @return void
124 211 */
125 - private function render_notice( $id, $text, $params = array() ) {
126 - if ( ! empty( $_COOKIE['jetpack_deprecate_dismissed'][ $id ] ) ) {
127 - return;
128 - }
129 -
130 - $params['id'] = $id;
131 -
132 - if ( empty( $params['type'] ) ) {
133 - $params['type'] = 'warning';
134 - }
135 -
136 - if ( empty( $params['dismissible'] ) ) {
137 - $params['dismissible'] = true;
138 - }
139 -
140 - if ( $params['dismissible'] ) {
141 - if ( empty( $params['additional_classes'] ) ) {
142 - $params['additional_classes'] = array();
143 - }
144 -
145 - $params['additional_classes'][] = 'jetpack-deprecate-dismissible';
146 - }
147 -
148 - 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 + );
149 218 }
150 219
151 220 /**
152 221 * Check if there are any notices to be displayed, so we wouldn't load unnecessary JS and run excessive hooks.
@@ -153,33 +222,23 @@
153 222 *
154 223 * @return bool
155 224 */
156 225 private function has_notices() {
157 - return $this->show_masterbar_notice();
226 + foreach ( $this->notices as $id => $notice ) {
227 + if ( $this->show_feature_notice( $id ) ) {
228 + return true;
229 + }
230 + }
231 + return false;
158 232 }
159 233
160 234 /**
161 - * Check if Masterbar notice should show up.
235 + * Check if the feature notice should be shown, based on the existence of the cookie.
162 236 *
237 + * @param string $id The notice ID.
238 + *
163 239 * @return bool
164 240 */
165 - private function show_masterbar_notice() {
166 - return ( new Modules() )->is_active( 'masterbar', false )
167 - && ! ( new Host() )->is_woa_site()
168 - && empty( $_COOKIE['jetpack_deprecate_dismissed']['jetpack-masterbar-admin-removal-notice'] );
169 - }
170 -
171 - /**
172 - * Remove Masterbar from the old Module list.
173 - * Available at wp-admin/admin.php?page=jetpack_modules
174 - * We only need this function until the Masterbar is fully removed from Jetpack (including notices).
175 - *
176 - * @param array $items Array of Jetpack modules.
177 - * @return array
178 - */
179 - public function remove_masterbar_module_list( $items ) {
180 - if ( isset( $items['masterbar'] ) && get_option( 'wpcom_admin_interface' ) !== 'wp-admin' ) {
181 - unset( $items['masterbar'] );
182 - }
183 - return $items;
241 + private function show_feature_notice( $id ) {
242 + return empty( $_COOKIE['jetpack_deprecate_dismissed'][ $id ] );
184 243 }
185 244 }