Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
92.31% covered (success)
92.31%
12 / 13
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Amp
91.67% covered (success)
91.67%
11 / 12
50.00% covered (danger)
50.00%
1 / 2
3.01
0.00% covered (danger)
0.00%
0 / 1
 check
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
2.15
 render
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3 * AMP-compatible BeyondWords player renderer.
4 *
5 * @package BeyondWords\Player\Renderer
6 * @since   6.0.0
7 * @since   7.0.0 Refactored to BeyondWords namespace with snake_case methods.
8 */
9
10declare( strict_types = 1 );
11
12namespace BeyondWords\Player\Renderer;
13
14defined( 'ABSPATH' ) || exit;
15
16/**
17 * Renders the player as an `<amp-iframe>` so it survives the AMP validator.
18 *
19 * @since 7.0.0 Refactored to BeyondWords namespace with snake_case methods.
20 */
21class Amp extends Base {
22
23    /**
24     * Whether the AMP renderer applies to this request.
25     *
26     * @param \WP_Post $post Post object.
27     */
28    public static function check( \WP_Post $post ): bool {
29        if ( ! \BeyondWords\Core\Utils::is_amp() ) {
30            return false;
31        }
32
33        return parent::check( $post );
34    }
35
36    /**
37     * Render the AMP player HTML.
38     *
39     * @param \WP_Post $post    Post object.
40     * @param string   $context Rendering context: 'auto' or 'shortcode'.
41     */
42    public static function render( \WP_Post $post, string $context = 'shortcode' ): string {
43        $project_id = \BeyondWords\Post\Meta::get_project_id( $post->ID );
44        $content_id = \BeyondWords\Post\Meta::get_content_id( $post->ID, true );
45
46        $src = sprintf( \BeyondWords\Core\Urls::get_amp_player_url(), $project_id, $content_id );
47
48        ob_start();
49        ?>
50        <amp-iframe
51            data-beyondwords-player-context="<?php echo esc_attr( $context ); ?>"
52            frameborder="0"
53            height="43"
54            layout="responsive"
55            sandbox="allow-scripts allow-same-origin allow-popups"
56            scrolling="no"
57            src="<?php echo esc_url( $src ); ?>"
58            width="295"
59        >
60            <amp-img
61                height="150"
62                layout="responsive"
63                placeholder
64                src="<?php echo esc_url( \BeyondWords\Core\Urls::get_amp_img_url() ); ?>"
65                width="643"
66            ></amp-img>
67        </amp-iframe>
68        <?php
69        return ob_get_clean();
70    }
71}