PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.3-beta
16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 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 All 507 releases
← All changes | extensions/blocks/ai-assistant/ai-assistant.php +79 -20 12.6.4 → 16.3-beta View file →
@@ -9,13 +9,24 @@
9 9
10 10 namespace Automattic\Jetpack\Extensions\AIAssistant;
11 11
12 12 use Automattic\Jetpack\Blocks;
13 +use Automattic\Jetpack\Status;
14 +use Automattic\Jetpack\Status\Host;
13 15 use Jetpack_Gutenberg;
14 16
15 -const FEATURE_NAME = 'ai-assistant';
16 -const BLOCK_NAME = 'jetpack/' . FEATURE_NAME;
17 +if ( ! defined( 'ABSPATH' ) ) {
18 + exit( 0 );
19 +}
17 20
21 +// Required directly rather than relying on the plugin bootstrap: on
22 +// WordPress.com Simple the extension files load through wpcom's own loader
23 +// and load-jetpack.php never runs.
24 +// This file loads before PHPUnit starts collecting coverage.
25 +// @codeCoverageIgnoreStart
26 +require_once __DIR__ . '/../../../_inc/lib/class-jetpack-ai-settings.php';
27 +// @codeCoverageIgnoreEnd
28 +
18 29 /**
19 30 * Registers our block for use in Gutenberg
20 31 * This is done via an action so that we can disable
21 32 * registration if we need to.
@@ -20,10 +31,24 @@
20 31 * This is done via an action so that we can disable
21 32 * registration if we need to.
22 33 */
23 34 function register_block() {
35 + if ( ! ( new Host() )->is_wpcom_simple() && ( new Status() )->is_offline_mode() ) {
36 + return;
37 + }
38 +
39 + if ( ! \Jetpack_AI_Settings::is_ai_enabled() ) {
40 + Jetpack_Gutenberg::set_extension_unavailable( 'ai-assistant', 'ai_disabled' );
41 + return;
42 + }
43 +
44 + if ( ! \Jetpack_AI_Settings::is_feature_enabled( 'writing_assistant' ) ) {
45 + Jetpack_Gutenberg::set_extension_unavailable( 'ai-assistant', 'ai_disabled', array( 'feature' => 'writing_assistant' ) );
46 + return;
47 + }
48 +
24 49 Blocks::jetpack_register_block(
25 - BLOCK_NAME,
50 + __DIR__,
26 51 array( 'render_callback' => __NAMESPACE__ . '\load_assets' )
27 52 );
28 53 }
29 54 add_action( 'init', __NAMESPACE__ . '\register_block' );
@@ -39,52 +64,86 @@
39 64 function load_assets( $attr, $content ) {
40 65 /*
41 66 * Enqueue necessary scripts and styles.
42 67 */
43 - Jetpack_Gutenberg::load_assets_as_required( FEATURE_NAME );
68 + Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
44 69
45 70 return sprintf(
46 71 '<div class="%1$s">%2$s</div>',
47 - esc_attr( Blocks::classes( FEATURE_NAME, $attr ) ),
72 + esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
48 73 $content
49 74 );
50 75 }
51 76
52 77 /**
53 - * Register the `ai-assistant-support` extension.
78 + * Register extensions.
54 79 */
55 80 add_action(
56 81 'jetpack_register_gutenberg_extensions',
57 82 function () {
58 - \Jetpack_Gutenberg::set_extension_available( 'ai-assistant-support' );
59 - }
60 -);
83 + if ( \Jetpack_AI_Settings::is_ai_enabled() ) {
84 + // The usage meter reports on every AI feature, so it follows the
85 + // master switch alone.
86 + Jetpack_Gutenberg::set_extension_available( 'ai-assistant-usage-panel' );
61 87
62 -/**
63 - * Register the `ai-assistant-form-support` extension.
64 - */
65 -add_action(
66 - 'jetpack_register_gutenberg_extensions',
67 - function () {
68 - \Jetpack_Gutenberg::set_extension_available( 'ai-assistant-form-support' );
88 + if ( \Jetpack_AI_Settings::is_feature_enabled( 'writing_assistant' ) ) {
89 + Jetpack_Gutenberg::set_extension_available( 'ai-content-lens' );
90 + Jetpack_Gutenberg::set_extension_available( 'ai-assistant-support' );
91 + Jetpack_Gutenberg::set_extension_available( 'ai-assistant-form-support' );
92 + Jetpack_Gutenberg::set_extension_available( 'ai-assistant-backend-prompts' );
93 + Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization' );
94 + Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization-keywords-support' );
95 +
96 + $site_locale = get_locale();
97 + // Only enable Write Brief for sites with an English locale.
98 + // Disabled by default; set the 'breve_enabled' filter to true to re-enable.
99 + if ( str_starts_with( $site_locale, 'en' ) && apply_filters( 'breve_enabled', false ) ) {
100 + Jetpack_Gutenberg::set_extension_available( 'ai-proofread-breve' );
101 + }
102 +
103 + if ( apply_filters( 'ai_correct_spelling_enabled', false ) ) {
104 + Jetpack_Gutenberg::set_extension_available( 'ai-correct-spelling' );
105 + }
106 + }
107 +
108 + if ( \Jetpack_AI_Settings::is_feature_enabled( 'image_editor' ) ) {
109 + Jetpack_Gutenberg::set_extension_available( 'ai-featured-image-generator' );
110 + Jetpack_Gutenberg::set_extension_available( 'ai-assistant-experimental-image-generation-support' );
111 + Jetpack_Gutenberg::set_extension_available( 'ai-general-purpose-image-generator' );
112 + Jetpack_Gutenberg::set_extension_available( 'ai-assistant-site-logo-support' );
113 + Jetpack_Gutenberg::set_extension_available( 'ai-assistant-image-extension' );
114 + }
115 +
116 + if ( apply_filters( 'ai_seo_enhancer_enabled', true ) ) {
117 + Jetpack_Gutenberg::set_availability_for_plan( 'ai-seo-enhancer' );
118 + }
119 + }
69 120 }
70 121 );
71 122
72 123 /**
73 - * Register the `ai-content-lens` extension.
124 + * Register the `ai-list-to-table-transform` extension.
74 125 */
75 126 add_action(
76 127 'jetpack_register_gutenberg_extensions',
77 128 function () {
78 - \Jetpack_Gutenberg::set_extension_available( 'ai-content-lens' );
129 + if ( \Jetpack_AI_Settings::is_ai_enabled() &&
130 + apply_filters( 'list_to_table_transform_enabled', false )
131 + ) {
132 + \Jetpack_Gutenberg::set_extension_available( 'ai-list-to-table-transform' );
133 + }
79 134 }
80 135 );
81 136
82 137 /**
83 - * Register the `ai-assistant-backend-prompts` extension.
138 + * Register the `ai-response-feedback` extension.
84 139 */
85 140 add_action(
86 141 'jetpack_register_gutenberg_extensions',
87 142 function () {
88 - \Jetpack_Gutenberg::set_extension_available( 'ai-assistant-backend-prompts' );
143 + if ( \Jetpack_AI_Settings::is_ai_enabled() &&
144 + apply_filters( 'ai_response_feedback_enabled', true )
145 + ) {
146 + \Jetpack_Gutenberg::set_extension_available( 'ai-response-feedback' );
147 + }
89 148 }
90 149 );