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
jetpack / extensions / blocks / ai-assistant / ai-assistant.php

ai-assistant.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-beta, at extensions/blocks/ai-assistant/ai-assistant.php

150 lines 4.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Jetpack AI Assistant Block.
4 *
5 * @since 12.2
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\AIAssistant;
11
12 use Automattic\Jetpack\Blocks;
13 use Automattic\Jetpack\Status;
14 use Automattic\Jetpack\Status\Host;
15 use Jetpack_Gutenberg;
16
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit( 0 );
19 }
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
29 /**
30 * Registers our block for use in Gutenberg
31 * This is done via an action so that we can disable
32 * registration if we need to.
33 */
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
49 Blocks::jetpack_register_block(
50 __DIR__,
51 array( 'render_callback' => __NAMESPACE__ . '\load_assets' )
52 );
53 }
54 add_action( 'init', __NAMESPACE__ . '\register_block' );
55
56 /**
57 * Jetpack AI Assistant block registration/dependency declaration.
58 *
59 * @param array $attr Array containing the Jetpack AI Assistant block attributes.
60 * @param string $content String containing the Jetpack AI Assistant block content.
61 *
62 * @return string
63 */
64 function load_assets( $attr, $content ) {
65 /*
66 * Enqueue necessary scripts and styles.
67 */
68 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
69
70 return sprintf(
71 '<div class="%1$s">%2$s</div>',
72 esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
73 $content
74 );
75 }
76
77 /**
78 * Register extensions.
79 */
80 add_action(
81 'jetpack_register_gutenberg_extensions',
82 function () {
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' );
87
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 }
120 }
121 );
122
123 /**
124 * Register the `ai-list-to-table-transform` extension.
125 */
126 add_action(
127 'jetpack_register_gutenberg_extensions',
128 function () {
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 }
134 }
135 );
136
137 /**
138 * Register the `ai-response-feedback` extension.
139 */
140 add_action(
141 'jetpack_register_gutenberg_extensions',
142 function () {
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 }
148 }
149 );
150