PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-a.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-a.3
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 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 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 1 month ago build 1 month ago fonts 2 years ago genericons 6 months ago lib 1 month 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 1 month 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 1 year ago jetpack-modules.models.js 9 months ago jetpack-modules.views.js 9 months ago polldaddy-shortcode.js 1 month ago site-switcher-endpoint.php 7 months ago site-switcher.jsx 1 month ago site-switcher.php 7 months ago social-logos.php 5 months ago twitter-timeline.js 2 months ago
content-guidelines-ai.php
127 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\Visitor;
13 use Automattic\Jetpack\Tracking;
14
15 if ( ! defined( 'ABSPATH' ) ) {
16 exit( 0 );
17 }
18
19 /**
20 * Check if the current user is an Automattician.
21 *
22 * - Simple sites: wpcom_is_proxied_request() + is_automattician()
23 * - Atomic sites: Visitor::is_automattician_feature_flags_only()
24 *
25 * @return bool
26 */
27 function jetpack_content_guidelines_ai_is_automattician() {
28 // Simple sites.
29 if ( function_exists( 'wpcom_is_proxied_request' )
30 && wpcom_is_proxied_request()
31 && function_exists( 'is_automattician' )
32 && is_automattician()
33 ) {
34 return true;
35 }
36
37 // Atomic sites.
38 return ( new Visitor() )->is_automattician_feature_flags_only();
39 }
40
41 /**
42 * Enqueue content-guidelines-ai script on the Content Guidelines admin page.
43 *
44 * @since 16.0
45 *
46 * @param string $hook_suffix The current admin page hook suffix.
47 */
48 function jetpack_content_guidelines_ai_enqueue_scripts( $hook_suffix ) {
49 if ( 'settings_page_guidelines-wp-admin' !== $hook_suffix ) {
50 return;
51 }
52
53 // Temporarily gate to Automatticians only during internal rollout.
54 if ( ! jetpack_content_guidelines_ai_is_automattician() ) {
55 return;
56 }
57
58 // Bail when build artifacts are missing rather than enqueueing a script
59 // with guessed (and likely wrong) dependencies.
60 if ( ! file_exists( JETPACK__PLUGIN_DIR . '_inc/build/content-guidelines-ai.min.asset.php' ) ) {
61 return;
62 }
63
64 // The bundle records Tracks events via @automattic/jetpack-analytics,
65 // which only queues into window._tkq. Enqueue the Tracks client (w.js)
66 // so events send without relying on whichever platform widgets happen
67 // to load it.
68 Tracking::register_tracks_functions_scripts( true );
69
70 // Handles dependencies/version from the asset file, JS translations for
71 // the text domain, the CSS (including the .rtl.css variant), and style
72 // dependencies derived from the script's.
73 Assets::register_script(
74 'jetpack-content-guidelines-ai',
75 '_inc/build/content-guidelines-ai.min.js',
76 JETPACK__PLUGIN_FILE,
77 array(
78 'in_footer' => true,
79 'textdomain' => 'jetpack',
80 'css_path' => '_inc/build/content-guidelines-ai.css',
81 'enqueue' => true,
82 )
83 );
84
85 // Jetpack_AI_Helper backs both preloaded values below: the per-user
86 // "banner dismissed" flag and the AI feature state.
87 if ( ! class_exists( 'Jetpack_AI_Helper' ) && is_readable( JETPACK__PLUGIN_DIR . '_inc/lib/class-jetpack-ai-helper.php' ) ) {
88 require_once JETPACK__PLUGIN_DIR . '_inc/lib/class-jetpack-ai-helper.php';
89 }
90
91 // Preload the per-user "banner dismissed" flag so the empty-state banner
92 // doesn't flash before an async read. Persisted via the
93 // guidelines-banner-dismissed REST endpoint, but read via Jetpack_AI_Helper
94 // rather than the endpoint class: on Simple sites the wpcom-endpoints
95 // classes are only loaded in REST requests, so a class_exists() check on
96 // the endpoint always failed here and permanently suppressed the banner
97 // and upgrade notice.
98 $initial_state = array(
99 'bannerDismissed' => class_exists( 'Jetpack_AI_Helper' ) && Jetpack_AI_Helper::is_guidelines_banner_dismissed(),
100 );
101
102 // Resolve the AI feature state server-side so the bundle can hydrate the
103 // wordpress-com/plans store at boot and render the correct locked/unlocked
104 // buttons on first paint, with no client-side plan fetch. On WordPress.com
105 // Simple this is a synchronous local lookup; on Atomic/self-hosted it is
106 // transient-cached with a blocking remote refresh when cold. On failure
107 // the key is omitted and the bundle renders no AI UI for this load (fail
108 // closed) rather than guessing.
109 if ( class_exists( 'Jetpack_AI_Helper' ) ) {
110 $ai_feature = Jetpack_AI_Helper::get_ai_assistance_feature();
111 if ( ! is_wp_error( $ai_feature ) ) {
112 $initial_state['aiFeature'] = $ai_feature;
113 }
114 }
115
116 wp_add_inline_script(
117 'jetpack-content-guidelines-ai',
118 'window.jetpackContentGuidelinesAi = ' . wp_json_encode(
119 $initial_state,
120 JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT
121 ) . ';',
122 'before'
123 );
124 }
125
126 add_action( 'admin_enqueue_scripts', 'jetpack_content_guidelines_ai_enqueue_scripts' );
127