'', 'feed' => '', 'channel' => '', 'slug' => '', 'image' => '', 'width' => '', 'height' => '' ), $attributes ) ); if( empty($channel) && !empty($feed) ) // Feed for backward compat. $channel = $feed; if( !empty($slug) ) // Foward compatibility $channel = $slug; if( !$url && $content ) { $content_url = trim($content); if( @parse_url($content_url) ) $url = $content_url; } if( $url ) { $url = powerpress_add_redirect_url($url); $content_type = ''; // Handle the URL differently... do_action('wp_powerpress_player_scripts'); $return = apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($url, 'p'), array('image'=>$image, 'type'=>$content_type,'width'=>$width, 'height'=>$height) ); } else if( $channel ) { $EpisodeData = powerpress_get_enclosure_data($post->ID, $channel); if( !empty($EpisodeData['embed']) ) $return = $EpisodeData['embed']; // Shortcode over-ride settings: if( !empty($image) ) $EpisodeData['image'] = $image; if( !empty($width) ) $EpisodeData['width'] = $width; if( !empty($height) ) $EpisodeData['height'] = $height; if( isset($GeneralSettings['premium_caps']) && $GeneralSettings['premium_caps'] && !powerpress_premium_content_authorized($channel) ) { $return .= powerpress_premium_content_message($post->ID, $channel, $EpisodeData); } else { // If the shortcode specifies a channel, than we definitely want to include the player even if $EpisodeData['no_player'] is true... if( !isset($EpisodeData['no_player']) ) { do_action('wp_powerpress_player_scripts'); $return = apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), array('id'=>$post->ID,'feed'=>$channel, 'channel'=>$channel, 'image'=>$image, 'type'=>$EpisodeData['type'],'width'=>$width, 'height'=>$height) ); } if( empty($EpisodeData['no_links']) ) { do_action('wp_powerpress_player_scripts'); $return .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData ); $return .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData ); } } } else { $GeneralSettings = get_option('powerpress_general'); if( !isset($GeneralSettings['custom_feeds']['podcast']) ) $GeneralSettings['custom_feeds']['podcast'] = 'Podcast Feed'; // Fixes scenario where the user never configured the custom default podcast feed. // If we have post type podcasting enabled, then we need to use the podcast post type feeds instead here... if( !empty($GeneralSettings['posttype_podcasting']) ) { $post_type = get_query_var('post_type'); if ( is_array( $post_type ) ) { $post_type = reset( $post_type ); // get first element in array } // Get the feed slugs and titles for this post type $PostTypeSettingsArray = get_option('powerpress_posttype_'.$post_type); // Loop through this array... if( !empty($PostTypeSettingsArray) ) { switch($post_type) { case 'post': case 'page': { // Do nothing!, we want the default podcast and channels to appear in these post types }; break; default: { $GeneralSettings['custom_feeds'] = array(); // reset this array since we're working with a custom post type }; } foreach( $PostTypeSettingsArray as $feed_slug => $postTypeSettings ) { if( !empty( $postTypeSettings['title']) ) $GeneralSettings['custom_feeds'][ $feed_slug ] = $postTypeSettings['title']; else $GeneralSettings['custom_feeds'][ $feed_slug ] = $feed_slug; } } } foreach( $GeneralSettings['custom_feeds'] as $feed_slug => $feed_title ) { if( isset($GeneralSettings['disable_player']) && isset($GeneralSettings['disable_player'][$feed_slug]) ) continue; $EpisodeData = powerpress_get_enclosure_data($post->ID, $feed_slug); if( !$EpisodeData && !empty($GeneralSettings['process_podpress']) && $feed_slug == 'podcast' ) $EpisodeData = powerpress_get_enclosure_data_podpress($post->ID); if( !$EpisodeData ) continue; if( !empty($EpisodeData['embed']) ) $return .= $EpisodeData['embed']; // Shortcode over-ride settings: if( !empty($image) ) $EpisodeData['image'] = $image; if( !empty($width) ) $EpisodeData['width'] = $width; if( !empty($height) ) $EpisodeData['height'] = $height; if( isset($GeneralSettings['premium_caps']) && $GeneralSettings['premium_caps'] && !powerpress_premium_content_authorized($feed_slug) ) { $return .= powerpress_premium_content_message($post->ID, $feed_slug, $EpisodeData); continue; } if( !isset($EpisodeData['no_player']) ) { do_action('wp_powerpress_player_scripts'); $return .= apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData ); } if( !isset($EpisodeData['no_links']) ) { do_action('wp_powerpress_player_scripts'); $return .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData ); $return .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData ); } } } return $return; } add_shortcode('powerpress', 'powerpress_shortcode_handler'); if( !defined('PODCASTING_VERSION') ) { add_shortcode('podcast', 'powerpress_shortcode_handler'); } function wp_powerpress_player_scripts() { // include what's needed for each plaer if( defined('POWERPRESS_JS_DEBUG') ) wp_enqueue_script( 'powerpress-player', powerpress_get_root_url() .'player.js'); else wp_enqueue_script( 'powerpress-player', powerpress_get_root_url() .'player.min.js'); } add_action( 'wp_powerpress_player_scripts', 'wp_powerpress_player_scripts' ); /* // Everything in $ExtraData except post_id */ function powerpress_generate_embed($player, $EpisodeData) // $post_id, $feed_slug, $width=false, $height=false, $media_url = false, $autoplay = false) { if( empty($EpisodeData['id']) && empty($EpisodeData['feed']) ) return ''; if( $player == 'blubrryaudio' ) { $extension = powerpressplayer_get_extension($EpisodeData['url']); if( $extension == 'mp3' || $extension == 'm4a' ) { return powerpressplayer_build_blubrryaudio($EpisodeData['url'], $EpisodeData); } return ''; } $width = 0; $height = 0; if( !empty($EpisodeData['width']) && is_numeric($EpisodeData['width']) ) $width = $EpisodeData['width']; if( !empty($EpisodeData['height']) && is_numeric($EpisodeData['height']) ) $height = $EpisodeData['height']; // More efficient, only pull the general settings if necessary if( $height == 0 || $width == 0 ) { $GeneralSettings = get_option('powerpress_general'); if( $width == 0 ) { $width = 400; if( !empty($GeneralSettings['player_width']) ) $width = $GeneralSettings['player_width']; } if( $height == 0 ) { $height = 400; if( !empty($GeneralSettings['player_height']) ) $height = $GeneralSettings['player_height']; } $extension = powerpressplayer_get_extension($EpisodeData['url']); if( $player == 'mediaelement-audio' ) { if( $extension == 'mp3' || $extension == 'm4a' || $extension == 'oga') { $height = 30; // Hack for audio to only include the player without the poster art $width = 320; if( !empty($GeneralSettings['player_width_audio']) ) $width = $GeneralSettings['player_width_audio']; } } else if ( $player == 'default' ) { if( ($extension == 'mp3' || $extension == 'm4a' ) && empty($Settings['poster_image_audio']) ) { $height = 24; // Hack for audio to only include the player without the poster art $width = 320; if( !empty($GeneralSettings['player_width_audio']) ) $width = $GeneralSettings['player_width_audio']; } } } $embed = ''; $url = get_bloginfo('url') .'/?powerpress_embed=' . $EpisodeData['id'] .'-'. $EpisodeData['feed']; if( isset($EpisodeData['autoplay']) && $EpisodeData['autoplay'] ) $url .= '&autoplay=true'; $url .= '&powerpress_player='.$player; $embed .= ''. PHP_EOL; $content .= ''. PHP_EOL; echo $content; wp_print_styles(); wp_print_scripts(); $content = ''; $content .= ''. PHP_EOL; $content .= '' . PHP_EOL; $content .= ''. PHP_EOL; $content .= ''. PHP_EOL; // Body specific content for player if( $mejs_audio ) $content .= powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData, true); else if( $mejs_video ) $content .= powerpressplayer_build_mediaelementvideo($media_url, $EpisodeData, true); else $content .= ''. __('Player Not Available', 'powerpress') .''; $content .= ''. PHP_EOL; $content .= ''. PHP_EOL; echo $content; } /* Audio Players - Flash/HTML5 compliant mp3 audio @since 2.0 @content - @param string $content Content of post or page to add player to @param string $media_url Media URL to add player for @param array $EpisodeData Array of key/value settings that optionally can contribute to player being added @return string $content The content, possibly modified wih player added */ function powerpressplayer_player_audio($content, $media_url, $EpisodeData = array() ) { $extension = powerpressplayer_get_extension($media_url); switch( $extension ) { // MP3 case 'mp3': { $Settings = get_option('powerpress_general'); if( !isset($Settings['player']) ) $Settings['player'] = 'mediaelement-audio'; switch( $Settings['player'] ) { case 'blubrryaudio': { $content .= powerpressplayer_build_blubrryaudio($media_url, $EpisodeData); }; break; case 'html5audio': { $content .= powerpressplayer_build_html5audio($media_url, $EpisodeData); }; break; case 'mediaelement-audio': default: { $content .= powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData); }; break; } }; break; case 'm4a': { $Settings = get_option('powerpress_general'); if( !isset($Settings['player']) ) $Settings['player'] = 'mediaelement-audio'; switch( $Settings['player'] ) { case 'blubrryaudio': { $content .= powerpressplayer_build_blubrryaudio($media_url, $EpisodeData); }; break; case 'html5audio': { $content .= powerpressplayer_build_html5audio($media_url, $EpisodeData); }; break; case 'mediaelement-audio': { $content .= powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData); }; break; default: { $content .= powerpressplayer_build_playimageaudio($media_url, true); }; } // Use Flow player if configured }; break; case 'ogg': { if( defined('POWERPRESS_OGG_VIDEO') && POWERPRESS_OGG_VIDEO ) return $content; // Ogg is handled as video } case 'oga': { $Settings = get_option('powerpress_general'); if( !isset($Settings['player']) ) $Settings['player'] = 'mediaelement-audio'; switch( $Settings['player'] ) { case 'mediaelement-audio': { $content .= powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData); }; break; case 'html5audio': default: { $content .= powerpressplayer_build_html5audio($media_url, $EpisodeData); } } }; break; } return $content; } /* Video Players - HTML5/Flash compliant video formats */ function powerpressplayer_player_video($content, $media_url, $EpisodeData = array() ) { $extension = powerpressplayer_get_extension($media_url); switch( $extension ) { // OGG (audio or video) case 'ogg': { // Ogg special case, we treat as audio unless specified otherwise if( !defined('POWERPRESS_OGG_VIDEO') || POWERPRESS_OGG_VIDEO == false ) return $content; } // OGG Video / WebM case 'webm': case 'ogv': { // Use native player when possible $Settings = get_option('powerpress_general'); if( !isset($Settings['video_player']) ) $Settings['video_player'] = 'mediaelement-video'; else if( !isset($Settings['video_player']) ) $Settings['video_player'] = 'html5video'; // HTML5 Video as an embed switch( $Settings['video_player'] ) { case 'videojs-html5-video-player-for-wordpress': { $content .= powerpressplayer_build_videojs($media_url, $EpisodeData); }; break; case 'mediaelement-video': { $content .= powerpressplayer_build_mediaelementvideo($media_url, $EpisodeData); }; break; default: { $content .= powerpressplayer_build_html5video($media_url, $EpisodeData); }; break; } }; break; // H.264 case 'm4v': case 'mp4': // Okay, lets see if we we have a player setup to handle this { $Settings = get_option('powerpress_general'); if( !isset($Settings['video_player']) ) $Settings['video_player'] = 'mediaelement-video'; switch( $Settings['video_player'] ) { case 'videojs-html5-video-player-for-wordpress': { $content .= powerpressplayer_build_videojs($media_url, $EpisodeData); }; break; case 'html5video': { // HTML5 Video as an embed $content .= powerpressplayer_build_html5video($media_url, $EpisodeData); }; break; case 'mediaelement-video': default: { $content .= powerpressplayer_build_mediaelementvideo($media_url, $EpisodeData); }; break; } }; break; } return $content; } function powerpressplayer_player_other($content, $media_url, $EpisodeData = array() ) { // Very important setting, we need to know if the media should auto play or not... $autoplay = false; // (default) if( isset($EpisodeData['autoplay']) && $EpisodeData['autoplay'] ) $autoplay = true; $cover_image = ''; if( !empty($EpisodeData['image']) ) $cover_image = $EpisodeData['image']; $extension = powerpressplayer_get_extension($media_url); switch( $extension ) { // Common formats, we already handle them separately case 'mp3': case 'mp4': case 'm4v': case 'webm'; case 'ogg': case 'ogv': case 'oga': case 'flv': case 'm4a': { return $content; }; break; case 'swf': // No more support for flash swf files case 'avi': case 'mpg': case 'mpeg': case 'm4b': case 'm4r': case 'qt': case 'mov': // Windows Media: case 'wma': case 'wmv': case 'asf': { // No more quicktime on multiple platforms, lets display an image with a link and hope for the best $content .= powerpressplayer_build_playimage($media_url, $EpisodeData, true); }; break; case 'pdf': { $content .= powerpressplayer_build_playimagepdf($media_url, true); }; break; case 'epub': { $content .= powerpressplayer_build_playimageepub($media_url, true); }; break; // Default, just display the play image. default: { $content .= powerpressplayer_build_playimage($media_url, $EpisodeData, true); }; break; } return $content; } function powerpressplayer_mediaobjects_video($content, $media_url, $EpisodeData = array()) { $extension = powerpressplayer_get_extension($media_url); switch( $extension ) { // OGG (audio or video) case 'ogg': { // Ogg special case, we treat as audio unless specified otherwise if( !defined('POWERPRESS_OGG_VIDEO') || POWERPRESS_OGG_VIDEO == false ) { return $content; } } // let fall through and handle as video... case 'mp4': case 'm4v': case 'webm': case 'ogv': { $VideoObject = true; }; break; default: return $content; } return powerpressplayer_mediaobjects('video', $content, $media_url, $EpisodeData); } function powerpressplayer_mediaobjects_audio($content, $media_url, $EpisodeData = array()) { $extension = powerpressplayer_get_extension($media_url); switch( $extension ) { // OGG (audio or video) case 'ogg': { // Ogg special case, we treat as audio unless specified otherwise if( defined('POWERPRESS_OGG_VIDEO') && POWERPRESS_OGG_VIDEO ) { return $content; } } // let fall through and handle as video... case 'mp3': case 'm4a': case 'oga': { $AudioObject = true; }; break; default: return $content; } return powerpressplayer_mediaobjects('audio', $content, $media_url, $EpisodeData); } function powerpressplayer_mediaobjects($type, $content, $media_url, $EpisodeData = array()) { $GLOBALS['g_powerpress_complete_mediaobject'] = true; $addhtml = ''; $addhtml .= '
'.PHP_EOL_WEB; if( !empty($EpisodeData['title']) ) { // We want to use the post title so ignore this for now } $media_url = powerpress_add_flag_to_redirect_url($media_url, 's'); // Search tag //var_dump($EpisodeData); $post_title = get_the_title(); if( !empty($post_title) ) { $addhtml .= ''.PHP_EOL_WEB; } $addhtml .= ''.PHP_EOL_WEB; $addhtml .= ''.PHP_EOL_WEB; if( !empty($EpisodeData['duration']) ) { $addhtml .= ''.PHP_EOL_WEB; // http://en.wikipedia.org/wiki/ISO_8601#Durations } if( !empty($EpisodeData['subtitle']) ) { $addhtml .= ''.PHP_EOL_WEB; } else { // Get the current post object... $post = get_post( ); // Get a subtitle from the post content or excerpt... $subtitle = strip_tags($post->post_excerpt); if( empty($subtitle) ) { $subtitle = $post->post_content; $subtitle = strip_shortcodes( $subtitle ); $subtitle = str_replace(']]>', ']]>', $subtitle); $subtitle = strip_tags($subtitle); $length = (function_exists('mb_strlen')?mb_strlen($subtitle):strlen($subtitle) ); if( $length > 250 ) { $subtitle = (function_exists('mb_substr')?mb_substr($subtitle, 0, 250):substr($subtitle, 0, 250) ). '...'; } } if( empty($subtitle) ) $subtitle = $post_title; $addhtml .= ''.PHP_EOL_WEB; } $addhtml .= ''.PHP_EOL_WEB; // For thumbnail image, use the podcast artwork if( !empty($EpisodeData['image']) ) { $addhtml .= ''.PHP_EOL_WEB; } if( !empty($EpisodeData['size']) ) { $addhtml .= ''.PHP_EOL_WEB; } // if( !empty($EpisodeData['height']) && is_numeric($EpisodeData['height']) ) { $addhtml .= ''.PHP_EOL_WEB; } if( !empty($EpisodeData['width']) && is_numeric($EpisodeData['width']) ) { $addhtml .= ''.PHP_EOL_WEB; } return $content . $addhtml; } function powerpress_iso8601_duration($duration) { $seconds = 0; $parts = explode(':', $duration); if( count($parts) == 3 ) $seconds = $parts[2] + ($parts[1]*60) + ($parts[0]*60*60); else if ( count($parts) == 2 ) $seconds = $parts[1] + ($parts[0]*60); else $seconds = $parts[0]; $hours = 0; $minutes = 0; if( $seconds >= (60*60) ) { $hours = floor( $seconds /(60*60) ); $seconds -= (60*60*$hours); } if( $seconds >= (60) ) { $minutes = floor( $seconds /(60) ); $seconds -= (60*$minutes); } if( $hours ) // X:XX:XX (readable) return sprintf('PT%dH%02dM%02dS', $hours, $minutes, $seconds); return sprintf('PT%dM%02dS', $minutes, $seconds); // X:XX or 0:XX (readable) } function powerpressplayer_mediaobjects_post($content, $media_url, $EpisodeData = array()) { if( !empty($GLOBALS['g_powerpress_complete_mediaobject']) ) { $content .= '
'; unset($GLOBALS['g_powerpress_complete_mediaobject']); } return $content; } add_filter('powerpress_player', 'powerpressplayer_player_audio', 10, 3); // Audio players (mp3) add_filter('powerpress_player', 'powerpressplayer_player_video', 10, 3); // Video players (mp4/m4v, webm, ogv) add_filter('powerpress_player', 'powerpressplayer_player_other', 10, 3); // Audio/Video flv, wmv, wma, oga, m4a and other non-standard media files /* Filters for media links, appear below the selected player */ function powerpressplayer_link_download($content, $media_url, $ExtraData = array() ) { $media_url = powerpress_add_flag_to_redirect_url($media_url,'s'); $GeneralSettings = get_option('powerpress_general'); if( !isset($GeneralSettings['podcast_link']) ) $GeneralSettings['podcast_link'] = 1; $player_links = ''; if( $GeneralSettings['podcast_link'] == 1 ) { $player_links .= "". POWERPRESS_DOWNLOAD_TEXT ."".PHP_EOL_WEB; } else if( $GeneralSettings['podcast_link'] == 2 ) { $player_links .= "". POWERPRESS_DOWNLOAD_TEXT ." (".powerpress_byte_size($ExtraData['size']).") ".PHP_EOL_WEB; } else if( $GeneralSettings['podcast_link'] == 3 ) { if( !empty($ExtraData['duration']) && ltrim($ExtraData['duration'], '0:') != '' ) $player_links .= "". POWERPRESS_DOWNLOAD_TEXT ." (". htmlspecialchars(POWERPRESS_DURATION_TEXT) .": " . powerpress_readable_duration($ExtraData['duration']) ." — ".powerpress_byte_size($ExtraData['size']).")".PHP_EOL_WEB; else $player_links .= "". POWERPRESS_DOWNLOAD_TEXT ." (".powerpress_byte_size($ExtraData['size']).")".PHP_EOL_WEB; } if( $player_links && !empty($content) ) $content .= ' '.POWERPRESS_LINK_SEPARATOR .' '; return $content . $player_links; } function powerpressplayer_link_pinw($content, $media_url, $ExtraData = array() ) { $GeneralSettings = get_option('powerpress_general'); if( !isset($GeneralSettings['player_function']) ) $GeneralSettings['player_function'] = 1; $is_pdf = (strtolower( substr($media_url, -3) ) == 'pdf' ); $player_links = ''; switch( $GeneralSettings['player_function'] ) { case 1: // Play on page and new window case 3: // Play in new window only case 5: { // Play in page and new window if( $is_pdf ) $player_links .= "". __('Open in New Window', 'powerpress') ."".PHP_EOL_WEB; else if( !empty($ExtraData['id']) && !empty($ExtraData['feed']) ) { $pinw_url = get_bloginfo('url') ."/?powerpress_pinw={$ExtraData['id']}-{$ExtraData['feed']}"; $player_links .= "". POWERPRESS_PLAY_IN_NEW_WINDOW_TEXT ."".PHP_EOL_WEB; } else $player_links .= "". POWERPRESS_PLAY_IN_NEW_WINDOW_TEXT ."".PHP_EOL_WEB; }; break; }//end switch if( $player_links && !empty($content) ) $content .= ' '.POWERPRESS_LINK_SEPARATOR .' '; return $content . $player_links; } function powerpressplayer_embedable($media_url, $ExtraData = array()) { if( empty($ExtraData['id']) || empty($ExtraData['feed']) ) return false; $extension = powerpressplayer_get_extension($media_url); $player = false; if( preg_match('/(mp3|m4a|oga|mp4|m4v|webm|ogg|ogv)/i', $extension ) ) { $GeneralSettings = get_option('powerpress_general'); if( empty($GeneralSettings['podcast_embed']) ) return false; if( empty($GeneralSettings['player']) || $GeneralSettings['player'] == 'flow-player-classic' ) $GeneralSettings['player'] = 'mediaelement-audio'; if( empty($GeneralSettings['video_player']) || $GeneralSettings['video_player'] == 'flow-player-classic' ) $GeneralSettings['video_player'] = 'mediaelement-video'; switch( $extension ) { case 'mp3': case 'oga': case 'm4a': { if( in_array( $GeneralSettings['player'], array('mediaelement-audio', 'default', 'blubrryaudio') ) ) $player = $GeneralSettings['player']; }; break; case 'mp4': case 'm4v': case 'webm': case 'ogg': case 'ogv': { if( in_array( $GeneralSettings['video_player'], array('mediaelement-video', 'html5video') ) ) $player = $GeneralSettings['video_player']; }; break; } } return $player; } function powerpressplayer_link_embed($content, $media_url, $ExtraData = array() ) { $player_links = ''; $player = powerpressplayer_embedable($media_url, $ExtraData); if( $player ) { $player_links .= "". htmlspecialchars(POWERPRESS_EMBED_TEXT) .""; } if( $player_links && !empty($content) ) $content .= ' '.POWERPRESS_LINK_SEPARATOR .' '; return $content . $player_links; } function powerpressplayer_link_title($content, $media_url, $ExtraData = array() ) { if( $content ) { $extension = 'unknown'; $parts = pathinfo($media_url); if( $parts && isset($parts['extension']) ) $extension = strtolower($parts['extension']); $prefix = ''; if( $extension == 'pdf' ) $prefix .= __('E-Book PDF', 'powerpress') . ( $ExtraData['feed']=='pdf'||$ExtraData['feed']=='podcast'?'':" ({$ExtraData['feed']})") .POWERPRESS_TEXT_SEPARATOR; else if( $ExtraData['feed'] != 'podcast' ) $prefix .= htmlspecialchars(POWERPRESS_LINKS_TEXT) .' ('. htmlspecialchars($ExtraData['feed']) .')'. POWERPRESS_TEXT_SEPARATOR; else $prefix .= htmlspecialchars(POWERPRESS_LINKS_TEXT) . POWERPRESS_TEXT_SEPARATOR; if( !empty($prefix) ) $prefix .= ' '; $return = ''; $player = powerpressplayer_embedable($media_url, $ExtraData); if( $player ) { if( !empty($ExtraData['embed']) ) $iframe_src = $ExtraData['embed']; else $iframe_src = powerpress_generate_embed($player, $ExtraData); $return .= ''; } return $return; } return ''; } add_filter('powerpress_player_links', 'powerpressplayer_link_pinw', 30, 3); add_filter('powerpress_player_links', 'powerpressplayer_link_download', 50, 3); add_filter('powerpress_player_links', 'powerpressplayer_link_embed', 50, 3); add_filter('powerpress_player_links', 'powerpressplayer_link_title', 1000, 3); /* Do Play in new Window */ function powerpress_do_pinw($pinw, $process_podpress) { if( !WP_DEBUG && defined('POWERPRESS_FIX_WARNINGS') ) { @error_reporting( E_ALL | E_CORE_ERROR | E_COMPILE_ERROR | E_PARSE ); } list($post_id, $feed_slug) = explode('-', $pinw, 2); $EpisodeData = powerpress_get_enclosure_data($post_id, $feed_slug); if( $EpisodeData == false && $process_podpress && $feed_slug == 'podcast' ) { $EpisodeData = powerpress_get_enclosure_data_podpress($post_id); } $GeneralSettings = get_option('powerpress_general'); echo ''; // HTML5! ?> <?php echo __('Blubrry PowerPress Player', 'powerpress'); ?>
'. __('Unable to retrieve media information.', 'powerpress') .'

'; } else if( !empty($GeneralSettings['premium_caps']) && !powerpress_premium_content_authorized($feed_slug) ) { echo powerpress_premium_content_message($post_id, $feed_slug, $EpisodeData); } else if( !empty($EpisodeData['embed']) ) { echo $EpisodeData['embed']; } else // if( !isset($EpisodeData['no_player']) ) // Even if there is no player set, if the play in new window option is enabled then it should play here... { echo apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), array('feed'=>$feed_slug, 'autoplay'=>true, 'type'=>$EpisodeData['type']) ); } wp_print_styles(); wp_print_scripts(); ?>
'.PHP_EOL_WEB; $content .= ''.PHP_EOL_WEB; $content .= ''.PHP_EOL_WEB; } else { if( !$cover_image ) $cover_image = powerpress_get_root_url() . 'black.png'; $webm_src = ''; if( !empty($EpisodeData['webm_src']) ) $webm_src = powerpress_add_flag_to_redirect_url($EpisodeData['webm_src'], 'p'); $content .= '
'; $content .= ''; if( !empty($EpisodeData['custom_play_button']) ) // This currently does not apply { $cover_image = $EpisodeData['custom_play_button']; $Settings['poster_play_image'] = false; $content .= ''. htmlspecialchars(POWERPRESS_PLAY_TEXT) .''; } else { $content .= ''. htmlspecialchars(POWERPRESS_PLAY_TEXT) .''; } if(!isset($Settings['poster_play_image']) || $Settings['poster_play_image'] ) { $play_image_button_url = powerpress_get_root_url() .'play_video.png'; if( !empty($Settings['video_custom_play_button']) ) $play_image_button_url = $Settings['video_custom_play_button']; $bottom = floor(($player_height/2)-30); if( $bottom < 0 ) $bottom = 0; $left = floor(($player_width/2)-30); if( $left < 0 ) $left = 0; $content .= ''. htmlspecialchars(POWERPRESS_PLAY_TEXT) .''; } $content .= ''; $content .= "
\n"; if( $autoplay ) { $content .= '\n"; } } return $content; } /* MediaElement.js Video Player */ function powerpressplayer_build_mediaelementvideo($media_url, $EpisodeData=array(), $embed = false ) { if( !function_exists('wp_video_shortcode') ) { // Return the HTML5 video shortcode instead return powerpressplayer_build_html5video($media_url, $EpisodeData, $embed); } $player_id = powerpressplayer_get_next_id(); $cover_image = ''; $player_width = ''; $player_height = ''; $autoplay = false; // Global Settings $Settings = get_option('powerpress_general'); if( !empty($Settings['player_width']) ) $player_width = $Settings['player_width']; if( !empty($Settings['player_height']) ) $player_height = $Settings['player_height']; if( !empty($Settings['poster_image']) ) $cover_image = $Settings['poster_image']; // Episode Settings if( !empty($EpisodeData['image']) ) $cover_image = $EpisodeData['image']; if( !empty($EpisodeData['width']) ) $player_width = $EpisodeData['width']; if( !empty($EpisodeData['height']) ) $player_height = $EpisodeData['height']; if( !empty($EpisodeData['autoplay']) ) $autoplay = true; if( $embed ) { $player_height = '123'; $player_width = '456'; } $content = ''; $content .= '
'.PHP_EOL_WEB; $attr = array('src'=>$media_url, 'poster'=>'', 'loop'=>'', 'autoplay'=>'', 'preload'=>'none'); // , 'width'=>'', 'height'=>''); if( !empty($player_width) ) $attr['width'] = $player_width; if( !empty($player_height) ) $attr['height'] = $player_height; if( !empty($cover_image) ) $attr['poster'] = $cover_image; if( !empty($autoplay) ) $attr['autoplay'] = 'on'; if( !empty($EpisodeData['webm_src']) ) $attr['webm'] = powerpress_add_flag_to_redirect_url($EpisodeData['webm_src'], 'p'); // Double check that WordPress is providing the shortcode... global $shortcode_tags; if( !defined('POWERPRESS_DO_SHORTCODE') ) { $shortcode = wp_video_shortcode( $attr ); } else { $shortcode_value = '[video '; foreach( $attr as $tag_name => $tag_value ) { $shortcode_value .= ' '.$tag_name.'="'. esc_attr($tag_value) .'"'; } $shortcode_value .= ']'; $shortcode .= do_shortcode($shortcode_value); } if( $embed ) { $shortcode = str_replace( array('"123"', '"456"', '456px;'), array('"100%"', '"100%"', '100%;'), $shortcode); } $content .= $shortcode; $content .= '
'.PHP_EOL_WEB; return $content; } /* HTTML 5 Audio Player */ function powerpressplayer_build_html5audio($media_url, $EpisodeData=array(), $embed = false ) { $player_id = powerpressplayer_get_next_id(); $autoplay = false; // Episode Settings if( !empty($EpisodeData['autoplay']) ) $autoplay = true; $content = ''; if( $embed ) { $content .= '
'.PHP_EOL_WEB; $content .= '
\n"; if( $autoplay ) { $content .= '\n"; } } return $content; } /* */ function powerpressplayer_build_blubrryaudio($media_url, $EpisodeData=array(), $embed = false ) { static $instance = 0; $instance++; // media URL is all we need., as long as it's hosted at blubrry.com... if( preg_match('/(content|protected|ins)\.blubrry\.com/', $media_url) ) { $playerSettings = get_option('powerpress_bplayer'); $hash = ''; if(!empty($playerSettings)) { $hash = 'darkOrLight-'.$playerSettings['playerstyle']."&shownotes-".$playerSettings['showtext']."&shownotesBackground-".$playerSettings['showbg']; $hash .= "&download-".$playerSettings['downloadcolortext']."&downloadBackground-".$playerSettings['downloadbgcolor']; $hash .= "&subscribe-".$playerSettings['textsubscribe']."&subscribeBackground-".$playerSettings['subscribebg']."&share-".$playerSettings['textshare']."&shareBackground-".$playerSettings['bgshare']; $hash = str_replace('#','',$hash); //remove # symbol from hex colors $hash = '#'.$hash; } if( !empty($EpisodeData['episode_id']) ) { $url = 'https://player.blubrry.com/?podcast_id='. intval($EpisodeData['episode_id']); } else { $url = 'https://player.blubrry.com/?media_url='. urlencode($media_url); if( !empty($EpisodeData['id']) ) { // Get permalink URL $permalink = get_permalink( $EpisodeData['id'] ); if( !empty($permalink) ) $url.= '&podcast_link='. urlencode($permalink); } if( !empty($EpisodeData['itunes_image']) ) { $GeneralSettings = get_option('powerpress_general'); if(isset($GeneralSettings['bp_episode_image']) && $GeneralSettings['bp_episode_image'] != false) $url.= '&artwork_url='. urlencode($EpisodeData['itunes_image']); } } $url = $url.$hash; $playerID = sprintf('blubrryplayer-%d', $instance); $feedSlug = 'podcast'; if( !empty($EpisodeData['feed']) ) $feedSlug = $EpisodeData['feed']; if( empty($GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ] ) ) $GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ] = $playerID; return ''; } return powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData, $embed); } function powerpressplayer_build_blubrryaudio_by_id($directory_episode_id) { return ''; } /* MediaElement.js Audio Player */ function powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData=array(), $embed = false ) { if( !function_exists('wp_audio_shortcode') ) { // Return the HTML5 audio shortcode instead return powerpressplayer_build_html5audio($media_url, $EpisodeData, $embed); } $player_id = powerpressplayer_get_next_id(); $autoplay = false; // Episode Settings if( !empty($EpisodeData['autoplay']) ) $autoplay = true; $content = ''; $content .= '
'.PHP_EOL_WEB; $attr = array( 'src' => $media_url, 'loop' => '', // off 'autoplay' => ( $autoplay ?'on':''), 'preload' => 'none' ); // Double check that WordPress is providing the shortcode... global $shortcode_tags; $player = ''; if( !defined('POWERPRESS_DO_SHORTCODE') ) { // && !empty($shortcode_tags['audio']) && is_string($shortcode_tags['audio']) && $shortcode_tags['audio'] == 'wp_audio_shortcode' ) { $player .= wp_audio_shortcode( $attr ); } else { $player .= do_shortcode( '[audio src="'. esc_attr($media_url) .'" autoplay="'. ( $autoplay ?'on':'') .'" loop="" preload="none"]'); } // Get the DIV id for this element $feedSlug = 'podcast'; if( !empty($EpisodeData['feed']) ) $feedSlug = $EpisodeData['feed']; if( empty($GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ]) && preg_match('/\'.PHP_EOL_WEB; return $content; } function powerpressplayer_build_playimage($media_url, $EpisodeData = array(), $include_div = false) { $content = ''; $autoplay = false; if( !empty($EpisodeData['autoplay']) && $EpisodeData['autoplay'] ) $autoplay = true; $player_width = 400; $player_height = 225; $cover_image = ''; // Global settings $Settings = get_option('powerpress_general'); if( !empty($Settings['player_width']) ) $player_width = $Settings['player_width']; if( !empty($Settings['player_height']) ) $player_height = $Settings['player_height']; if( !empty($Settings['poster_image']) ) $cover_image = $Settings['poster_image']; // episode settings if( !empty($EpisodeData['width']) ) $player_width = $EpisodeData['width']; if( !empty($EpisodeData['height']) ) $player_height = $EpisodeData['height']; if( !empty($EpisodeData['image']) ) $cover_image = $EpisodeData['image']; if( !$cover_image ) $cover_image = powerpress_get_root_url() . 'black.png'; if( $include_div ) $content .= '\n"; return $content; } function powerpressplayer_build_playimageaudio($media_url, $include_div = false) { $content = ''; $cover_image = powerpress_get_root_url() . 'play_audio.png'; $GeneralSettings = get_option('powerpress_general'); if( !empty($GeneralSettings['custom_play_button']) ) $cover_image = $GeneralSettings['custom_play_button']; if( $include_div ) $content .= '
'; $content .= ''; $content .= ''. htmlspecialchars(POWERPRESS_PLAY_TEXT) .''; $content .= ''; if( $include_div ) $content .= "
\n"; return $content; } function powerpressplayer_build_playimagepdf($media_url, $include_div = false) { $content = ''; $cover_image = powerpress_get_root_url() . 'play_pdf.png'; $GeneralSettings = get_option('powerpress_general'); if( !empty($GeneralSettings['pdf_custom_play_button']) ) $cover_image = $GeneralSettings['pdf_custom_play_button']; if( $include_div ) $content .= '
'; $content .= ''; $content .= ''. htmlspecialchars(POWERPRESS_READ_TEXT) .''; $content .= ''; if( $include_div ) $content .= "
\n"; return $content; } function powerpressplayer_build_playimageepub($media_url, $include_div = false) { $content = ''; $cover_image = powerpress_get_root_url() . 'play_epub.png'; $GeneralSettings = get_option('powerpress_general'); if( !empty($GeneralSettings['epub_custom_play_button']) ) $cover_image = $GeneralSettings['epub_custom_play_button']; if( $include_div ) $content .= '
'; $content .= ''; $content .= ''. htmlspecialchars(POWERPRESS_READ_TEXT) .''; $content .= ''; if( $include_div ) $content .= "
\n"; return $content; } /* VideoJS for PowerPress 4.0 */ function powerpressplayer_build_videojs($media_url, $EpisodeData = array()) { $content = ''; if( function_exists('add_videojs_header') ) { // Global Settings $Settings = get_option('powerpress_general'); $player_id = powerpressplayer_get_next_id(); $cover_image = ''; $player_width = 400; $player_height = 225; $autoplay = false; if( !empty($Settings['player_width']) ) $player_width = $Settings['player_width']; if( !empty($Settings['player_height']) ) $player_height = $Settings['player_height']; if( !empty($Settings['poster_image']) ) $cover_image = $Settings['poster_image']; // Episode Settings if( !empty($EpisodeData['image']) ) $cover_image = $EpisodeData['image']; if( !empty($EpisodeData['width']) ) $player_width = $EpisodeData['width']; if( !empty($EpisodeData['height']) ) $player_height = $EpisodeData['height']; if( !empty($EpisodeData['autoplay']) ) $autoplay = true; // Poster image supplied $poster_attribute = ''; if ($cover_image) $poster_attribute = ' poster="'.$cover_image.'"'; // Autoplay the video? $autoplay_attribute = ''; if ( $autoplay ) $autoplay_attribute = ' autoplay'; // We never do pre-poading for podcasting as it inflates statistics // Is there a custom class? $class = ''; if ( !empty($Settings['videojs_css_class']) ) $class = ' '. $Settings['videojs_css_class']; $content .= '
'; $content .= ''; $content .= "
\n"; } else { $content .= powerpressplayer_build_html5video($media_url, $EpisodeData); } return $content; } function powerpress_shortcode_skipto($attributes, $content = null) { $pos = ''; if( isset($attributes['time']) ) { $pos = $attributes['time']; } else if (isset($attributes['timestamp'])) { $pos = $attributes['timestamp']; } else if (isset($attributes['ts'])) { $pos = $attributes['ts']; } if( empty($pos) ) return $content; // Prepare data $timeInSeconds = powerpress_raw_duration($pos); $readableTime = $pos; if( strpos($readableTime, ':') === false ) // If the time they entered is not in colon format, lets use a readable format with the colons... $readableTime = powerpress_readable_duration($timeInSeconds); if( empty($content) ) $content = $readableTime; // We can't add players to feeds if( is_feed() ) { if( empty($content) ) // If no custom label is set, lets use this timestamp in a readable format with colons return $readableTime; return $content; } $feedSlug = 'podcast'; if( !empty($attributes['channel']) ) $feedSlug = $attributes['channel']; if( empty($GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ]) ) { if( function_exists('qed_stt_shortcode') ) { // If using the skip to timestamp plugin, we will fall back to it since we are not handling the player... return qed_stt_shortcode($attributes, $content); } return $content; } $playerID = $GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ]; return ''. $content .''; }