Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 70
0.00% covered (danger)
0.00%
0 / 3
CRAP
n/a
0 / 0
Automattic\Jetpack\Extensions\Blogroll\register_block
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
Automattic\Jetpack\Extensions\Blogroll\load_assets
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
20
Automattic\Jetpack\Extensions\Blogroll\site_recommendations_settings
0.00% covered (danger)
0.00%
0 / 43
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Blogroll Block.
4 *
5 * @since 12.1
6 *
7 * @package automattic/jetpack
8 */
9
10namespace Automattic\Jetpack\Extensions\Blogroll;
11
12require_once __DIR__ . '/blogroll-item/blogroll-item.php';
13
14use Automattic\Jetpack\Blocks;
15use Automattic\Jetpack\Status\Request;
16use Jetpack_Gutenberg;
17
18/**
19 * Registers the block for use in Gutenberg
20 * This is done via an action so that we can disable
21 * registration if we need to.
22 */
23function register_block() {
24    Blocks::jetpack_register_block(
25        __DIR__,
26        array(
27            'render_callback'  => __NAMESPACE__ . '\load_assets',
28            'provides_context' => array(
29                'openLinksNewWindow' => 'open_links_new_window',
30            ),
31        )
32    );
33}
34add_action( 'init', __NAMESPACE__ . '\register_block' );
35
36/**
37 * Blogroll block registration/dependency declaration.
38 *
39 * @param array  $attr    Array containing the Blogroll block attributes.
40 * @param string $content String containing the Blogroll block content.
41 *
42 * @return string
43 */
44function load_assets( $attr, $content ) {
45    global $wp;
46
47    /*
48     * Enqueue necessary scripts and styles.
49     */
50    Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
51    $current_location = home_url( $wp->request );
52    $is_wpcom         = ( defined( 'IS_WPCOM' ) && IS_WPCOM );
53
54    $form_content = <<<HTML
55        <form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8">
56            <input name="action" type="hidden" value="subscribe">
57            <input name="source" type="hidden" value="$current_location">
58            <input name="sub-type" type="hidden" value="jetpack_blogroll">
59            $content
60        </form>
61HTML;
62
63    $blogroll_content = $is_wpcom && Request::is_frontend() ? $form_content : $content;
64
65    return sprintf(
66        '<div class="%1$s">%2$s</div>',
67        esc_attr( Blocks::classes( FEATURE_NAME, $attr ) ),
68        $blogroll_content
69    );
70}
71
72/**
73 * Register site_recommendations settings
74 *
75 * @since 12.7
76 */
77function site_recommendations_settings() {
78    register_setting(
79        'general',
80        'Blogroll Recommendations', // Visible to the user see: https://github.com/WordPress/gutenberg/issues/41637
81        array(
82            'description'   => __( 'Site Recommendations', 'jetpack' ),
83            'type'          => 'array',
84            'show_in_rest'  => array(
85                'schema' => array(
86                    'items' => array(
87                        'type'       => 'object',
88                        'properties' => array(
89                            'id'                => array(
90                                'type'   => 'string',
91                                'format' => 'text-field',
92                            ),
93                            'name'              => array(
94                                'type'   => 'string',
95                                'format' => 'text-field',
96                            ),
97                            'icon'              => array(
98                                'type'   => 'string',
99                                'format' => 'uri',
100                            ),
101                            'url'               => array(
102                                'type'   => 'string',
103                                'format' => 'uri',
104                            ),
105                            'description'       => array(
106                                'type'   => 'string',
107                                'format' => 'text-field',
108                            ),
109                            'is_non_wpcom_site' => array(
110                                'type' => 'boolean',
111                            ),
112                        ),
113                    ),
114                ),
115            ),
116            'auth_callback' => function () {
117                return current_user_can( 'edit_posts' );
118            },
119        )
120    );
121}
122
123add_action( 'rest_api_init', __NAMESPACE__ . '\site_recommendations_settings' );