Helper
Class Helper
Source
File: includes/libs/helper.class.php
class Helper{ /** * Return the access token for the Vimeo API. * * @return bool|string The access token or bool false if no token is set */ public static function get_access_token(){ $options = Plugin::instance()->get_options(); $token = false; if( !empty( $options['oauth_secret'] ) ){ $token = $options['oauth_secret']; }elseif( !empty( $options['oauth_token'] ) ){ $token = $options['oauth_token']; } /** * Filter on Vimeo access token. * Allows setup of a different access token by code. * * @param string $token The Vimeo API token */ return apply_filters( 'vimeotheque\vimeo_api\access_token', $token ); } /** * Returns the user agent for remote requests. * Will return a WordPress user agent for the remote requests made by the plugin. * * @return string */ public static function request_user_agent(){ return 'WordPress/' . get_bloginfo( 'version' ) . '; ' . get_bloginfo( 'url' ); } /** * Get the \Vimeotheque\Video_Post object of a post. * Returns the video post object \Vimeotheque\Video_Post for the current post in the loop or the post passed to the function. * * @param bool|int|\WP_Post $post The WordPress post that will be processed into a Video_Post object. * * @return Video_Post */ public static function get_video_post( $post = false ){ if( $post instanceof Video_Post ){ return $post; } return new Video_Post( $post ); } /** * Get the video embed size for the current post. * Returns an array with keys "height" and "width" for the current video post. * * @param bool|int|\WP_Post $post The WordPress post that should be processed. * * @return array|bool An array with structure ['width' => (int), 'height' => (int)] or false if the post was not imported by Vimeotheque. */ public static function get_post_player_size( $post ){ $_post = self::get_video_post( $post ); if( $_post->is_video() ){ $options = $_post->get_embed_options(); $height = self::calculate_player_height( $options['aspect_ratio'], $options['width'] ); return [ 'width' => $options['width'], 'height' => $height ]; } return false; } /** * Output video parameters as data-* attributes. * Returns a string of data attributes that can be used on HTML elements to output the embedding options that will * be used by the embedding script to display the video. * * @param array $attributes The attributes array. * @param bool $echo Output the result (true). * * @return string The resulting attributes string. */ public static function data_attributes( $attributes, $echo = false ){ $result = []; // these variables are not needed by js and will be skipped $exclude = [ 'video_position', 'aspect_override' ]; // loop attributes foreach( $attributes as $key=>$value ){ // skip values from $exclude if( in_array( $key, $exclude ) ){ continue; } $result[] = sprintf( 'data-%s="%s"', $key, $value ); } if( $echo ){ echo implode(' ', $result); }else{ return implode(' ', $result); } } /** * Add video player script to page. * Enqueue the Vimeotheque player script and styling into the page. * * @param bool $include_js Enqueue the player JavaScript (true) or skip it (false). * @param bool|string $js_dependency Add additional JavaScript handle that depends on the player script. * @param bool|string $css_dependency Add additional styles handle that depend on the player style. * * @return array */ public static function enqueue_player( $include_js = true, $js_dependency = false, $css_dependency = false ){ $handles = [ 'js' => false, 'css' => 'cvm-video-player' ]; if( $include_js ) { wp_register_script( 'vimeo-video-player-sdk', 'https://player.vimeo.com/api/player.js', false, '2.11' ); $js_dependency = $js_dependency ? ['jquery', 'vimeo-video-player-sdk', $js_dependency] : ['jquery', 'vimeo-video-player-sdk']; wp_enqueue_script( 'cvm-video-player', VIMEOTHEQUE_URL . 'assets/back-end/js/apps/player/app.build.js', $js_dependency, '1.0' ); $handles['js'] = 'cvm-video-player'; } $css_dependency = $css_dependency ? [ $css_dependency ] : false; wp_enqueue_style( 'cvm-video-player', VIMEOTHEQUE_URL . 'assets/front-end/css/video-player.css', $css_dependency ); return $handles; } /** * Calculate player height from given aspect ratio and width. * * @param string $aspect_ratio The aspect ratio used for the calculations. * @param int $width The video embed width. * @param bool|float $ratio A given ratio that will override aspect ratio if set. * * @return float The player height. */ public static function calculate_player_height( $aspect_ratio, $width, $ratio = false ){ $width = absint($width); $override = Plugin::instance()->get_embed_options_obj() ->get_option('aspect_override'); if( !is_wp_error( $override ) && $override && is_numeric( $ratio ) && $ratio > 0 ){ $height = floor( $width / $ratio ); }else{ switch( $aspect_ratio ){ case '4x3': $height = floor( ($width * 3) / 4 ); break; case '16x9': default: $height = floor( ($width * 9) / 16 ); break; case '2.35x1': $height = floor( $width / 2.35 ); break; } } return $height; } /** * Calculates player width based on the player height. * * @param string $aspect_ratio The aspect ratio used for the calculations. * @param int $height The player height. * @param bool|float $ratio A given ratio that will override aspect ratio if set. * * @return float The player width. */ public static function calculate_player_width( $aspect_ratio, $height, $ratio = false ){ $height = absint( $height ); $override = Plugin::instance()->get_embed_options_obj() ->get_option('aspect_override'); if( !is_wp_error( $override ) && $override && is_numeric( $ratio ) && $ratio > 0 ){ $width = floor( $height * $ratio ); }else{ switch( $aspect_ratio ){ case '4x3': $width = floor( ($height * 4) / 3 ); break; case '16x9': default: $width = floor( ($height * 16) / 9 ); break; case '2.35x1': $width = floor( $height * 2.35 ); break; } } return $width; } /** * Get the global embedding options. * Will return the options set in Vimeotheque Settings page. * * @param array $_options Array of options that will override the options set by the user. * * @return array The array of options. */ public static function get_embed_options( array $_options = [] ){ $embed_options = Plugin::instance()->get_embed_options(); if( $_options ){ foreach( $_options as $k => $v ){ if( isset( $_options[ $k ] ) ){ $embed_options[ $k ] = $_options[ $k ]; } } } return $embed_options; } /** * Create a HH:MM:SS from a timestamp. * Given a number of seconds, the function returns a readable duration formatted as HH:MM:SS * * @param int $seconds Number of seconds. * @return string The formatted time. */ public static function human_time( $seconds ){ $seconds = absint( $seconds ); if( $seconds < 0 ){ return; } $h = floor( $seconds / 3600 ); $m = floor( $seconds % 3600 / 60 ); $s = floor( $seconds %3600 % 60 ); return ( ($h > 0 ? $h . ":" : "") . ( ($m < 10 ? "0" : "") . $m . ":" ) . ($s < 10 ? "0" : "") . $s); } /** * Get a variable from POST or GET. * * @param string $name The variable name. * @param bool|string $type The variable type (POST, GET). * @param bool|string $sanitize A function name that will be sued for sanitization. * * @return bool|mixed The variable value. */ public static function get_var( $name, $type = false, $sanitize = false ) { $result = false; switch( $type ){ case 'POST': $result = isset( $_POST[ $name ] ) ? $_POST[ $name ] : false; break; case 'GET': $result = isset( $_GET[ $name ] ) ? $_GET[ $name ] : false; break; default: if( isset( $_GET[ $name ] ) ){ $result = $_GET[ $name ]; }elseif ( isset( $_POST[ $name ] ) ){ $result = $_POST[ $name ]; } break; } if( $sanitize ){ $result = call_user_func( $sanitize, $result ); } return $result; } /** * Embed the video attached to a video post. * * @param \WP_Post $post The WordPress post that has the video attached to it. * @param array $options Any options passed manually or from block editor parameters. * @param bool $echo Output the result (true) or not (false). * * @return string|void The HTML for the embed. */ public static function embed_video( $post, $options = [], $echo = true ){ $_post = self::get_video_post( $post ); if( !$_post->is_video() ){ return; } $player = new Player\Player( $_post, $options ); return $player->get_output( $echo ); } /** * Check if embedding is allowed. * Used to check if autoembedding in post content is prevented by using the available filters. * * @return bool Embed is allowed (true) or is prevented (false). */ public static function is_autoembed_allowed(){ $allowed = true; if( !is_admin() ){ /** * Filter that can prevent video embedding into the post content. * Preventing the video embedding into the post content is useful when using custom theme templates for the video posts. * * @param bool $allow Allow automatic embedding into the post content (true) or prevent it (false). */ $allowed = apply_filters( 'vimeotheque\post_content_embed', true );; } return $allowed; } /** * Checks if video embed is visible. * Determines if a video attached to current global post can be displayed into the page. * Will always return false for pages and attachments unless "display in archives" option is enabled. * * @return bool Video is visible (true) or is hidden (false); */ public static function video_is_visible(){ $options = Plugin::instance()->get_options(); $is_visible = $options[ 'archives' ] ? true : is_single(); if( is_admin() || ! $is_visible || !self::get_video_post()->is_video() ){ return false; } return true; } /** * Query Vimeo for a single video. * Given a video ID from Vimeo, will return the video details from the Vimeo API. * * @param string $video_id The Vimeo video ID. * * @return array|\WP_Error The video details. */ public static function query_video( $video_id ){ $vimeo = new Video_Import( 'video', $video_id ); $result = $vimeo->get_feed(); if( !$result ){ $error = $vimeo->get_errors(); if( is_wp_error( $error ) ){ return $error; } } return $result; } /** * Debug method that sets an action to allow third party scripts to hook to it. * * @param string $message The debug message. * @param string $separator The separator that should be used after the message. * @param mixed $data Additional data that will be passed on. * * @return void */ public static function debug_message( $message, $separator = "\n", $data = false ){ /** * Fires a debug message action. * * @param string $message The message to send to debugger. * @param string $separator A separator to be used. * @param mixed $data Any type of data that can be passed. */ do_action( 'vimeotheque\debug', $message, $separator, $data ); } /** * Retrieves default metadata value for the specified meta key and object. * * By default, an empty string is returned if `$single` is true, or an empty array * if it's false. * * * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user', * or any other object type with an associated meta table. * @param int $object_id ID of the object metadata is for. * @param string $meta_key Metadata key. * @param bool $single Optional. If true, return only the first value of the specified meta_key. * This parameter has no effect if meta_key is not specified. Default false. * @return mixed Single metadata value, or array of values. */ public static function get_metadata_default( $meta_type, $object_id, $meta_key, $single = true ){ if( function_exists( 'get_metadata_default' ) ){ return \get_metadata_default( $meta_type, $object_id, $meta_key, $single ); }elseif( $single ) { return ''; }else{ return []; } } /** * Check if a WP_Error object is a Vimeo API error. * Determines if an object of WP_Error type is an error returned by a Vimeo API query. * * @param \WP_Error $wp_error The error object. * * @return bool True is the error was returned by the Vimeo API or false if it's a generic WP error. */ public static function is_vimeo_api_error( $wp_error ){ if( !is_wp_error( $wp_error ) ){ return false; } $error_data = $wp_error->get_error_data(); /** * Key 'vimeo_api_error' is set in \Vimeotheque\Vimeo_Api\Vimeo::api_error() * @see \Vimeotheque\Vimeo_Api\Vimeo::api_error() * @since 2.0 */ return ( isset( $error_data['vimeo_api_error'] ) && $error_data['vimeo_api_error'] ); } /** * Create the embed code based on given parameters * * @param string $video_id The Vimeo video ID. * @param array $args An array of arguments used when embedding. * @param bool $echo Output the embed code (true) or not (false). * * @return string */ public static function embed_by_video_id( $video_id, $args = [], $echo = true ){ $default = [ 'title' => 1, 'byline' => 1, 'portrait' => 1, 'dnt' => 1 ]; $args = wp_parse_args( $args, $default ); $embed = sprintf( '<iframe src="%s" width="100%%" height="100%%" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>', sprintf( 'https://player.vimeo.com/video/%s?%s', urlencode( $video_id ), http_build_query( $args ) ) ); if( $echo ){ echo $embed; } return $embed; } /** * Plugin version. * * Returns the plugin version. * * @return string */ public static function get_plugin_version(){ return VIMEOTHEQUE_VERSION; } /** * Plugin path. * * Get the plugin absolute path. * * @return string */ public static function get_path(){ return VIMEOTHEQUE_PATH; } /** * Plugin URL. * * Get the plugin URL path. * * @return string */ public static function get_url(){ return VIMEOTHEQUE_URL; } /** * Check single video post. * * Check if the current page is a single video post (post type "vimeo-video"). * * @return bool */ public static function is_video(){ return is_singular( Plugin::instance()->get_cpt()->get_post_type() ); } /** * Check if AJAX * * Check if an AJAX or REST request has been made. * * @return bool */ public static function is_ajax(){ $ajax = defined('DOING_AJAX') && DOING_AJAX; $rest = defined('REST_REQUEST') && REST_REQUEST; return $ajax || $rest; } }
Methods
- calculate_player_height — Calculate player height from given aspect ratio and width.
- calculate_player_width — Calculates player width based on the player height.
- data_attributes — Output video parameters as data-* attributes.
- debug_message — Debug method that sets an action to allow third party scripts to hook to it.
- embed_by_video_id — Create the embed code based on given parameters
- embed_video — Embed the video attached to a video post.
- enqueue_player — Add video player script to page.
- get_access_token — Return the access token for the Vimeo API.
- get_embed_options — Get the global embedding options.
- get_metadata_default — Retrieves default metadata value for the specified meta key and object.
- get_path — Plugin path.
- get_plugin_version — Plugin version.
- get_post_player_size — Get the video embed size for the current post.
- get_url — Plugin URL.
- get_var — Get a variable from POST or GET.
- get_video_post — Get the \Vimeotheque\Video_Post object of a post.
- human_time — Create a HH:MM:SS from a timestamp.
- is_ajax — Check if AJAX
- is_autoembed_allowed — Check if embedding is allowed.
- is_video — Check single video post.
- is_vimeo_api_error — Check if a WP_Error object is a Vimeo API error.
- query_video — Query Vimeo for a single video.
- request_user_agent — Returns the user agent for remote requests.
- video_is_visible — Checks if video embed is visible.