PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 15.0
Jetpack – WP Security, Backup, Speed, & Growth v15.0
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 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 All 500 releases
jetpack / modules / shortcodes / vr.php
vr.php
165 lines 5.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 = ( isset( $url_params['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' );
165