PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 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 All 508 releases
← All changes | modules/shortcodes/vr.php +164 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,164 @@
1 +<?php
2 +/**
3 + * VR Viewer Shortcode
4 + * converts [vr] shortcode to an iframe viewer hosted on vr.me.sh
5 + *
6 + * @package automattic/jetpack
7 + */
8 +
9 +if ( ! defined( 'ABSPATH' ) ) {
10 + exit( 0 );
11 +}
12 +
13 +/**
14 + * Scrub URL paramaters for VR viewer
15 + *
16 + * @param array $params {
17 + * parameter array which is passed to the jetpack_vr_viewer.
18 + *
19 + * @type string $url url of 360 media
20 + * @type string $guid guid for videopress
21 + * @type string $view cinema, 360 - controls if panaroma view, or 360
22 + * @type string $rotation number for rotating media
23 + * @type string $preview show preview image or not
24 + * }
25 + *
26 + * @return array|false $url_params Array of URL parameters.
27 + */
28 +function jetpack_vr_viewer_get_viewer_url_params( $params ) {
29 + $url_params = array();
30 +
31 + if ( isset( $params['rotation'] ) ) {
32 + $url_params['rotation'] = (int) $params['rotation'];
33 + }
34 +
35 + if ( isset( $params['view'] ) && in_array( $params['view'], array( 'cinema', '360' ), true ) ) {
36 + $url_params['view'] = $params['view'];
37 + }
38 +
39 + if ( isset( $params['preview'] ) && $params['preview'] ) {
40 + $url_params['preview'] = 1;
41 + }
42 +
43 + if ( isset( $params['url'] ) ) {
44 + return array_merge( $url_params, array( 'url' => $params['url'] ) );
45 + } elseif ( isset( $params['guid'] ) ) {
46 + return array_merge( $url_params, array( 'guid' => $params['guid'] ) );
47 + }
48 +
49 + return false;
50 +}
51 +
52 +/**
53 + * Get padding for IFRAME depending on view type
54 + *
55 + * @param string $view string cinema, 360 - default cinema.
56 + *
57 + * @return string $css padding
58 + */
59 +function jetpack_vr_viewer_iframe_padding( $view ) {
60 + if ( '360' === $view ) {
61 + return '100%'; // 1:1 square aspect for 360
62 + }
63 +
64 + return '50%'; // 2:1 panorama aspect
65 +}
66 +
67 +/**
68 + * Create HTML for VR Viewer IFRAME and wrapper
69 + * The viewer code is hosted on vr.me.sh site which is then displayed
70 + * within posts via an IFRAME. This function returns the IFRAME html.
71 + *
72 + * @param array $url_params {
73 + * parameter array which is passed to the jetpack_vr_viewer.
74 + *
75 + * @type string $url url of 360 media
76 + * @type string $guid guid for videopress
77 + * @type string $view cinema, 360 - controls if panaroma view, or 360
78 + * @type string $rotation number for rotating media
79 + * @type string $preview show preview image or not
80 + * }
81 + *
82 + * @return string $rtn an iframe for viewer.
83 + */
84 +function jetpack_vr_viewer_get_html( $url_params ) {
85 + global $content_width;
86 +
87 + $iframe = add_query_arg( $url_params, 'https://vr.me.sh/view/' );
88 +
89 + // set some defaults.
90 + $maxwidth = ( is_numeric( $content_width ) && $content_width > 0 ) ? $content_width : 720;
91 + $view = $url_params['view'] ?? 'cinema';
92 +
93 + // If the shortcode is displayed in a WPCOM notification, display a simple link only.
94 + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
95 + require_once WP_CONTENT_DIR . '/lib/display-context.php';
96 + $context = A8C\Display_Context\get_current_context();
97 + if ( A8C\Display_Context\NOTIFICATIONS === $context ) {
98 + return sprintf(
99 + '<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s</a>',
100 + esc_url( $iframe )
101 + );
102 + }
103 + }
104 +
105 + $rtn = '<div style="position: relative; max-width: ' . $maxwidth . 'px; margin-left: auto; margin-right: auto; overflow: hidden; margin-bottom: 1em;">';
106 + $rtn .= '<div style="padding-top: ' . jetpack_vr_viewer_iframe_padding( $view ) . ';"></div>';
107 + $rtn .= '<iframe style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 100%" allowfullscreen="true" frameborder="0" width="100%" height="300" src="' . esc_url( $iframe ) . '">';
108 + $rtn .= '</iframe>';
109 + $rtn .= '</div>';
110 +
111 + return $rtn;
112 +}
113 +
114 +/**
115 + * Convert [vr] shortcode to viewer
116 + *
117 + * Shortcode example:
118 + * [vr url="https://en-blog.files.wordpress.com/2016/12/regents_park.jpg" view="360"]
119 + *
120 + * VR Viewer embed code:
121 + * <div style="position: relative; max-width: 720px; margin-left: auto; margin-right: auto; overflow: hidden;">
122 + * <div style="padding-top: 100%;"></div>
123 + * <iframe style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 100%" allowfullscreen="true" frameborder="0" width="100%" height="400" src="https://vr.me.sh/view/?view=360&amp;url=https://en-blog.files.wordpress.com/2016/12/regents_park.jpg">
124 + * </iframe>
125 + * </div>
126 + *
127 + * @param array $atts Shortcode attributes.
128 + *
129 + * @return string complete vr viewer html
130 + */
131 +function jetpack_vr_viewer_shortcode( $atts ) {
132 + $params = shortcode_atts(
133 + array(
134 + 0 => null,
135 + 'url' => null,
136 + 'src' => null,
137 + 'guid' => null,
138 + 'rotation' => null,
139 + 'view' => null,
140 + 'preview' => false,
141 + ),
142 + $atts
143 + );
144 +
145 + // We offer a few ways to specify the URL.
146 + if ( $params[0] ) {
147 + $params['url'] = $params[0];
148 + } elseif ( $params['src'] ) {
149 + $params['url'] = $params['src'];
150 + }
151 +
152 + $url_params = jetpack_vr_viewer_get_viewer_url_params( $params );
153 + if ( $url_params ) {
154 + return jetpack_vr_viewer_get_html( $url_params );
155 + }
156 +
157 + // add check for user.
158 + if ( current_user_can( 'edit_posts' ) ) {
159 + return '[vr] shortcode requires a data source to be given';
160 + } else {
161 + return '';
162 + }
163 +}
164 +add_shortcode( 'vr', 'jetpack_vr_viewer_shortcode' );