PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
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 / _inc / content-guidelines-ai.php
jetpack / _inc Last commit date
blocks 5 days ago build 5 days ago fonts 2 years ago genericons 6 months ago lib 5 days ago shared 5 days ago accessible-focus.js 6 years ago blogging-prompts.php 2 months ago class.jetpack-provision.php 8 months ago content-guidelines-ai.js 1 month ago content-guidelines-ai.php 5 days ago crowdsignal-shortcode.js 1 year ago crowdsignal-survey.js 6 years ago deprecate.js 9 months ago facebook-embed.js 4 years ago gallery-settings.js 6 years ago genericons.php 1 year ago jetpack-admin.js 3 years ago jetpack-deactivate-dialog.js 1 year ago jetpack-modules.js 3 weeks ago jetpack-modules.models.js 3 weeks ago jetpack-modules.views.js 3 weeks ago polldaddy-shortcode.js 1 month ago site-switcher-endpoint.php 7 months ago site-switcher.jsx 5 days ago site-switcher.php 6 months ago social-logos.php 4 months ago twitter-timeline.js 2 months ago
content-guidelines-ai.php
122 lines
1 <?php
2 /**
3 * Content Guidelines AI — Jetpack AI integration.
4 *
5 * Enqueues a standalone JS bundle on the Content Guidelines admin page
6 * that adds AI-powered guideline generation via Jetpack.
7 *
8 * @package automattic/jetpack
9 */
10
11 use Automattic\Jetpack\Assets;
12 use Automattic\Jetpack\Status\Host;
13 use Automattic\Jetpack\Status\Visitor;
14 use Automattic\Jetpack\Tracking;
15
16 if ( ! defined( 'ABSPATH' ) ) {
17 exit( 0 );
18 }
19
20 /**
21 * Enqueue content-guidelines-ai script on the Content Guidelines admin page.
22 *
23 * @since 16.0
24 *
25 * @param string $hook_suffix The current admin page hook suffix.
26 */
27 function jetpack_content_guidelines_ai_enqueue_scripts( $hook_suffix ) {
28 if ( 'settings_page_guidelines-wp-admin' !== $hook_suffix ) {
29 return;
30 }
31
32 // Content Guidelines AI is only offered on WordPress.com platform sites
33 // (Simple and Atomic) and WordPress VIP sites — a hard gate the
34 // jetpack_ai_enabled filter below cannot widen. Free-tier sites still load
35 // the bundle so the upgrade path can be shown — the paid-plan requirement
36 // is enforced by the suggest-guidelines API.
37 $host = new Host();
38 if ( ! $host->is_wpcom_platform() && ! $host->is_vip_site() ) {
39 return;
40 }
41
42 // Bail when Jetpack AI is disabled for the site: the AI settings master
43 // switch and other site-wide disables ride this filter.
44 /** This filter is documented in projects/plugins/jetpack/_inc/lib/class-jetpack-ai-helper.php */
45 if ( ! apply_filters( 'jetpack_ai_enabled', true ) ) {
46 return;
47 }
48
49 // Bail when build artifacts are missing rather than enqueueing a script
50 // with guessed (and likely wrong) dependencies.
51 if ( ! file_exists( JETPACK__PLUGIN_DIR . '_inc/build/content-guidelines-ai.min.asset.php' ) ) {
52 return;
53 }
54
55 // The bundle records Tracks events via @automattic/jetpack-analytics,
56 // which only queues into window._tkq. Enqueue the Tracks client (w.js)
57 // so events send without relying on whichever platform widgets happen
58 // to load it.
59 Tracking::register_tracks_functions_scripts( true );
60
61 // Handles dependencies/version from the asset file, JS translations for
62 // the text domain, the CSS (including the .rtl.css variant), and style
63 // dependencies derived from the script's.
64 Assets::register_script(
65 'jetpack-content-guidelines-ai',
66 '_inc/build/content-guidelines-ai.min.js',
67 JETPACK__PLUGIN_FILE,
68 array(
69 'in_footer' => true,
70 'textdomain' => 'jetpack',
71 'css_path' => '_inc/build/content-guidelines-ai.css',
72 'enqueue' => true,
73 )
74 );
75
76 // Jetpack_AI_Helper backs both preloaded values below: the per-user
77 // "banner dismissed" flag and the AI feature state.
78 if ( ! class_exists( 'Jetpack_AI_Helper' ) && is_readable( JETPACK__PLUGIN_DIR . '_inc/lib/class-jetpack-ai-helper.php' ) ) {
79 require_once JETPACK__PLUGIN_DIR . '_inc/lib/class-jetpack-ai-helper.php';
80 }
81
82 // Preload the per-user "banner dismissed" flag so the empty-state banner
83 // doesn't flash before an async read. Persisted via the
84 // guidelines-banner-dismissed REST endpoint, but read via Jetpack_AI_Helper
85 // rather than the endpoint class: on Simple sites the wpcom-endpoints
86 // classes are only loaded in REST requests, so a class_exists() check on
87 // the endpoint always failed here and permanently suppressed the banner
88 // and upgrade notice.
89 $initial_state = array(
90 'bannerDismissed' => class_exists( 'Jetpack_AI_Helper' ) && Jetpack_AI_Helper::is_guidelines_banner_dismissed(),
91 // Tags every Tracks event fired from this page as internal traffic. The
92 // feature is new and low-volume, so Automattician testing is otherwise a
93 // visible share of the numbers with no way to filter it out after the fact.
94 'isA11n' => ( new Visitor() )->is_tracking_automattician(),
95 );
96
97 // Resolve the AI feature state server-side so the bundle can hydrate the
98 // wordpress-com/plans store at boot and render the correct locked/unlocked
99 // buttons on first paint, with no client-side plan fetch. On WordPress.com
100 // Simple this is a synchronous local lookup; on Atomic/self-hosted it is
101 // transient-cached with a blocking remote refresh when cold. On failure
102 // the key is omitted and the bundle renders no AI UI for this load (fail
103 // closed) rather than guessing.
104 if ( class_exists( 'Jetpack_AI_Helper' ) ) {
105 $ai_feature = Jetpack_AI_Helper::get_ai_assistance_feature();
106 if ( ! is_wp_error( $ai_feature ) ) {
107 $initial_state['aiFeature'] = $ai_feature;
108 }
109 }
110
111 wp_add_inline_script(
112 'jetpack-content-guidelines-ai',
113 'window.jetpackContentGuidelinesAi = ' . wp_json_encode(
114 $initial_state,
115 JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT
116 ) . ';',
117 'before'
118 );
119 }
120
121 add_action( 'admin_enqueue_scripts', 'jetpack_content_guidelines_ai_enqueue_scripts' );
122