PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0.1
Jetpack – WP Security, Backup, Speed, & Growth v16.0.1
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 1 month ago js 1 month ago class-videopress-attachment-metadata.php 1 month ago class.jetpack-videopress.php 7 months ago class.videopress-cli.php 1 month ago class.videopress-edit-attachment.php 1 month ago class.videopress-gutenberg.php 7 months ago class.videopress-options.php 7 months ago class.videopress-player.php 1 week ago class.videopress-scheduler.php 7 months ago class.videopress-video.php 7 months ago class.videopress-xmlrpc.php 7 months ago editor-media-view.php 4 months ago shortcode.php 1 month ago videopress-admin-rtl.css 7 months ago videopress-admin-rtl.min.css 7 months ago videopress-admin.css 7 months ago videopress-admin.min.css 7 months ago
class.videopress-gutenberg.php
215 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 use Automattic\Jetpack\VideoPress\Block_Replacement;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit( 0 );
15 }
16
17 /**
18 * Register a VideoPress extension to replace the default Core Video block.
19 */
20 class VideoPress_Gutenberg {
21
22 /**
23 * Singleton
24 */
25 public static function init() {
26 static $instance = false;
27
28 if ( ! $instance ) {
29 $instance = new VideoPress_Gutenberg();
30 }
31
32 return $instance;
33 }
34
35 /**
36 * VideoPress_Gutenberg constructor.
37 *
38 * Initialize the VideoPress Gutenberg extension
39 */
40 private function __construct() {
41 // Run late to avoid race condition with other plugins that register the video block
42 // Jetpack's jetpack_register_block function bails if the block is already registered
43 add_action( 'init', array( $this, 'register_video_block_with_videopress' ), 99 );
44 add_action( 'jetpack_register_gutenberg_extensions', array( $this, 'set_extension_availability' ) );
45 add_action( 'enqueue_block_editor_assets', array( $this, 'override_video_upload' ) );
46 add_action( 'enqueue_block_editor_assets', array( $this, 'add_resumable_upload_support' ) );
47 Block_Replacement::init();
48 }
49
50 /**
51 * Get site's ID.
52 *
53 * @return int $blog_id Site ID.
54 */
55 private static function get_blog_id() {
56 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
57 return get_current_blog_id();
58 } elseif ( method_exists( 'Jetpack', 'is_active' ) && Jetpack::is_active() ) {
59 /**
60 * We're intentionally not using `get_current_blog_id` because it was returning unexpected values.
61 *
62 * @see https://github.com/Automattic/jetpack/pull/11193#issuecomment-457883886
63 * @see https://github.com/Automattic/jetpack/pull/11193/commits/215cf789f3d8bd03ff9eb1bbdb693acb8831d273
64 */
65 return Jetpack_Options::get_option( 'id' );
66 }
67
68 return null;
69 }
70
71 /**
72 * Used to check whether VideoPress is enabled for given site.
73 *
74 * @todo Create a global `jetpack_check_module_availability( $module )` helper so we can re-use it on other modules.
75 * This global helper should be created in a file synced with WordPress.com so we can use it there too.
76 * @see https://github.com/Automattic/jetpack/pull/11321#discussion_r255477815
77 *
78 * @return array Associative array indicating if the module is available (key `available`) and the reason why it is
79 * unavailable (key `unavailable_reason`)
80 */
81 public function check_videopress_availability() {
82 if ( ! Jetpack_Plan::supports( 'videopress' ) ) {
83 return array(
84 'available' => false,
85 'unavailable_reason' => 'missing_plan',
86 );
87 }
88
89 if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) {
90 if ( Jetpack::is_connection_ready() ) {
91 if ( ! Jetpack::is_module_active( 'videopress' ) ) {
92 return array(
93 'available' => false,
94 'unavailable_reason' => 'missing_module',
95 );
96 }
97 } else {
98 return array(
99 'available' => false,
100 'unavailable_reason' => 'unknown',
101 );
102 }
103 }
104
105 return array( 'available' => true );
106 }
107
108 /**
109 * Set the Jetpack Gutenberg extension availability.
110 */
111 public function set_extension_availability() {
112 $availability = $this->check_videopress_availability();
113 if ( $availability['available'] ) {
114 Jetpack_Gutenberg::set_extension_available( 'videopress' );
115 } else {
116 Jetpack_Gutenberg::set_extension_unavailable( 'videopress', $availability['unavailable_reason'] );
117 }
118 }
119
120 /**
121 * Register the core video block as a dynamic block.
122 *
123 * It defines a server-side rendering that adds VideoPress support to the core video block.
124 */
125 public function register_video_block_with_videopress() {
126 Blocks::jetpack_register_block(
127 'core/video',
128 array(
129 'render_callback' => array( $this, 'render_video_block_with_videopress' ),
130 )
131 );
132 }
133
134 /**
135 * Render the core video block replacing the src attribute with the VideoPress URL
136 *
137 * @param array $attributes Array containing the video block attributes.
138 * @param string $content String containing the video block content.
139 *
140 * @return string
141 */
142 public function render_video_block_with_videopress( $attributes, $content ) {
143 if ( ! isset( $attributes['id'] ) || isset( $attributes['guid'] ) ) {
144 return $content;
145 }
146
147 $blog_id = self::get_blog_id();
148
149 if ( ! isset( $blog_id ) ) {
150 return $content;
151 }
152
153 $post_id = absint( $attributes['id'] );
154 $videopress_id = video_get_info_by_blogpostid( $blog_id, $post_id )->guid;
155 $videopress_data = videopress_get_video_details( $videopress_id );
156
157 if ( empty( $videopress_data->file_url_base->https ) || empty( $videopress_data->files->hd->mp4 ) ) {
158 return $content;
159 }
160
161 $videopress_url = $videopress_data->file_url_base->https . $videopress_data->files->hd->mp4;
162
163 $pattern = '/(\s)src=([\'"])(?:(?!\2).)+?\2/';
164
165 return preg_replace(
166 $pattern,
167 sprintf(
168 '\1src="%1$s"',
169 esc_url_raw( $videopress_url )
170 ),
171 $content,
172 1
173 );
174 }
175
176 /**
177 * Temporary method to enable resumable uploads for testing by Automatticians
178 */
179 public function add_resumable_upload_support() {
180 wp_enqueue_script(
181 'videopress-add-resumable-upload-support',
182 plugins_url( 'js/videopress-add-resumable-upload-support.js', __FILE__ ),
183 null,
184 '1',
185 false
186 );
187 }
188
189 /**
190 * Replaces the video uploaded in the block editor.
191 *
192 * Enqueues a script that registers an API fetch middleware replacing the video uploads in Gutenberg so they are
193 * uploaded against the WP.com API media endpoint and thus transcoded by VideoPress.
194 */
195 public function override_video_upload() {
196 // Bail if Jetpack is not connected or VideoPress module is not active.
197 if ( ! Jetpack::is_connection_ready() || ! Jetpack::is_module_active( 'videopress' ) ) {
198 return;
199 }
200
201 wp_enqueue_script(
202 'jetpack-videopress-gutenberg-override-video-upload',
203 Assets::get_file_url_for_environment(
204 '_inc/build/videopress/js/gutenberg-video-upload.min.js',
205 'modules/videopress/js/gutenberg-video-upload.js'
206 ),
207 array( 'wp-api-fetch', 'wp-polyfill' ),
208 JETPACK__VERSION,
209 false
210 );
211 }
212 }
213
214 VideoPress_Gutenberg::init();
215