PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.8.3
Jetpack – WP Security, Backup, Speed, & Growth v12.8.3
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 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / videopress / class.videopress-gutenberg.php
jetpack / modules / videopress Last commit date
css 3 years ago js 3 years ago class-videopress-attachment-metadata.php 4 years ago class.jetpack-videopress.php 4 years ago class.videopress-cli.php 3 years ago class.videopress-edit-attachment.php 3 years ago class.videopress-gutenberg.php 3 years ago class.videopress-options.php 2 years ago class.videopress-player.php 3 years ago class.videopress-scheduler.php 4 years ago class.videopress-video.php 4 years ago class.videopress-xmlrpc.php 2 years ago editor-media-view.php 3 years ago shortcode.php 2 years ago videopress-admin-rtl.css 4 years ago videopress-admin-rtl.min.css 4 years ago videopress-admin.css 4 years ago videopress-admin.min.css 4 years ago
class.videopress-gutenberg.php
207 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Block Editor functionality for VideoPress users.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Assets;
9 use Automattic\Jetpack\Blocks;
10 use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
11
12 /**
13 * Register a VideoPress extension to replace the default Core Video block.
14 */
15 class VideoPress_Gutenberg {
16
17 /**
18 * Singleton
19 */
20 public static function init() {
21 static $instance = false;
22
23 if ( ! $instance ) {
24 $instance = new VideoPress_Gutenberg();
25 }
26
27 return $instance;
28 }
29
30 /**
31 * VideoPress_Gutenberg constructor.
32 *
33 * Initialize the VideoPress Gutenberg extension
34 */
35 private function __construct() {
36 add_action( 'init', array( $this, 'register_video_block_with_videopress' ) );
37 add_action( 'jetpack_register_gutenberg_extensions', array( $this, 'set_extension_availability' ) );
38 add_action( 'enqueue_block_editor_assets', array( $this, 'override_video_upload' ) );
39 add_action( 'enqueue_block_editor_assets', array( $this, 'add_resumable_upload_support' ) );
40 }
41
42 /**
43 * Get site's ID.
44 *
45 * @return int $blog_id Site ID.
46 */
47 private static function get_blog_id() {
48 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
49 return get_current_blog_id();
50 } elseif ( method_exists( 'Jetpack', 'is_active' ) && Jetpack::is_active() ) {
51 /**
52 * We're intentionally not using `get_current_blog_id` because it was returning unexpected values.
53 *
54 * @see https://github.com/Automattic/jetpack/pull/11193#issuecomment-457883886
55 * @see https://github.com/Automattic/jetpack/pull/11193/commits/215cf789f3d8bd03ff9eb1bbdb693acb8831d273
56 */
57 return Jetpack_Options::get_option( 'id' );
58 }
59
60 return null;
61 }
62
63 /**
64 * Used to check whether VideoPress is enabled for given site.
65 *
66 * @todo Create a global `jetpack_check_module_availability( $module )` helper so we can re-use it on other modules.
67 * This global helper should be created in a file synced with WordPress.com so we can use it there too.
68 * @see https://github.com/Automattic/jetpack/pull/11321#discussion_r255477815
69 *
70 * @return array Associative array indicating if the module is available (key `available`) and the reason why it is
71 * unavailable (key `unavailable_reason`)
72 */
73 public function check_videopress_availability() {
74 if ( ! Jetpack_Plan::supports( 'videopress' ) ) {
75 return array(
76 'available' => false,
77 'unavailable_reason' => 'missing_plan',
78 );
79 }
80
81 if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) {
82 if ( Jetpack::is_connection_ready() ) {
83 if ( ! Jetpack::is_module_active( 'videopress' ) ) {
84 return array(
85 'available' => false,
86 'unavailable_reason' => 'missing_module',
87 );
88 }
89 } else {
90 return array(
91 'available' => false,
92 'unavailable_reason' => 'unknown',
93 );
94 }
95 }
96
97 return array( 'available' => true );
98 }
99
100 /**
101 * Set the Jetpack Gutenberg extension availability.
102 */
103 public function set_extension_availability() {
104 $availability = $this->check_videopress_availability();
105 if ( $availability['available'] ) {
106 Jetpack_Gutenberg::set_extension_available( 'jetpack/videopress' );
107 } else {
108 Jetpack_Gutenberg::set_extension_unavailable( 'jetpack/videopress', $availability['unavailable_reason'] );
109 }
110 }
111
112 /**
113 * Register the core video block as a dynamic block.
114 *
115 * It defines a server-side rendering that adds VideoPress support to the core video block.
116 */
117 public function register_video_block_with_videopress() {
118 Blocks::jetpack_register_block(
119 'core/video',
120 array(
121 'render_callback' => array( $this, 'render_video_block_with_videopress' ),
122 )
123 );
124 }
125
126 /**
127 * Render the core video block replacing the src attribute with the VideoPress URL
128 *
129 * @param array $attributes Array containing the video block attributes.
130 * @param string $content String containing the video block content.
131 *
132 * @return string
133 */
134 public function render_video_block_with_videopress( $attributes, $content ) {
135 if ( ! isset( $attributes['id'] ) || isset( $attributes['guid'] ) ) {
136 return $content;
137 }
138
139 $blog_id = self::get_blog_id();
140
141 if ( ! isset( $blog_id ) ) {
142 return $content;
143 }
144
145 $post_id = absint( $attributes['id'] );
146 $videopress_id = video_get_info_by_blogpostid( $blog_id, $post_id )->guid;
147 $videopress_data = videopress_get_video_details( $videopress_id );
148
149 if ( empty( $videopress_data->file_url_base->https ) || empty( $videopress_data->files->hd->mp4 ) ) {
150 return $content;
151 }
152
153 $videopress_url = $videopress_data->file_url_base->https . $videopress_data->files->hd->mp4;
154
155 $pattern = '/(\s)src=([\'"])(?:(?!\2).)+?\2/';
156
157 return preg_replace(
158 $pattern,
159 sprintf(
160 '\1src="%1$s"',
161 esc_url_raw( $videopress_url )
162 ),
163 $content,
164 1
165 );
166 }
167
168 /**
169 * Temporary method to enable resumable uploads for testing by Automatticians
170 */
171 public function add_resumable_upload_support() {
172 wp_enqueue_script(
173 'videopress-add-resumable-upload-support',
174 plugins_url( 'js/videopress-add-resumable-upload-support.js', __FILE__ ),
175 null,
176 '1',
177 false
178 );
179 }
180
181 /**
182 * Replaces the video uploaded in the block editor.
183 *
184 * Enqueues a script that registers an API fetch middleware replacing the video uploads in Gutenberg so they are
185 * uploaded against the WP.com API media endpoint and thus transcoded by VideoPress.
186 */
187 public function override_video_upload() {
188 // Bail if Jetpack is not connected or VideoPress module is not active.
189 if ( ! Jetpack::is_connection_ready() || ! Jetpack::is_module_active( 'videopress' ) ) {
190 return;
191 }
192
193 wp_enqueue_script(
194 'jetpack-videopress-gutenberg-override-video-upload',
195 Assets::get_file_url_for_environment(
196 '_inc/build/videopress/js/gutenberg-video-upload.min.js',
197 'modules/videopress/js/gutenberg-video-upload.js'
198 ),
199 array( 'wp-api-fetch', 'wp-polyfill', 'lodash' ),
200 JETPACK__VERSION,
201 false
202 );
203 }
204 }
205
206 VideoPress_Gutenberg::init();
207