Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 57
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Inline_Help
0.00% covered (danger)
0.00%
0 / 57
0.00% covered (danger)
0.00%
0 / 4
72
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 register_actions
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
20
 add_fab_icon
0.00% covered (danger)
0.00%
0 / 40
0.00% covered (danger)
0.00%
0 / 1
6
 add_fab_styles
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Inline Help.
4 *
5 * Handles providing a LiveChat icon within WPAdmin until such time
6 * as the full live chat experience can be run in a non-Calypso environment.
7 *
8 * @package automattic/jetpack-masterbar
9 */
10
11namespace Automattic\Jetpack\Masterbar;
12
13use Automattic\Jetpack\Assets;
14
15/**
16 * Class Inline_Help.
17 *
18 * @phan-constructor-used-for-side-effects
19 */
20class Inline_Help {
21
22    /**
23     * Inline_Help constructor.
24     */
25    public function __construct() {
26        add_action( 'current_screen', array( $this, 'register_actions' ) );
27    }
28
29    /**
30     * Registers actions.
31     *
32     * @param object $current_screen Current screen object.
33     * @return void
34     */
35    public function register_actions( $current_screen ) {
36        // phpcs:disable WordPress.Security.NonceVerification.Recommended
37        // Do not inject the FAB icon on embedded screens since the parent window may already contain a FAB icon.
38        $is_framed = ! empty( $_GET['frame-nonce'] );
39
40        // Do not inject the FAB icon on Yoast screens to avoid overlap with the Yoast help icon.
41        $is_yoast = ! empty( $current_screen->base ) && str_contains( $current_screen->base, '_page_wpseo_' );
42
43        if ( $is_framed || $is_yoast ) {
44            return;
45        }
46        // phpcs:enable WordPress.Security.NonceVerification.Recommended
47
48        add_action( 'admin_footer', array( $this, 'add_fab_icon' ) );
49
50        add_action( 'admin_enqueue_scripts', array( $this, 'add_fab_styles' ) );
51    }
52
53    /**
54     * Outputs "FAB" icon markup and SVG.
55     *
56     * @return void|string the HTML markup for the FAB or early exit.
57     */
58    public function add_fab_icon() {
59
60        if ( wp_doing_ajax() ) {
61            return;
62        }
63
64        $svg_allowed = array(
65            'svg'   => array(
66                'id'              => true,
67                'class'           => true,
68                'aria-hidden'     => true,
69                'aria-labelledby' => true,
70                'role'            => true,
71                'xmlns'           => true,
72                'width'           => true,
73                'height'          => true,
74                'viewbox'         => true, // <= Must be lower case!
75            ),
76            'g'     => array( 'fill' => true ),
77            'title' => array( 'title' => true ),
78            'path'  => array(
79                'd'    => true,
80                'fill' => true,
81            ),
82        );
83
84        $gridicon_help = file_get_contents( __DIR__ . '/gridicon-help.svg', true );
85
86        // Add tracking data to link to be picked up by Calypso for GA and Tracks usage.
87        $tracking_href = add_query_arg(
88            array(
89                'utm_source'  => 'wp_admin',
90                'utm_medium'  => 'other',
91                'utm_content' => 'jetpack_masterbar_inline_help_click',
92                'flags'       => 'a8c-analytics.on',
93            ),
94            'https://wordpress.com/help'
95        );
96
97        load_template(
98            __DIR__ . '/inline-help-template.php',
99            true,
100            array(
101                'href'        => $tracking_href,
102                'icon'        => $gridicon_help,
103                'svg_allowed' => $svg_allowed,
104            )
105        );
106    }
107
108    /**
109     * Enqueues FAB CSS styles.
110     *
111     * @return void
112     */
113    public function add_fab_styles() {
114        $assets_base_path = '../../dist/inline-help/';
115
116        Assets::register_script(
117            'a8c-faux-inline-help',
118            $assets_base_path . 'inline-help.js',
119            __FILE__,
120            array(
121                'enqueue'  => true,
122                'css_path' => $assets_base_path . 'inline-help.css',
123            )
124        );
125    }
126}