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 / extensions / blocks / ai-chat / ai-chat.php
jetpack / extensions / blocks / ai-chat Last commit date
ai-chat.php 5 days ago
ai-chat.php
116 lines
1 <?php
2 /**
3 * Jetpack AI Chat.
4 *
5 * @since 12.1
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\AIChat;
11
12 use Automattic\Jetpack\Blocks;
13 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
14 use Automattic\Jetpack\Search\Module_Control as Search_Module_Control;
15 use Automattic\Jetpack\Search\Plan as Search_Plan;
16 use Automattic\Jetpack\Status;
17 use Automattic\Jetpack\Status\Host;
18 use Jetpack_Gutenberg;
19
20 if ( ! defined( 'ABSPATH' ) ) {
21 exit( 0 );
22 }
23
24 // Required directly rather than relying on the plugin bootstrap: on
25 // WordPress.com Simple the extension files load through wpcom's own loader
26 // and load-jetpack.php never runs. Without it the is_ai_enabled() master-gate
27 // check below would fatal there.
28 require_once __DIR__ . '/../../../_inc/lib/class-jetpack-ai-settings.php';
29
30 /**
31 * Registers our block for use in Gutenberg
32 * This is done via an action so that we can disable
33 * registration if we need to.
34 */
35 function register_block() {
36 if (
37 (
38 ( new Host() )->is_wpcom_simple()
39 || ( ( new Connection_Manager( 'jetpack' ) )->has_connected_owner() && ! ( new Status() )->is_offline_mode() )
40 )
41 && \Jetpack_AI_Settings::is_ai_enabled()
42 ) {
43 Blocks::jetpack_register_block(
44 __DIR__,
45 array( 'render_callback' => __NAMESPACE__ . '\load_assets' )
46 );
47 }
48 }
49 add_action( 'init', __NAMESPACE__ . '\register_block' );
50
51 /**
52 * Jetpack AI Paragraph block registration/dependency declaration.
53 *
54 * @param array $attr Array containing the Jetpack AI Chat block attributes.
55 *
56 * @return string
57 */
58 function load_assets( $attr ) {
59 /*
60 * Enqueue necessary scripts and styles.
61 */
62 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
63
64 $ask_button_label = $attr['askButtonLabel'] ?? __( 'Ask', 'jetpack' );
65 $placeholder = $attr['placeholder'] ?? __( 'Ask a question about this site.', 'jetpack' );
66
67 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
68 $blog_id = get_current_blog_id();
69 $type = 'wpcom'; // WPCOM simple sites.
70 } else {
71 $blog_id = \Jetpack_Options::get_option( 'id' );
72 $type = 'jetpack'; // Self-hosted (includes Atomic)
73 }
74
75 return sprintf(
76 '<div class="%1$s" data-ask-button-label="%2$s" id="jetpack-ai-chat" data-blog-id="%3$d" data-blog-type="%4$s" data-placeholder="%5$s" data-show-copy="%6$d" data-show-feedback="%7$d" data-show-sources="%8$d"></div>',
77 esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
78 esc_attr( $ask_button_label ),
79 esc_attr( $blog_id ),
80 esc_attr( $type ),
81 esc_attr( $placeholder ),
82 esc_attr( isset( $attr['showCopy'] ) ? ( $attr['showCopy'] ? 1 : 0 ) : 1 ),
83 esc_attr( isset( $attr['showFeedback'] ) ? ( $attr['showFeedback'] ? 1 : 0 ) : 1 ),
84 esc_attr( isset( $attr['showSources'] ) ? ( $attr['showSources'] ? 1 : 0 ) : 1 )
85 );
86 }
87
88 /**
89 * Add the initial state for the AI Chat block.
90 */
91 function add_ai_chat_block_data() {
92 // Only relevant to the editor right now.
93 if ( ! is_admin() ) {
94 return;
95 }
96 $search = new Search_Module_Control();
97 $plan = new Search_Plan();
98 $initial_state = array(
99 'jetpackSettings' => array(
100 // `module_active` reflects whether the Jetpack Search module is on, which is
101 // what controls site indexing — independent of the chosen front-end experience
102 // (Overlay / Theme / Inline / Embedded). The AI Chat block only needs the
103 // index, so it gates on this rather than on `instant_search_enabled`.
104 'module_active' => $search->is_active(),
105 'instant_search_enabled' => $search->is_instant_search_enabled(),
106 'plan_supports_search' => $plan->supports_instant_search(),
107 ),
108 );
109 wp_add_inline_script(
110 'jetpack-blocks-editor',
111 'var Jetpack_AIChatBlock = ' . wp_json_encode( $initial_state, JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ) . ';',
112 'before'
113 );
114 }
115 add_action( 'enqueue_block_assets', __NAMESPACE__ . '\add_ai_chat_block_data', 11 );
116