PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.2-a.3 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 / modules / subscriptions / newsletter-widget / class-jetpack-newsletter-dashboard-widget.php
jetpack / modules / subscriptions / newsletter-widget Last commit date
class-jetpack-newsletter-dashboard-widget.php 1 month ago
class-jetpack-newsletter-dashboard-widget.php
243 lines
1 <?php
2 /**
3 * Jetpack Newsletter Dashboard Widget.
4 *
5 * @package jetpack
6 */
7
8 use Automattic\Jetpack\Connection\Client;
9 use Automattic\Jetpack\Modules;
10
11 /**
12 * Class that adds the Jetpack Newsletter Dashboard Widget to the WordPress admin dashboard.
13 */
14 class Jetpack_Newsletter_Dashboard_Widget {
15 /**
16 * Indicates whether the class initialized or not.
17 *
18 * @var bool
19 */
20 private static $initialized = false;
21
22 /**
23 * The Widget ID.
24 *
25 * @var string
26 */
27 private static $widget_id = 'jetpack_newsletter_dashboard_widget';
28
29 /**
30 * Initialize the class by calling the setup static function.
31 *
32 * @return void
33 */
34 public static function init() {
35 if ( ! self::$initialized ) {
36 self::$initialized = true;
37 self::wp_dashboard_setup();
38 }
39 }
40
41 /**
42 * Get the config data for the Jetpack Newsletter widget.
43 *
44 * @return array
45 */
46 public static function get_config_data() {
47 $config_data = array(
48 'emailSubscribers' => 0,
49 'paidSubscribers' => 0,
50 'allSubscribers' => 0,
51 'subscriberTotalsByDate' => array(),
52 'isStatsModuleActive' => false,
53 'showHeader' => false,
54 'showChart' => false,
55 'isWidgetVisible' => false,
56 'newsletterSettingsUrl' => \Automattic\Jetpack\Newsletter\Urls::get_newsletter_settings_url(),
57 );
58
59 if ( Jetpack::is_connection_ready() ) {
60 $site_id = Jetpack_Options::get_option( 'id' );
61 $api_path = sprintf( '/sites/%d/subscribers/stats', $site_id );
62 $response = Client::wpcom_json_api_request_as_blog(
63 $api_path,
64 '2',
65 array(),
66 null,
67 'wpcom'
68 );
69
70 if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
71 $subscriber_counts = json_decode( wp_remote_retrieve_body( $response ), true );
72 if ( isset( $subscriber_counts['counts']['email_subscribers'] ) ) {
73 $config_data['emailSubscribers'] = (int) $subscriber_counts['counts']['email_subscribers'];
74 }
75
76 if ( isset( $subscriber_counts['counts']['paid_subscribers'] ) ) {
77 $config_data['paidSubscribers'] = (int) $subscriber_counts['counts']['paid_subscribers'];
78 }
79
80 if ( isset( $subscriber_counts['counts']['all_subscribers'] ) ) {
81 $config_data['allSubscribers'] = (int) $subscriber_counts['counts']['all_subscribers'];
82 }
83
84 if ( isset( $subscriber_counts['aggregate'] ) ) {
85 $config_data['subscriberTotalsByDate'] = $subscriber_counts['aggregate'];
86 }
87 }
88
89 $config_data['isStatsModuleActive'] = ( new Modules() )->is_active( 'stats' );
90
91 $config_data['showHeader'] = $config_data['isStatsModuleActive'] && ( $config_data['allSubscribers'] > 0 || $config_data['paidSubscribers'] > 0 );
92 foreach ( $config_data['subscriberTotalsByDate'] as $day ) {
93 if ( $day && ( $day['all'] >= 5 || $day['paid'] > 0 ) ) {
94 $config_data['showChart'] = true;
95 break;
96 }
97 }
98
99 $config_data['isWidgetVisible'] = $config_data['showHeader'] || $config_data['showChart'];
100 }
101
102 return $config_data;
103 }
104
105 /**
106 * Sets up the Jetpack Newsletter widget in the WordPress admin dashboard.
107 */
108 public static function wp_dashboard_setup() {
109 // Do not show the widget to non-admins.
110 if ( ! current_user_can( 'manage_options' ) ) {
111 return;
112 }
113
114 if ( Jetpack::is_connection_ready() ) {
115 $config_data = static::get_config_data();
116
117 if ( ! $config_data['isWidgetVisible'] ) {
118 return;
119 }
120
121 static::load_admin_scripts(
122 'jp-newsletter-widget',
123 'newsletter-widget',
124 array(
125 'config_variable_name' => 'jetpackNewsletterWidgetConfigData',
126 'config_data' => $config_data,
127 'load_minified_js' => false,
128 )
129 );
130
131 wp_add_dashboard_widget(
132 self::$widget_id,
133 /** "Newsletter" is a product name, do not translate. */
134 'Jetpack Newsletter',
135 array( static::class, 'render' ),
136 // @phan-suppress-next-line PhanTypeMismatchArgumentProbablyReal -- Core should ideally document null for no-callback arg. https://core.trac.wordpress.org/ticket/52539.
137 null,
138 array(),
139 'side',
140 'high'
141 );
142 }
143 }
144
145 /**
146 * Render the Jetpack Newsletter widget.
147 *
148 * @return void
149 */
150 public static function render() {
151 ?>
152 <div id="wpcom">
153 <div id="newsletter-widget-app"></div>
154 </div>
155 <?php
156 }
157
158 /**
159 * Load the admin scripts for the Jetpack Newsletter widget.
160 *
161 * @param string $asset_handle The handle of the asset.
162 * @param string $asset_name The name of the asset.
163 * @param array $options The options for the asset.
164 * @return void
165 */
166 public static function load_admin_scripts( $asset_handle, $asset_name, $options = array() ) {
167 $default_options = array(
168 'config_data' => array(),
169 'config_variable_name' => 'configData',
170 'enqueue_css' => true,
171 'load_minified_js' => true,
172 );
173 $options = wp_parse_args( $options, $default_options );
174
175 /*
176 * Get the asset file path. The widget is built unminified (see tools/webpack.config.js),
177 * so read the matching non-minified asset metadata.
178 */
179 $asset_path = JETPACK__PLUGIN_DIR . '_inc/build/' . $asset_name . '.asset.php';
180
181 // Get dependencies and version from asset file
182 $dependencies = array();
183 $version = JETPACK__VERSION;
184
185 if ( file_exists( $asset_path ) ) {
186 $asset = require $asset_path;
187 $dependencies = $asset['dependencies'];
188 $version = $asset['version'];
189 }
190
191 $file_extension = '.min.js';
192 if ( ! $options['load_minified_js'] ) {
193 $file_extension = '.js';
194 }
195 // Register and enqueue the script
196 wp_register_script(
197 $asset_handle,
198 plugins_url( '_inc/build/' . $asset_name . $file_extension, JETPACK__PLUGIN_FILE ),
199 $dependencies,
200 $version,
201 true
202 );
203 wp_enqueue_script( $asset_handle );
204 if ( in_array( 'wp-i18n', $dependencies, true ) ) {
205 wp_set_script_translations( $asset_handle, 'jetpack' );
206 }
207
208 // Enqueue the CSS if enabled
209 if ( $options['enqueue_css'] ) {
210 wp_enqueue_style(
211 $asset_handle,
212 plugins_url( '_inc/build/' . $asset_name . '.css', JETPACK__PLUGIN_FILE ),
213 array(),
214 $version
215 );
216
217 // Enqueue RTL stylesheet if needed
218 if ( is_rtl() ) {
219 wp_enqueue_style(
220 $asset_handle . '-rtl',
221 plugins_url( '_inc/build/' . $asset_name . '.rtl.css', JETPACK__PLUGIN_FILE ),
222 array( $asset_handle ),
223 $version
224 );
225 }
226 }
227
228 // Add any configuration data if needed
229 if ( ! empty( $options['config_data'] ) ) {
230 wp_add_inline_script(
231 $asset_handle,
232 "window.{$options['config_variable_name']} = " . wp_json_encode( $options['config_data'], JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ) . ';',
233 'before'
234 );
235 }
236 }
237 }
238
239 add_action(
240 'wp_dashboard_setup',
241 array( 'Jetpack_Newsletter_Dashboard_Widget', 'init' )
242 );
243