summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/modules/videopress/class.jetpack-videopress.php')
-rw-r--r--plugins/jetpack/modules/videopress/class.jetpack-videopress.php340
1 files changed, 340 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/videopress/class.jetpack-videopress.php b/plugins/jetpack/modules/videopress/class.jetpack-videopress.php
new file mode 100644
index 00000000..a1073f05
--- /dev/null
+++ b/plugins/jetpack/modules/videopress/class.jetpack-videopress.php
@@ -0,0 +1,340 @@
+<?php
+
+/**
+ * VideoPress in Jetpack
+ */
+class Jetpack_VideoPress {
+ /** @var string */
+ public $module = 'videopress';
+
+ /** @var int */
+ public $version = 5;
+
+ /**
+ * Singleton
+ */
+ public static function init() {
+ static $instance = false;
+
+ if ( ! $instance ) {
+ $instance = new Jetpack_VideoPress();
+ }
+
+ return $instance;
+ }
+
+ /**
+ * Jetpack_VideoPress constructor.
+ *
+ * Sets up the initializer and makes sure that videopress activates and deactivates properly.
+ */
+ private function __construct() {
+ // $this->version = time(); // <s>ghost</s> cache busters!
+ add_action( 'init', array( $this, 'on_init' ) );
+ add_action( 'jetpack_deactivate_module_videopress', array( $this, 'jetpack_module_deactivated' ) );
+ }
+
+ /**
+ * Fires on init
+ */
+ public function on_init() {
+ add_action( 'wp_enqueue_media', array( $this, 'enqueue_admin_scripts' ) );
+ add_filter( 'plupload_default_settings', array( $this, 'videopress_pluploder_config' ) );
+ add_filter( 'wp_get_attachment_url', array( $this, 'update_attachment_url_for_videopress' ), 10, 2 );
+
+ if ( Jetpack_Plan::supports( 'videopress' ) ) {
+ add_filter( 'upload_mimes', array( $this, 'add_video_upload_mimes' ), 999 );
+ }
+
+ add_action( 'admin_print_footer_scripts', array( $this, 'print_in_footer_open_media_add_new' ) );
+ add_action( 'admin_head', array( $this, 'enqueue_admin_styles' ) );
+
+ add_filter( 'wp_mime_type_icon', array( $this, 'wp_mime_type_icon' ), 10, 3 );
+
+ add_filter( 'wp_video_extensions', array( $this, 'add_videopress_extenstion' ) );
+
+ VideoPress_Scheduler::init();
+ VideoPress_XMLRPC::init();
+ }
+
+ /**
+ * Runs when the VideoPress module is deactivated.
+ */
+ public function jetpack_module_deactivated() {
+ VideoPress_Options::delete_options();
+ }
+
+ /**
+ * A can of coke
+ *
+ * Similar to current_user_can, but internal to VideoPress. Returns
+ * true if the given VideoPress capability is allowed by the given user.
+ */
+ public function can( $cap, $user_id = false ) {
+ if ( ! $user_id ) {
+ $user_id = get_current_user_id();
+ }
+
+ // Connection owners are allowed to do all the things.
+ if ( $this->is_connection_owner( $user_id ) ) {
+ return true;
+ }
+
+ // Additional and internal caps checks
+ if ( ! user_can( $user_id, 'upload_files' ) ) {
+ return false;
+ }
+
+ if ( 'edit_videos' == $cap && ! user_can( $user_id, 'edit_others_posts' ) ) {
+ return false;
+ }
+
+ if ( 'delete_videos' == $cap && ! user_can( $user_id, 'delete_others_posts' ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns true if the provided user is the Jetpack connection owner.
+ */
+ public function is_connection_owner( $user_id = false ) {
+ if ( ! $user_id ) {
+ $user_id = get_current_user_id();
+ }
+
+ $user_token = Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
+
+ return $user_token && is_object( $user_token ) && isset( $user_token->external_user_id ) && $user_id === $user_token->external_user_id;
+ }
+
+ /**
+ * Register and enqueue VideoPress admin styles.
+ */
+ public function enqueue_admin_styles() {
+ wp_register_style( 'videopress-admin', plugins_url( 'videopress-admin.css', __FILE__ ), array(), $this->version );
+ wp_enqueue_style( 'videopress-admin' );
+ }
+
+ /**
+ * Register VideoPress admin scripts.
+ */
+ public function enqueue_admin_scripts() {
+ if ( did_action( 'videopress_enqueue_admin_scripts' ) ) {
+ return;
+ }
+
+ if ( $this->should_override_media_uploader() ) {
+ wp_enqueue_script(
+ 'videopress-plupload',
+ Jetpack::get_file_url_for_environment(
+ '_inc/build/videopress/js/videopress-plupload.min.js',
+ 'modules/videopress/js/videopress-plupload.js'
+ ),
+ array(
+ 'jquery',
+ 'wp-plupload',
+ ),
+ $this->version
+ );
+
+ wp_enqueue_script(
+ 'videopress-uploader',
+ Jetpack::get_file_url_for_environment(
+ '_inc/build/videopress/js/videopress-uploader.min.js',
+ 'modules/videopress/js/videopress-uploader.js'
+ ),
+ array(
+ 'videopress-plupload',
+ ),
+ $this->version
+ );
+
+ wp_enqueue_script(
+ 'media-video-widget-extensions',
+ Jetpack::get_file_url_for_environment(
+ '_inc/build/videopress/js/media-video-widget-extensions.min.js',
+ 'modules/videopress/js/media-video-widget-extensions.js'
+ ),
+ array(),
+ $this->version,
+ true
+ );
+ }
+
+ /**
+ * Fires after VideoPress scripts are enqueued in the dashboard.
+ *
+ * @since 2.5.0
+ */
+ do_action( 'videopress_enqueue_admin_scripts' );
+ }
+
+ /**
+ * An override for the attachment url, which returns back the WPCOM VideoPress processed url.
+ *
+ * This is an action proxy to the videopress_get_attachment_url() utility function.
+ *
+ * @param string $url
+ * @param int $post_id
+ *
+ * @return string
+ */
+ public function update_attachment_url_for_videopress( $url, $post_id ) {
+ if ( $videopress_url = videopress_get_attachment_url( $post_id ) ) {
+ return $videopress_url;
+ }
+
+ return $url;
+ }
+
+ /**
+ * Modify the default plupload config to turn on videopress specific filters.
+ */
+ public function videopress_pluploder_config( $config ) {
+
+ if ( ! isset( $config['filters']['max_file_size'] ) ) {
+ $config['filters']['max_file_size'] = wp_max_upload_size() . 'b';
+ }
+
+ $config['filters']['videopress_check_uploads'] = $config['filters']['max_file_size'];
+
+ // We're doing our own check in the videopress_check_uploads filter.
+ unset( $config['filters']['max_file_size'] );
+
+ return $config;
+ }
+
+
+ /**
+ * Helper function to determine if the media uploader should be overridden.
+ *
+ * The rules are simple, only try to load the script when on the edit post or new post pages.
+ *
+ * @return bool
+ */
+ protected function should_override_media_uploader() {
+ global $pagenow;
+
+ // Only load in the admin
+ if ( ! is_admin() ) {
+ return false;
+ }
+
+ $acceptable_pages = array(
+ 'post-new.php',
+ 'post.php',
+ 'upload.php',
+ 'customize.php',
+ );
+
+ // Only load on the post, new post, or upload pages.
+ if ( ! in_array( $pagenow, $acceptable_pages ) ) {
+ return false;
+ }
+
+ $options = VideoPress_Options::get_options();
+
+ return $options['shadow_blog_id'] > 0;
+ }
+
+ /**
+ * A work-around / hack to make it possible to go to the media library with the add new box open.
+ *
+ * @return bool
+ */
+ public function print_in_footer_open_media_add_new() {
+ global $pagenow;
+
+ // Only load in the admin
+ if ( ! is_admin() ) {
+ return false;
+ }
+
+ if ( $pagenow !== 'upload.php' ) {
+ return false;
+ }
+
+ if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'add-new' ) {
+ return false;
+ }
+
+ ?>
+ <script type="text/javascript">
+ ( function( $ ) {
+ window.setTimeout( function() {
+ $('#wp-media-grid .page-title-action').click();
+ }, 500 );
+
+ }( jQuery ) );
+ </script>
+ <?php
+ }
+
+ /**
+ * Makes sure that all video mimes are added in, as multi site installs can remove them.
+ *
+ * @param array $existing_mimes
+ * @return array
+ */
+ public function add_video_upload_mimes( $existing_mimes = array() ) {
+ $mime_types = wp_get_mime_types();
+ $video_types = array_filter( $mime_types, array( $this, 'filter_video_mimes' ) );
+
+ foreach ( $video_types as $key => $value ) {
+ $existing_mimes[ $key ] = $value;
+ }
+
+ // Make sure that videopress mimes are considered videos.
+ $existing_mimes['videopress'] = 'video/videopress';
+
+ return $existing_mimes;
+ }
+
+ /**
+ * Filter designed to get rid of non video mime types.
+ *
+ * @param string $value
+ * @return int
+ */
+ public function filter_video_mimes( $value ) {
+ return preg_match( '@^video/@', $value );
+ }
+
+ /**
+ * @param string $icon
+ * @param string $mime
+ * @param int $post_id
+ *
+ * @return string
+ */
+ public function wp_mime_type_icon( $icon, $mime, $post_id ) {
+
+ if ( $mime !== 'video/videopress' ) {
+ return $icon;
+ }
+
+ $status = get_post_meta( $post_id, 'videopress_status', true );
+
+ if ( $status === 'complete' ) {
+ return $icon;
+ }
+
+ return 'https://wordpress.com/wp-content/mu-plugins/videopress/images/media-video-processing-icon.png';
+ }
+
+ /**
+ * @param array $extensions
+ *
+ * @return array
+ */
+ public function add_videopress_extenstion( $extensions ) {
+ $extensions[] = 'videopress';
+
+ return $extensions;
+ }
+}
+
+// Initialize the module.
+Jetpack_VideoPress::init();