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-jitm / src / class-pre-connection-jitm.php
jetpack / jetpack_vendor / automattic / jetpack-jitm / src Last commit date
images 2 years ago class-jitm.php 4 days ago class-post-connection-jitm.php 6 months ago class-pre-connection-jitm.php 6 months ago class-rest-api-endpoints.php 6 months ago
class-pre-connection-jitm.php
178 lines
1 <?php
2 /**
3 * Jetpack's Pre-Connection JITM class.
4 *
5 * @package automattic/jetpack-jitm
6 */
7
8 namespace Automattic\Jetpack\JITMS;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit( 0 );
12 }
13
14 /**
15 * Jetpack pre-connection just in time messaging through out the admin.
16 */
17 class Pre_Connection_JITM extends JITM {
18
19 /**
20 * Filters and formats the messages for the client-side JS renderer
21 *
22 * @param string $message_path Current message path.
23 *
24 * @return array Formatted messages.
25 */
26 private function filter_messages( $message_path ) {
27 /**
28 * Allows filtering of the pre-connection JITMs.
29 *
30 * This filter allows plugins to add pre-connection JITMs that will be
31 * displayed by the JITM package.
32 *
33 * @since 1.14.1
34 *
35 * @param array An array of pre-connection messages.
36 */
37 $messages = apply_filters( 'jetpack_pre_connection_jitms', array() );
38
39 $messages = $this->validate_messages( $messages );
40
41 $formatted_messages = array();
42
43 foreach ( $messages as $message ) {
44 if ( ! preg_match( $message['message_path'], $message_path ) ) {
45 continue;
46 }
47
48 $obj = new \stdClass();
49 $obj->CTA = array( // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
50 'message' => $message['button_caption'],
51 'newWindow' => false,
52 );
53 $obj->url = $message['button_link'];
54 $obj->id = $message['id'];
55 $obj->is_dismissible = true;
56 $obj->content = array(
57 'message' => $message['message'],
58 'description' => $message['description'],
59 'list' => array(),
60 'icon' => $this->get_message_icon( $message ),
61 );
62
63 $formatted_messages[] = $obj;
64 }
65
66 return $formatted_messages;
67 }
68
69 /**
70 * Validates that each of the messages contains all of the required keys:
71 * - id
72 * - message_path
73 * - message
74 * - description
75 * - button_link
76 * - button_caption
77 *
78 * @param array $messages An array of JITM messages.
79 *
80 * @return array An array of JITM messages that contain all of the required keys.
81 */
82 private function validate_messages( $messages ) {
83 if ( ! is_array( $messages ) ) {
84 return array();
85 }
86
87 $expected_keys = array_flip( array( 'id', 'message_path', 'message', 'description', 'button_link', 'button_caption' ) );
88
89 foreach ( $messages as $index => $message ) {
90 if ( count( array_intersect_key( $expected_keys, $message ) ) !== count( $expected_keys ) ) {
91 // Remove any messages that are missing expected keys.
92 unset( $messages[ $index ] );
93 }
94 }
95
96 return $messages;
97 }
98
99 /**
100 * Get the icon for the message.
101 *
102 * The message may contain an 'icon' key. If the value of the 'icon' key matches a supported icon (or empty string), the value is used.
103 * If the message does not contain an icon key or if the value does not match a supported icon, the Jetpack icon is used by default.
104 *
105 * @param array $message A pre-connection JITM.
106 *
107 * @return string The icon to use in the JITM.
108 */
109 private function get_message_icon( $message ) {
110 // Default to the Jetpack icon.
111 $icon = 'jetpack';
112
113 if ( ! isset( $message['icon'] ) ) {
114 return $icon;
115 }
116
117 $supported_icons = $this->get_supported_icons();
118
119 if ( in_array( $message['icon'], $supported_icons, true ) ) {
120 // Only use the message icon if it's a supported icon or an empty string (for no icon).
121 $icon = $message['icon'];
122 }
123
124 return $icon;
125 }
126
127 /**
128 * Retrieve the current message to display keyed on query string and message path
129 *
130 * @param string $message_path The message path to ask for.
131 * @param array $query Query parameters as an associative array. Unused in this subclass.
132 * @param bool $full_jp_logo_exists If there is a full Jetpack logo already on the page.
133 *
134 * @return array The JITMs to show, or an empty array if there is nothing to show
135 */
136 public function get_messages( $message_path, $query, $full_jp_logo_exists ) {
137 // Ensure only admins see pre-connection JITMs since only they can connect to WordPress.com
138 // and enable modules.
139 if ( ! current_user_can( 'install_plugins' ) ) {
140 return array();
141 }
142
143 $messages = $this->filter_messages( $message_path );
144
145 if ( empty( $messages ) ) {
146 return array();
147 }
148
149 $hidden_jitms = \Jetpack_Options::get_option( 'hide_jitm' );
150
151 foreach ( $messages as $idx => &$envelope ) {
152 $dismissed_feature = isset( $hidden_jitms[ 'pre-connection-' . $envelope->id ] ) &&
153 is_array( $hidden_jitms[ 'pre-connection-' . $envelope->id ] ) ? $hidden_jitms[ 'pre-connection-' . $envelope->id ] : null;
154
155 if ( is_array( $dismissed_feature ) ) {
156 unset( $messages[ $idx ] );
157 continue;
158 }
159
160 $envelope->content['icon'] = $this->generate_icon( $envelope->content['icon'], $full_jp_logo_exists );
161 }
162
163 return $messages;
164 }
165
166 /**
167 * Dismisses a JITM ID so that it will no longer be shown.
168 *
169 * @param string $id The id of the JITM that was dismissed.
170 *
171 * @return bool Always true
172 */
173 public function dismiss( $id ) {
174 $this->save_dismiss( 'pre-connection-' . $id );
175 return true;
176 }
177 }
178