PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 / src / class-deprecate.php
jetpack / src Last commit date
abilities 1 month ago class-deprecate.php 7 months ago class-jetpack-crm-data.php 2 years ago class-jetpack-modules-overrides.php 7 months ago class-jetpack-script-data.php 4 months ago class-tracking.php 1 year ago
class-deprecate.php
245 lines
1 <?php
2 /**
3 * Place to properly deprecate Jetpack features.
4 *
5 * @package automattic/jetpack
6 */
7
8 namespace Automattic\Jetpack\Plugin;
9
10 use Automattic\Jetpack\Assets;
11 use Automattic\Jetpack\Redirect;
12 use Automattic\Jetpack\Status\Host;
13
14 /**
15 * Place to properly deprecate Jetpack features.
16 */
17 class Deprecate {
18
19 /**
20 * The singleton instance.
21 *
22 * @var Deprecate
23 */
24 private static $instance;
25
26 /**
27 * An array of notices to display.
28 *
29 * @var array
30 */
31 private $notices = array();
32
33 /**
34 * Initialize the class.
35 */
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
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 }
64 }
65
66 /**
67 * Create/get the singleton instance.
68 *
69 * @return static
70 */
71 public static function instance() {
72 if ( null === static::$instance ) {
73 static::$instance = new static();
74 }
75
76 return static::$instance;
77 }
78
79 /**
80 * Enqueue the scripts.
81 *
82 * @return void
83 */
84 public function enqueue_admin_scripts() {
85 if ( ! $this->has_notices() ) {
86 return;
87 }
88
89 if ( ! wp_script_is( 'jetpack-deprecate', 'registered' ) ) {
90 wp_register_script(
91 'jetpack-deprecate',
92 Assets::get_file_url_for_environment( '_inc/build/deprecate.min.js', '_inc/deprecate.js' ),
93 array(),
94 JETPACK__VERSION,
95 true
96 );
97 }
98
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 );
105 }
106
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 /**
145 * Render deprecation notices for relevant features.
146 *
147 * @return void
148 */
149 public function render_admin_notices() {
150
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 }
174 }
175 }
176
177 /**
178 * Add the deprecation notices to My Jetpack.
179 *
180 * @param array $slugs Already added bubbles.
181 *
182 * @return array
183 */
184 public function add_my_jetpack_red_bubbles( $slugs ) {
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,
197 ),
198 );
199 }
200 }
201 return $slugs;
202 }
203
204 /**
205 * Render the notice.
206 *
207 * @param string $id The notice ID.
208 * @param string $text The notice text.
209 *
210 * @return void
211 */
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 );
218 }
219
220 /**
221 * Check if there are any notices to be displayed, so we wouldn't load unnecessary JS and run excessive hooks.
222 *
223 * @return bool
224 */
225 private function has_notices() {
226 foreach ( $this->notices as $id => $notice ) {
227 if ( $this->show_feature_notice( $id ) ) {
228 return true;
229 }
230 }
231 return false;
232 }
233
234 /**
235 * Check if the feature notice should be shown, based on the existence of the cookie.
236 *
237 * @param string $id The notice ID.
238 *
239 * @return bool
240 */
241 private function show_feature_notice( $id ) {
242 return empty( $_COOKIE['jetpack_deprecate_dismissed'][ $id ] );
243 }
244 }
245