2022-06-16 14:01:47 +02:00
< ? php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2019-11-15 23:26:29 +01:00
use Automattic\Jetpack\Assets ;
2022-12-15 17:41:53 +01:00
use Automattic\Jetpack\VideoPress\Attachment_Handler ;
use Automattic\Jetpack\VideoPress\Jwt_Token_Bridge ;
use Automattic\Jetpack\VideoPress\Options as VideoPress_Options ;
2019-11-15 23:26:29 +01:00
/**
* VideoPress in Jetpack
*/
class Jetpack_VideoPress {
2022-06-16 14:01:47 +02:00
/**
* Module name .
*
* @ var string
*/
2019-11-15 23:26:29 +01:00
public $module = 'videopress' ;
/**
* 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 () {
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_action ( 'admin_print_footer_scripts' , array ( $this , 'print_in_footer_open_media_add_new' ) );
add_action ( 'admin_head' , array ( $this , 'enqueue_admin_styles' ) );
VideoPress_Scheduler :: init ();
2022-04-02 10:26:41 +02:00
if ( $this -> is_videopress_enabled () ) {
add_action ( 'admin_notices' , array ( $this , 'media_new_page_admin_notice' ) );
}
}
2022-06-16 14:01:47 +02:00
/**
* Enqueues the jwt bridge script .
2022-12-15 17:41:53 +01:00
*
* @ deprecated 11.3
2022-06-16 14:01:47 +02:00
*/
public function enqueue_jwt_token_bridge () {
2022-12-15 17:41:53 +01:00
_deprecated_function ( __METHOD__ , 'jetpack-11.3' , 'Automattic\Jetpack\VideoPress\Jwt_Token_Bridge::enqueue_jwt_token_bridge' );
return Jwt_Token_Bridge :: enqueue_jwt_token_bridge ();
2022-06-16 14:01:47 +02:00
}
2022-04-02 10:26:41 +02:00
/**
* The media - new . php page isn ' t supported for uploading to VideoPress .
*
* There is either a technical reason for this ( bulk uploader isn ' t overridable ),
* or it is an intentional way to give site owners an option for uploading videos that bypass VideoPress .
*/
public function media_new_page_admin_notice () {
global $pagenow ;
if ( 'media-new.php' === $pagenow ) {
echo '<div class="notice notice-warning is-dismissible">' .
'<p>' .
wp_kses (
sprintf (
/* translators: %s is the url to the Media Library */
__ ( 'VideoPress uploads are not supported here. To upload to VideoPress, add your videos from the <a href="%s">Media Library</a> or the block editor using the Video block.' , 'jetpack' ),
esc_url ( admin_url ( 'upload.php' ) )
),
array (
'a' => array ( 'href' => array () ),
)
) .
'</p>' .
'</div>' ;
}
2019-11-15 23:26:29 +01:00
}
/**
* Runs when the VideoPress module is deactivated .
*/
public function jetpack_module_deactivated () {
VideoPress_Options :: delete_options ();
}
/**
2022-06-16 14:01:47 +02:00
* Similar to current_user_can , but internal to VideoPress .
2019-11-15 23:26:29 +01:00
*
2022-06-16 14:01:47 +02:00
* @ param string $cap Capability name .
* @ param int $user_id User ID .
* @ return bool Returns true if the given VideoPress capability is allowed by the given user .
2019-11-15 23:26:29 +01:00
*/
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 ( Jetpack :: connection () -> is_connection_owner ( $user_id ) ) {
return true ;
}
// Additional and internal caps checks
if ( ! user_can ( $user_id , 'upload_files' ) ) {
return false ;
}
2022-06-16 14:01:47 +02:00
if ( 'edit_videos' === $cap && ! user_can ( $user_id , 'edit_others_posts' ) ) {
2019-11-15 23:26:29 +01:00
return false ;
}
2022-06-16 14:01:47 +02:00
if ( 'delete_videos' === $cap && ! user_can ( $user_id , 'delete_others_posts' ) ) {
2019-11-15 23:26:29 +01:00
return false ;
}
return true ;
}
/**
2022-04-02 10:26:41 +02:00
* Register and enqueue VideoPress admin styles .
*/
public function enqueue_admin_styles () {
2022-12-15 17:41:53 +01:00
wp_register_style ( 'videopress-admin' , plugins_url ( 'videopress-admin.css' , __FILE__ ), array (), JETPACK__VERSION );
2022-04-02 10:26:41 +02:00
wp_enqueue_style ( 'videopress-admin' );
}
/**
* Attempts to delete a VideoPress video from wp . com .
* Will block the deletion from continuing if certain errors return from the wp . com API .
2019-11-15 23:26:29 +01:00
*
2022-04-02 10:26:41 +02:00
* @ param Boolean $delete if the deletion should occur or not ( unused ) .
* @ param WP_Post $post the post object .
2019-11-15 23:26:29 +01:00
*
2022-12-15 17:41:53 +01:00
* @ deprecated 11.3
*
2022-04-02 10:26:41 +02:00
* @ return null | WP_Error | Boolean null if deletion should continue .
2019-11-15 23:26:29 +01:00
*/
2022-04-02 10:26:41 +02:00
public function delete_video_wpcom ( $delete , $post ) {
2022-12-15 17:41:53 +01:00
_deprecated_function ( __METHOD__ , 'jetpack-11.3' , 'Automattic\Jetpack\VideoPress\Attachment_Handler::delete_video_wpcom' );
return Attachment_Handler :: delete_video_wpcom ( $delete , $post );
2019-11-15 23:26:29 +01:00
}
/**
* 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' ,
Assets :: get_file_url_for_environment (
'_inc/build/videopress/js/videopress-plupload.min.js' ,
'modules/videopress/js/videopress-plupload.js'
),
array (
'jquery' ,
'wp-plupload' ,
),
2022-12-15 17:41:53 +01:00
JETPACK__VERSION ,
2022-06-16 14:01:47 +02:00
true
2019-11-15 23:26:29 +01:00
);
wp_enqueue_script (
'videopress-uploader' ,
Assets :: get_file_url_for_environment (
'_inc/build/videopress/js/videopress-uploader.min.js' ,
'modules/videopress/js/videopress-uploader.js'
),
array (
'videopress-plupload' ,
),
2022-12-15 17:41:53 +01:00
JETPACK__VERSION ,
2022-06-16 14:01:47 +02:00
true
2019-11-15 23:26:29 +01:00
);
wp_enqueue_script (
'media-video-widget-extensions' ,
Assets :: get_file_url_for_environment (
'_inc/build/videopress/js/media-video-widget-extensions.min.js' ,
'modules/videopress/js/media-video-widget-extensions.js'
),
array (),
2022-12-15 17:41:53 +01:00
JETPACK__VERSION ,
2019-11-15 23:26:29 +01:00
true
);
}
/**
* Fires after VideoPress scripts are enqueued in the dashboard .
*
* @ since 2.5 . 0
*/
do_action ( 'videopress_enqueue_admin_scripts' );
}
/**
2022-04-02 10:26:41 +02:00
* Returns the VideoPress URL for the give post id , otherwise returns the provided default .
2019-11-15 23:26:29 +01:00
*
2022-04-02 10:26:41 +02:00
* This is an attachment - based filter handler .
2019-11-15 23:26:29 +01:00
*
2022-12-15 17:41:53 +01:00
* @ deprecated 11.3
*
2022-04-02 10:26:41 +02:00
* @ param string $default The default return value if post id is not a VideoPress video .
* @ param int $post_id The post id for the current attachment .
2019-11-15 23:26:29 +01:00
*/
2022-04-02 10:26:41 +02:00
public function maybe_get_attached_url_for_videopress ( $default , $post_id ) {
2022-12-15 17:41:53 +01:00
_deprecated_function ( __METHOD__ , 'jetpack-11.3' , 'Automattic\Jetpack\VideoPress\Attachment_Handler::maybe_get_attached_url_for_videopress' );
return Attachment_Handler :: maybe_get_attached_url_for_videopress ( $default , $post_id );
2019-11-15 23:26:29 +01:00
}
/**
2022-06-16 14:01:47 +02:00
* Modify the default plupload config to turn on VideoPress specific filters .
*
* @ param array $config The plupload config .
2019-11-15 23:26:29 +01:00
*/
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.
2022-06-16 14:01:47 +02:00
if ( ! in_array ( $pagenow , $acceptable_pages , true ) ) {
2019-11-15 23:26:29 +01:00
return false ;
}
2022-04-02 10:26:41 +02:00
return $this -> is_videopress_enabled ();
}
/**
* Detects if VideoPress is enabled .
*
* @ return bool
*/
protected function is_videopress_enabled () {
2019-11-15 23:26:29 +01:00
$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 ;
}
2022-06-16 14:01:47 +02:00
if ( ! isset ( $_GET [ 'action' ] ) || $_GET [ 'action' ] !== 'add-new' ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
2019-11-15 23:26:29 +01:00
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 .
*
2022-12-15 17:41:53 +01:00
* @ deprecated 11.3
*
2022-06-16 14:01:47 +02:00
* @ param array $existing_mimes Mime types to extend / filter .
2019-11-15 23:26:29 +01:00
* @ return array
*/
public function add_video_upload_mimes ( $existing_mimes = array () ) {
2022-12-15 17:41:53 +01:00
_deprecated_function ( __METHOD__ , 'jetpack-11.3' , 'Automattic\Jetpack\VideoPress\Attachment_Handler::add_video_upload_mimes' );
return Attachment_Handler :: add_video_upload_mimes ( $existing_mimes );
2019-11-15 23:26:29 +01:00
}
/**
* Filter designed to get rid of non video mime types .
*
2022-12-15 17:41:53 +01:00
* @ deprecated 11.3
*
2022-06-16 14:01:47 +02:00
* @ param string $value Mime type to filter .
2019-11-15 23:26:29 +01:00
* @ return int
*/
public function filter_video_mimes ( $value ) {
2022-12-15 17:41:53 +01:00
_deprecated_function ( __METHOD__ , 'jetpack-11.3' , 'Automattic\Jetpack\VideoPress\Attachment_Handler::filter_video_mimes' );
return Attachment_Handler :: filter_video_mimes ( $value );
2019-11-15 23:26:29 +01:00
}
/**
2022-06-16 14:01:47 +02:00
* Filter the mime type icon .
*
* @ param string $icon Icon path .
* @ param string $mime Mime type .
* @ param int $post_id Post ID .
2019-11-15 23:26:29 +01:00
*
2022-12-15 17:41:53 +01:00
* @ deprecated 11.3
*
2019-11-15 23:26:29 +01:00
* @ return string
*/
public function wp_mime_type_icon ( $icon , $mime , $post_id ) {
2022-12-15 17:41:53 +01:00
_deprecated_function ( __METHOD__ , 'jetpack-11.3' , 'Automattic\Jetpack\VideoPress\Attachment_Handler::wp_mime_type_icon' );
return Attachment_Handler :: wp_mime_type_icon ( $icon , $mime , $post_id );
2019-11-15 23:26:29 +01:00
}
/**
2022-06-16 14:01:47 +02:00
* Filter the list of supported video formats .
*
* @ param array $extensions Supported video formats .
2019-11-15 23:26:29 +01:00
*
2022-12-15 17:41:53 +01:00
* @ deprecated 11.3
*
2019-11-15 23:26:29 +01:00
* @ return array
*/
public function add_videopress_extenstion ( $extensions ) {
2022-12-15 17:41:53 +01:00
_deprecated_function ( __METHOD__ , 'jetpack-11.3' , 'Automattic\Jetpack\VideoPress\Attachment_Handler::add_videopress_extenstion' );
return Attachment_Handler :: add_videopress_extenstion ( $extensions );
2019-11-15 23:26:29 +01:00
}
}
// Initialize the module.
Jetpack_VideoPress :: init ();