Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 2
CRAP
n/a
0 / 0
Automattic\Jetpack\Extensions\AIAssistant\register_block
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
20
Automattic\Jetpack\Extensions\AIAssistant\load_assets
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Jetpack AI Assistant Block.
4 *
5 * @since 12.2
6 *
7 * @package automattic/jetpack
8 */
9
10namespace Automattic\Jetpack\Extensions\AIAssistant;
11
12use Automattic\Jetpack\Blocks;
13use Automattic\Jetpack\Status;
14use Automattic\Jetpack\Status\Host;
15use Jetpack_Gutenberg;
16
17if ( ! defined( 'ABSPATH' ) ) {
18    exit( 0 );
19}
20
21/**
22 * Registers our block for use in Gutenberg
23 * This is done via an action so that we can disable
24 * registration if we need to.
25 */
26function register_block() {
27    if (
28    ( ( new Host() )->is_wpcom_simple()
29        || ! ( new Status() )->is_offline_mode()
30    ) && apply_filters( 'jetpack_ai_enabled', true )
31    ) {
32        Blocks::jetpack_register_block(
33            __DIR__,
34            array( 'render_callback' => __NAMESPACE__ . '\load_assets' )
35        );
36    }
37}
38add_action( 'init', __NAMESPACE__ . '\register_block' );
39
40/**
41 * Jetpack AI Assistant block registration/dependency declaration.
42 *
43 * @param array  $attr    Array containing the Jetpack AI Assistant block attributes.
44 * @param string $content String containing the Jetpack AI Assistant block content.
45 *
46 * @return string
47 */
48function load_assets( $attr, $content ) {
49    /*
50     * Enqueue necessary scripts and styles.
51     */
52    Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
53
54    return sprintf(
55        '<div class="%1$s">%2$s</div>',
56        esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
57        $content
58    );
59}
60
61/**
62 * Register extensions.
63 */
64add_action(
65    'jetpack_register_gutenberg_extensions',
66    function () {
67        if ( apply_filters( 'jetpack_ai_enabled', true ) ) {
68            Jetpack_Gutenberg::set_extension_available( 'ai-assistant-support' );
69            Jetpack_Gutenberg::set_extension_available( 'ai-assistant-form-support' );
70            Jetpack_Gutenberg::set_extension_available( 'ai-content-lens' );
71            Jetpack_Gutenberg::set_extension_available( 'ai-assistant-backend-prompts' );
72            Jetpack_Gutenberg::set_extension_available( 'ai-assistant-usage-panel' );
73            Jetpack_Gutenberg::set_extension_available( 'ai-featured-image-generator' );
74            Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization' );
75            Jetpack_Gutenberg::set_extension_available( 'ai-assistant-experimental-image-generation-support' );
76            Jetpack_Gutenberg::set_extension_available( 'ai-general-purpose-image-generator' );
77            Jetpack_Gutenberg::set_extension_available( 'ai-assistant-site-logo-support' );
78            Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization-keywords-support' );
79            Jetpack_Gutenberg::set_extension_available( 'ai-assistant-image-extension' );
80
81            $site_locale = get_locale();
82            // Only enable Write Brief for sites with an English locale
83            if ( str_starts_with( $site_locale, 'en' ) && apply_filters( 'breve_enabled', true ) ) {
84                Jetpack_Gutenberg::set_extension_available( 'ai-proofread-breve' );
85            }
86
87            if ( apply_filters( 'ai_seo_enhancer_enabled', true ) ) {
88                Jetpack_Gutenberg::set_availability_for_plan( 'ai-seo-enhancer' );
89            }
90        }
91    }
92);
93
94/**
95 * Register the `ai-list-to-table-transform` extension.
96 */
97add_action(
98    'jetpack_register_gutenberg_extensions',
99    function () {
100        if ( apply_filters( 'jetpack_ai_enabled', true ) &&
101            apply_filters( 'list_to_table_transform_enabled', false )
102        ) {
103            \Jetpack_Gutenberg::set_extension_available( 'ai-list-to-table-transform' );
104        }
105    }
106);
107
108/**
109 * Register the `ai-response-feedback` extension.
110 */
111add_action(
112    'jetpack_register_gutenberg_extensions',
113    function () {
114        if ( apply_filters( 'jetpack_ai_enabled', true ) &&
115            apply_filters( 'ai_response_feedback_enabled', true )
116        ) {
117            \Jetpack_Gutenberg::set_extension_available( 'ai-response-feedback' );
118        }
119    }
120);