PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
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 / jetpack_vendor / automattic / jetpack-videopress / src / class-xmlrpc.php
jetpack / jetpack_vendor / automattic / jetpack-videopress / src Last commit date
js 2 months ago tus 1 month ago videopress-divi 2 months ago videopress-divi-5 2 months ago class-access-control.php 5 days ago class-admin-ui.php 2 weeks ago class-ajax.php 1 month ago class-attachment-handler.php 1 month ago class-block-editor-content.php 1 month ago class-block-editor-extensions.php 2 weeks ago class-block-replacement.php 9 months ago class-caption-tracks.php 1 month ago class-data.php 1 month ago class-divi.php 2 months ago class-initial-state.php 2 weeks ago class-initializer.php 5 days ago class-jwt-token-bridge.php 2 years ago class-module-control.php 3 years ago class-options.php 2 years ago class-package-version.php 5 days ago class-plan.php 2 years ago class-rest-controller.php 1 month ago class-site.php 3 years ago class-stats.php 1 year ago class-status.php 9 months ago class-upload-exception.php 3 years ago class-uploader-rest-endpoints.php 2 weeks ago class-uploader.php 1 month ago class-utils.php 3 months ago class-video-block-email-renderer.php 2 months ago class-videopress-rest-api-v1-features.php 6 months ago class-videopress-rest-api-v1-settings.php 1 month ago class-videopress-rest-api-v1-site.php 2 weeks ago class-videopress-rest-api-v1-stats.php 3 years ago class-videopresstoken.php 1 month ago class-wpcom-rest-api-v2-attachment-field-videopress.php 9 months ago class-wpcom-rest-api-v2-attachment-videopress-data.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress-caption-tracks.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress.php 2 weeks ago class-xmlrpc.php 1 month ago utility-functions.php 4 weeks ago
class-xmlrpc.php
236 lines
1 <?php
2 /**
3 * The VIdeoPress XMLRPC class
4 *
5 * @package automattic/jetpack-videopress
6 */
7
8 namespace Automattic\Jetpack\VideoPress;
9
10 use WP_User;
11
12 /**
13 * VideoPress playback module markup generator.
14 *
15 * @since 0.1.1
16 */
17 class XMLRPC {
18
19 /**
20 * Singleton XMLRPC instance.
21 *
22 * @var XMLRPC
23 **/
24 private static $instance = null;
25
26 /**
27 * The current user object.
28 *
29 * @var WP_User
30 */
31 private $current_user;
32
33 /**
34 * Private VideoPress_XMLRPC constructor.
35 *
36 * Use the VideoPress_XMLRPC::init() method to get an instance.
37 */
38 private function __construct() {
39 add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ), 10, 3 );
40 }
41
42 /**
43 * Initialize the VideoPress_XMLRPC and get back a singleton instance.
44 *
45 * @return XMLRPC
46 */
47 public static function init() {
48 if ( self::$instance === null ) {
49 self::$instance = new XMLRPC();
50 }
51
52 return self::$instance;
53 }
54
55 /**
56 * Adds additional methods the WordPress xmlrpc API for handling VideoPress specific features
57 *
58 * @param array $methods The Jetpack API methods.
59 * @param array $core_methods The WordPress Core API methods (ignored).
60 * @param WP_User $user The user object the API request is signed by.
61 *
62 * @return array
63 */
64 public function xmlrpc_methods( $methods, $core_methods, $user ) {
65 if ( $user && $user instanceof WP_User ) {
66 $this->current_user = $user;
67 }
68
69 $methods['jetpack.createMediaItem'] = array( $this, 'create_media_item' );
70 $methods['jetpack.updateVideoPressMediaItem'] = array( $this, 'update_videopress_media_item' );
71 $methods['jetpack.updateVideoPressPosterImage'] = array( $this, 'update_poster_image' );
72
73 return $methods;
74 }
75
76 /**
77 * This is used by the WPCOM VideoPress uploader in order to create a media item with
78 * specific meta data about an uploaded file. After this, the transcoding session will
79 * update the meta information via the update_videopress_media_item() method.
80 *
81 * Note: This method technically handles the creation of multiple media objects, though
82 * in practice this is never done.
83 *
84 * @param array $media Media items being uploaded.
85 * @return array
86 */
87 public function create_media_item( $media ) {
88 $this->authenticate_user();
89
90 foreach ( $media as & $media_item ) {
91 $url = is_string( $media_item['url'] ?? null ) ? $media_item['url'] : '';
92 $title = isset( $media_item['title'] ) && '' !== $media_item['title']
93 ? sanitize_text_field( $media_item['title'] )
94 : sanitize_title( basename( $url ) );
95 $guid = $media['guid'] ?? null;
96
97 $media_id = videopress_create_new_media_item( $title, $guid );
98
99 $post_update = array();
100 if ( isset( $media_item['description'] ) && '' !== $media_item['description'] ) {
101 $post_update['post_content'] = sanitize_textarea_field( $media_item['description'] );
102 }
103 if ( isset( $media_item['caption'] ) && '' !== $media_item['caption'] ) {
104 $post_update['post_excerpt'] = sanitize_textarea_field( $media_item['caption'] );
105 }
106 if ( $post_update ) {
107 $post_update['ID'] = $media_id;
108 wp_update_post( $post_update );
109 }
110
111 wp_update_attachment_metadata(
112 $media_id,
113 array(
114 'original' => array(
115 'url' => $media_item['url'],
116 ),
117 )
118 );
119
120 $media_item['post'] = get_post( $media_id );
121 }
122
123 return array( 'media' => $media );
124 }
125
126 /**
127 * Update VideoPress metadata for a media item.
128 *
129 * @param array $request Media item to update.
130 *
131 * @return bool
132 */
133 public function update_videopress_media_item( $request ) {
134 $this->authenticate_user();
135
136 $id = $request['post_id'];
137 $status = $request['status'];
138 $format = $request['format'];
139 $info = $request['info'];
140
141 $attachment = get_post( $id );
142 if ( ! $attachment ) {
143 return false;
144 }
145
146 $attachment->guid = $info['original'];
147 $attachment->post_mime_type = 'video/videopress';
148
149 wp_update_post( $attachment );
150
151 // Update the vp guid and set it to a direct meta property.
152 update_post_meta( $id, 'videopress_guid', $info['guid'] );
153
154 $meta = wp_get_attachment_metadata( $id );
155
156 $meta['width'] = $info['width'];
157 $meta['height'] = $info['height'];
158 $meta['original']['url'] = $info['original'];
159 $meta['videopress'] = $info;
160 $meta['videopress']['url'] = 'https://videopress.com/v/' . $info['guid'];
161
162 // Update file statuses
163 if ( ! empty( $format ) ) {
164 $meta['file_statuses'][ $format ] = $status;
165 }
166
167 if ( ! get_post_meta( $id, '_thumbnail_id', true ) ) {
168 // Update the poster in the VideoPress info.
169 $thumbnail_id = videopress_download_poster_image( $info['poster'], $id );
170
171 if ( is_int( $thumbnail_id ) ) {
172 update_post_meta( $id, '_thumbnail_id', $thumbnail_id );
173 }
174 }
175
176 wp_update_attachment_metadata( $id, $meta );
177
178 videopress_update_meta_data( $id );
179
180 // update the meta to tell us that we're processing or complete
181 update_post_meta( $id, 'videopress_status', videopress_is_finished_processing( $id ) ? 'complete' : 'processing' );
182
183 return true;
184 }
185
186 /**
187 * Update poster image for a VideoPress media item.
188 *
189 * @param array $request The media item to update.
190 * @return bool
191 */
192 public function update_poster_image( $request ) {
193 $this->authenticate_user();
194
195 $post_id = $request['post_id'];
196 $poster = $request['poster'];
197
198 $attachment = get_post( $post_id );
199 if ( ! $attachment ) {
200 return false;
201 }
202
203 $poster = apply_filters( 'jetpack_photon_url', $poster );
204
205 $meta = wp_get_attachment_metadata( $post_id );
206 $meta['videopress']['poster'] = $poster;
207 wp_update_attachment_metadata( $post_id, $meta );
208
209 // Update the poster in the VideoPress info.
210 $thumbnail_id = videopress_download_poster_image( $poster, $post_id );
211
212 if ( ! is_int( $thumbnail_id ) ) {
213 return false;
214 }
215
216 update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
217
218 return true;
219 }
220
221 /**
222 * Check if the XML-RPC request is signed by a user token, and authenticate the user in WordPress.
223 *
224 * @return bool
225 */
226 private function authenticate_user() {
227 if ( $this->current_user ) {
228 wp_set_current_user( $this->current_user->ID );
229
230 return true;
231 }
232
233 return false;
234 }
235 }
236