Version Description
- August 20, 2015 =
- Fixed a number of potential infinite loops and other recursion issues related to longstanding WordPress bug #17817.
- Changed video player names with spaces (WordPress Default, JW Player) to one word camel case for JavaScript functions (WordPressDefault, JWPlayer).
Download this release
Release Info
Developer | kylegilman |
Plugin | Video Embed & Thumbnail Generator |
Version | 4.5.5 |
Comparing to | |
See all releases |
Code changes from version 4.5.4 to 4.5.5
- js/kgvid_video_embed.js +9 -9
- readme.txt +5 -1
- video-embed-thumbnail-generator.php +531 -524
js/kgvid_video_embed.js
CHANGED
@@ -135,7 +135,7 @@ function kgvid_SetVideo(id) { //for galleries
|
|
135 |
if ( meta > 0 ) {
|
136 |
jQuery('#kgvid-simplemodal-container').css('color','white'); //show text if there's anything to see below the video
|
137 |
meta_bump = 5;
|
138 |
-
if ( video_vars.player_type == "
|
139 |
jQuery('#kgvid-simplemodal-container').height(jQuery('#kgvid-simplemodal-container').height() + meta_bump);
|
140 |
}
|
141 |
|
@@ -144,7 +144,7 @@ function kgvid_SetVideo(id) { //for galleries
|
|
144 |
videojs('video_'+id).play();
|
145 |
}//end if Video.js
|
146 |
|
147 |
-
if ( video_vars.player_type == "
|
148 |
jQuery('#kgvid_'+id+'_wrapper video').mediaelementplayer({
|
149 |
success: function(mediaElement, domObject) {
|
150 |
if (mediaElement.pluginType == 'flash' || mediaElement.pluginType == 'silverlight') {
|
@@ -178,7 +178,7 @@ function kgvid_SetVideo(id) { //for galleries
|
|
178 |
videojs('video_'+id).pause();
|
179 |
setTimeout(function() { videojs('video_'+id).dispose(); }, 0);
|
180 |
}
|
181 |
-
if ( video_vars.player_type == "
|
182 |
jwplayer(jQuery('#kgvid_'+id+'_wrapper .jwplayer').attr('id')).stop();
|
183 |
}
|
184 |
}
|
@@ -339,7 +339,7 @@ function kgvid_setup_video(id) {
|
|
339 |
|
340 |
} //end if Video.js
|
341 |
|
342 |
-
if ( video_vars.player_type == "Strobe Media Playback" || video_vars.player_type == "
|
343 |
|
344 |
jQuery('#video_'+id+'_div').hover(
|
345 |
function(){
|
@@ -351,7 +351,7 @@ function kgvid_setup_video(id) {
|
|
351 |
);
|
352 |
} //end if Strobe Media Playback
|
353 |
|
354 |
-
if ( video_vars.player_type == "
|
355 |
|
356 |
player = jQuery('#video_'+id+'_div video');
|
357 |
|
@@ -392,7 +392,7 @@ function kgvid_setup_video(id) {
|
|
392 |
|
393 |
} //end if WordPress Default
|
394 |
|
395 |
-
if ( video_vars.player_type == "
|
396 |
player_id = jQuery('#video_'+id+'_div').children('div[id^="jwplayer"]').attr('id');
|
397 |
var player = jwplayer(player_id);
|
398 |
|
@@ -530,7 +530,7 @@ function kgvid_resize_video(id) {
|
|
530 |
jQuery('#video_'+id).attr('width',set_width).attr('height',set_height);
|
531 |
jQuery('#video_'+id+'_html5_api').attr('width',set_width).attr('height',set_height);
|
532 |
}
|
533 |
-
if ( video_vars.player_type == "
|
534 |
jQuery('#kgvid_'+id+'_wrapper').find('.wp-video').attr('style', 'width:'+set_width+'px; height:'+set_height+'px;');
|
535 |
}
|
536 |
|
@@ -553,7 +553,7 @@ function kgvid_resize_gallery_play_button(gallery_id) {
|
|
553 |
var video_vars = jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').first().data('kgvid_video_vars');
|
554 |
var thumb_width = jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').first().width();
|
555 |
|
556 |
-
if ( video_vars.player_type == "Video.js" || video_vars.player_type == "
|
557 |
|
558 |
var max_percent = 0.17;
|
559 |
|
@@ -563,7 +563,7 @@ function kgvid_resize_gallery_play_button(gallery_id) {
|
|
563 |
var translate_y = 30;
|
564 |
}
|
565 |
|
566 |
-
if ( video_vars.player_type == "
|
567 |
var button_selector = '.mejs-overlay-button';
|
568 |
var translate_y = 5;
|
569 |
}
|
135 |
if ( meta > 0 ) {
|
136 |
jQuery('#kgvid-simplemodal-container').css('color','white'); //show text if there's anything to see below the video
|
137 |
meta_bump = 5;
|
138 |
+
if ( video_vars.player_type == "JWPlayer" ) { meta_bump = 15; }
|
139 |
jQuery('#kgvid-simplemodal-container').height(jQuery('#kgvid-simplemodal-container').height() + meta_bump);
|
140 |
}
|
141 |
|
144 |
videojs('video_'+id).play();
|
145 |
}//end if Video.js
|
146 |
|
147 |
+
if ( video_vars.player_type == "WordPressDefault" ) {
|
148 |
jQuery('#kgvid_'+id+'_wrapper video').mediaelementplayer({
|
149 |
success: function(mediaElement, domObject) {
|
150 |
if (mediaElement.pluginType == 'flash' || mediaElement.pluginType == 'silverlight') {
|
178 |
videojs('video_'+id).pause();
|
179 |
setTimeout(function() { videojs('video_'+id).dispose(); }, 0);
|
180 |
}
|
181 |
+
if ( video_vars.player_type == "JWPlayer" ) {
|
182 |
jwplayer(jQuery('#kgvid_'+id+'_wrapper .jwplayer').attr('id')).stop();
|
183 |
}
|
184 |
}
|
339 |
|
340 |
} //end if Video.js
|
341 |
|
342 |
+
if ( video_vars.player_type == "Strobe Media Playback" || video_vars.player_type == "WordPressDefault" ) {
|
343 |
|
344 |
jQuery('#video_'+id+'_div').hover(
|
345 |
function(){
|
351 |
);
|
352 |
} //end if Strobe Media Playback
|
353 |
|
354 |
+
if ( video_vars.player_type == "WordPressDefault" ) {
|
355 |
|
356 |
player = jQuery('#video_'+id+'_div video');
|
357 |
|
392 |
|
393 |
} //end if WordPress Default
|
394 |
|
395 |
+
if ( video_vars.player_type == "JWPlayer" ) {
|
396 |
player_id = jQuery('#video_'+id+'_div').children('div[id^="jwplayer"]').attr('id');
|
397 |
var player = jwplayer(player_id);
|
398 |
|
530 |
jQuery('#video_'+id).attr('width',set_width).attr('height',set_height);
|
531 |
jQuery('#video_'+id+'_html5_api').attr('width',set_width).attr('height',set_height);
|
532 |
}
|
533 |
+
if ( video_vars.player_type == "WordPressDefault" ) {
|
534 |
jQuery('#kgvid_'+id+'_wrapper').find('.wp-video').attr('style', 'width:'+set_width+'px; height:'+set_height+'px;');
|
535 |
}
|
536 |
|
553 |
var video_vars = jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').first().data('kgvid_video_vars');
|
554 |
var thumb_width = jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').first().width();
|
555 |
|
556 |
+
if ( video_vars.player_type == "Video.js" || video_vars.player_type == "WordPressDefault" ) {
|
557 |
|
558 |
var max_percent = 0.17;
|
559 |
|
563 |
var translate_y = 30;
|
564 |
}
|
565 |
|
566 |
+
if ( video_vars.player_type == "WordPressDefault" ) {
|
567 |
var button_selector = '.mejs-overlay-button';
|
568 |
var translate_y = 5;
|
569 |
}
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=kyleg
|
|
4 |
Tags: video, video player, video gallery, html5, shortcode, thumbnail, video thumbnail, preview, poster, ffmpeg, libav, embed, oembed, mobile, webm, ogg, h.264, h264, vp9, responsive, mp4, jwplayer, resolution
|
5 |
Requires at least: 3.5
|
6 |
Tested up to: 4.3
|
7 |
-
Stable tag: 4.5.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -231,6 +231,10 @@ Enter the username & password in the plugin settings "FFMPEG Settings" tab, or u
|
|
231 |
|
232 |
== Changelog ==
|
233 |
|
|
|
|
|
|
|
|
|
234 |
= 4.5.4 - August 9, 2015 =
|
235 |
* Added option to disable native controls on mobile devices when using the Video.js player.
|
236 |
* Added Schema.org uploadDate and description tags which are required by Google for video listings.
|
4 |
Tags: video, video player, video gallery, html5, shortcode, thumbnail, video thumbnail, preview, poster, ffmpeg, libav, embed, oembed, mobile, webm, ogg, h.264, h264, vp9, responsive, mp4, jwplayer, resolution
|
5 |
Requires at least: 3.5
|
6 |
Tested up to: 4.3
|
7 |
+
Stable tag: 4.5.5
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
231 |
|
232 |
== Changelog ==
|
233 |
|
234 |
+
= 4.5.5 - August 20, 2015 =
|
235 |
+
* Fixed a number of potential infinite loops and other recursion issues related to longstanding WordPress bug <a href='https://core.trac.wordpress.org/ticket/17817'>#17817</a>.
|
236 |
+
* Changed video player names with spaces (WordPress Default, JW Player) to one word camel case for JavaScript functions (WordPressDefault, JWPlayer).
|
237 |
+
|
238 |
= 4.5.4 - August 9, 2015 =
|
239 |
* Added option to disable native controls on mobile devices when using the Video.js player.
|
240 |
* Added Schema.org uploadDate and description tags which are required by Google for video listings.
|
video-embed-thumbnail-generator.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Video Embed & Thumbnail Generator
|
4 |
Plugin URI: http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/
|
5 |
Description: Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG or LIBAV for encoding.
|
6 |
-
Version: 4.5.
|
7 |
Author: Kyle Gilman
|
8 |
Author URI: http://www.kylegilman.net/
|
9 |
Text Domain: video-embed-thumbnail-generator
|
@@ -59,7 +59,7 @@ function kgvid_default_options_fn() {
|
|
59 |
$edit_others_capable = kgvid_check_if_capable('edit_others_posts');
|
60 |
|
61 |
$options = array(
|
62 |
-
"version" => 4.
|
63 |
"embed_method" => "Video.js",
|
64 |
"jw_player_id" => "",
|
65 |
"template" => false,
|
@@ -761,26 +761,6 @@ function kvid_readfile_chunked($file, $retbytes=TRUE) { //sends large files in c
|
|
761 |
|
762 |
}
|
763 |
|
764 |
-
function kgvid_check_for_shortcode_in_content() {
|
765 |
-
global $post;
|
766 |
-
$pattern = get_shortcode_regex();
|
767 |
-
preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches );
|
768 |
-
if ( is_array($matches) && array_key_exists( 2, $matches ) && array_key_exists( 5, $matches ) ) {
|
769 |
-
foreach ( $matches[2] as $shortcode_index => $shortcode ) {
|
770 |
-
if ( $shortcode == "KGVID" || $shortcode == "FMP" ) { continue; }
|
771 |
-
else {
|
772 |
-
foreach ( $matches as $match_index => $shortcode_matches ) {
|
773 |
-
unset($matches[$match_index][$shortcode_index]);
|
774 |
-
}
|
775 |
-
}
|
776 |
-
}
|
777 |
-
foreach ( $matches[5] as $index => $url ) {
|
778 |
-
if ( empty($url) ) { unset($matches[5][$index]); }
|
779 |
-
}
|
780 |
-
}
|
781 |
-
return $matches;
|
782 |
-
}
|
783 |
-
|
784 |
function kgvid_get_attachment_medium_url( $id )
|
785 |
{
|
786 |
$medium_array = image_downsize( $id, 'medium' );
|
@@ -1748,14 +1728,22 @@ function kgvid_gallery_page($page_number, $query_atts, $last_video_id = 0) {
|
|
1748 |
|
1749 |
$dimensions = kgvid_set_video_dimensions($attachment->ID, true);
|
1750 |
|
1751 |
-
$
|
1752 |
-
|
1753 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1754 |
|
1755 |
-
$popup_code = do_shortcode($shortcode);
|
1756 |
preg_match('/data-kgvid_video_vars=.*? /', $popup_code, $video_vars);
|
1757 |
$popup_code = str_replace(array("\r", "\n", "\t", $video_vars[0]), "", $popup_code);
|
1758 |
-
$video_vars[0] = str_replace(' ', ' ', $video_vars[0]);
|
1759 |
|
1760 |
if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
|
1761 |
if ( is_array($query_atts) && array_key_exists('skin', $query_atts) ) {
|
@@ -1791,6 +1779,7 @@ function kgvid_gallery_page($page_number, $query_atts, $last_video_id = 0) {
|
|
1791 |
} //if there are attachments
|
1792 |
|
1793 |
return $code;
|
|
|
1794 |
}
|
1795 |
|
1796 |
function kgvid_switch_gallery_page() {
|
@@ -1809,6 +1798,519 @@ function kgvid_switch_gallery_page() {
|
|
1809 |
add_action( 'wp_ajax_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for logged in users
|
1810 |
add_action( 'wp_ajax_nopriv_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for not logged in users
|
1811 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1812 |
function kgvid_shortcode_atts($atts) {
|
1813 |
|
1814 |
$options = kgvid_get_options();
|
@@ -1917,17 +2419,11 @@ function kgvid_shortcode_atts($atts) {
|
|
1917 |
|
1918 |
function KGVID_shortcode($atts, $content = ''){
|
1919 |
|
1920 |
-
global $content_width;
|
1921 |
-
global $kgvid_video_id;
|
1922 |
-
if ( !$kgvid_video_id ) { $kgvid_video_id = 0; }
|
1923 |
-
|
1924 |
-
$content_width_save = $content_width;
|
1925 |
-
|
1926 |
$code = "";
|
1927 |
if ( !is_feed() ) {
|
1928 |
|
1929 |
$options = kgvid_get_options();
|
1930 |
-
|
1931 |
kgvid_enqueue_shortcode_scripts();
|
1932 |
|
1933 |
if ( in_the_loop() ) { $post_ID = get_the_ID(); }
|
@@ -1937,496 +2433,7 @@ function KGVID_shortcode($atts, $content = ''){
|
|
1937 |
|
1938 |
if ( $query_atts["gallery"] != "true" ) { //if this is not a pop-up gallery
|
1939 |
|
1940 |
-
$
|
1941 |
-
|
1942 |
-
if ( empty($content) ) {
|
1943 |
-
if ( !empty($query_atts["id"]) ) {
|
1944 |
-
$id_array[0] = $query_atts["id"];
|
1945 |
-
}
|
1946 |
-
elseif ( $post_ID != 1 ) {
|
1947 |
-
$args = array(
|
1948 |
-
'numberposts' => $query_atts['videos'],
|
1949 |
-
'post_mime_type' => 'video',
|
1950 |
-
'post_parent' => $post_ID,
|
1951 |
-
'post_status' => null,
|
1952 |
-
'post_type' => 'attachment',
|
1953 |
-
'orderby' => $query_atts['orderby'],
|
1954 |
-
'order' => $query_atts['order']
|
1955 |
-
);
|
1956 |
-
$video_attachments = get_posts($args);
|
1957 |
-
if ( $video_attachments ) {
|
1958 |
-
foreach ( $video_attachments as $video ) {
|
1959 |
-
$id_array[] = $video->ID;
|
1960 |
-
}
|
1961 |
-
}
|
1962 |
-
else { return; } //if there are no video children of the current post
|
1963 |
-
}
|
1964 |
-
else { return; } //if there's no post ID and no $content
|
1965 |
-
}
|
1966 |
-
else { // $content is a URL
|
1967 |
-
// workaround for relative video URL (contributed by Lee Fernandes)
|
1968 |
-
if(substr($content, 0, 1) == '/') $content = get_bloginfo('url').$content;
|
1969 |
-
$content = trim($content);
|
1970 |
-
$id_array[0] = kgvid_url_to_id($content);
|
1971 |
-
}
|
1972 |
-
|
1973 |
-
$original_content = $content;
|
1974 |
-
|
1975 |
-
foreach ( $id_array as $id ) { //loop through videos
|
1976 |
-
|
1977 |
-
$div_suffix = 'kgvid_'.strval($kgvid_video_id);
|
1978 |
-
|
1979 |
-
$query_atts = kgvid_shortcode_atts($atts); //reset values so they can be different with multiple videos
|
1980 |
-
$content = $original_content;
|
1981 |
-
$sources = array();
|
1982 |
-
$mp4already = false;
|
1983 |
-
$dimensions = array();
|
1984 |
-
|
1985 |
-
$compatible = array("flv", "f4v", "mp4", "mov", "m4v", "ogv", "ogg", "webm");
|
1986 |
-
$h264compatible = array("mp4", "mov", "m4v");
|
1987 |
-
|
1988 |
-
if ( !empty($id) ) { //if the video is an attachment in the WordPress db
|
1989 |
-
|
1990 |
-
$attachment_url = wp_get_attachment_url($id);
|
1991 |
-
if ( $attachment_url == false ) { echo "Invalid video ID"; continue; }
|
1992 |
-
$exempt_cdns = array('amazonaws.com', 'rackspace.com', 'netdna-cdn.com', 'nexcess-cdn.net', 'limelight.com'); //don't replace URLs that point to CDNs
|
1993 |
-
$exempt_url = false;
|
1994 |
-
foreach ( $exempt_cdns as $exempt_cdn ) {
|
1995 |
-
if ( strpos($content, $exempt_cdn) !== false ) {
|
1996 |
-
$exempt_url = true;
|
1997 |
-
}
|
1998 |
-
}
|
1999 |
-
if ( !$exempt_url ) { $content = $attachment_url; }
|
2000 |
-
|
2001 |
-
$encodevideo_info = kgvid_encodevideo_info($content, $id);
|
2002 |
-
$attachment_info = get_post( $id );
|
2003 |
-
$kgvid_postmeta = kgvid_get_attachment_meta($id);
|
2004 |
-
|
2005 |
-
$dimensions = kgvid_set_video_dimensions($id);
|
2006 |
-
|
2007 |
-
if ( empty($atts['width']) ) {
|
2008 |
-
$query_atts['width'] = $dimensions['width'];
|
2009 |
-
$query_atts['height'] = $dimensions['height'];
|
2010 |
-
}
|
2011 |
-
|
2012 |
-
$poster_id = get_post_meta($id, '_kgflashmediaplayer-poster-id', true);
|
2013 |
-
if ( !empty($poster_id) ) {
|
2014 |
-
$poster_image_src = wp_get_attachment_image_src($poster_id, 'full');
|
2015 |
-
$query_atts['poster'] = $poster_image_src[0];
|
2016 |
-
if ( strpos($query_atts['width'], '%') === false && intval($query_atts['width']) <= get_option('medium_size_h') ) {
|
2017 |
-
$query_atts['poster'] = kgvid_get_attachment_medium_url($poster_id);
|
2018 |
-
}
|
2019 |
-
}
|
2020 |
-
|
2021 |
-
if ( $query_atts['title'] == "true" ) {
|
2022 |
-
$query_atts['title'] = $attachment_info->post_title;
|
2023 |
-
$stats_title = $query_atts['title'];
|
2024 |
-
}
|
2025 |
-
else { $stats_title = $attachment_info->post_title; }
|
2026 |
-
if ( empty($query_atts['caption']) ) { $query_atts['caption'] = $attachment_info->post_excerpt; }
|
2027 |
-
if ( empty($query_atts['description']) ) { $query_atts['description'] = $attachment_info->post_content; }
|
2028 |
-
|
2029 |
-
$countable = true;
|
2030 |
-
}
|
2031 |
-
else { //video is not in the database
|
2032 |
-
|
2033 |
-
$encodevideo_info = kgvid_encodevideo_info($content, $post_ID); //send the id of the post the video's embedded in
|
2034 |
-
if ( $query_atts['title'] == "true" ) {
|
2035 |
-
$query_atts['title'] = "false";
|
2036 |
-
}
|
2037 |
-
$stats_title = basename($content);
|
2038 |
-
if ( $query_atts['embedcode'] == "true" ) {
|
2039 |
-
$query_atts['embedcode'] = "false"; //can't use embed code with videos that are not in the database
|
2040 |
-
}
|
2041 |
-
|
2042 |
-
$countable = false;
|
2043 |
-
}
|
2044 |
-
|
2045 |
-
$mime_type_check = wp_check_filetype($content);
|
2046 |
-
if ( in_array($mime_type_check['ext'], $h264compatible) ) {
|
2047 |
-
$format_type = "h264";
|
2048 |
-
$mime_type = "video/mp4";
|
2049 |
-
}
|
2050 |
-
else {
|
2051 |
-
$format_type = $mime_type_check['ext'];
|
2052 |
-
$mime_type = $mime_type_check['type'];
|
2053 |
-
}
|
2054 |
-
|
2055 |
-
unset($video_formats['fullres']);
|
2056 |
-
$video_formats = array('original' => array( "type" => $format_type, "mime" => $mime_type, "name" => "Full", "label" => "Full" ) ) + $video_formats;
|
2057 |
-
|
2058 |
-
if ( in_array($mime_type_check['ext'], $compatible) ) {
|
2059 |
-
|
2060 |
-
$encodevideo_info["original"]["exists"] = true;
|
2061 |
-
$encodevideo_info["original"]["url"] = $content;
|
2062 |
-
|
2063 |
-
if ( is_array($dimensions) && array_key_exists('actualheight', $dimensions) ) {
|
2064 |
-
$video_formats['original']['label'] = $dimensions['actualheight'].'p';
|
2065 |
-
$video_formats['original']['height'] = $dimensions['actualheight'];
|
2066 |
-
$encodevideo_info["original"]["height"] = $dimensions['actualheight'];
|
2067 |
-
}
|
2068 |
-
|
2069 |
-
}
|
2070 |
-
else { $encodevideo_info["original"]["exists"] = false; }
|
2071 |
-
|
2072 |
-
if($query_atts["endofvideooverlaysame"] == "true") { $query_atts["endofvideooverlay"] = $query_atts["poster"]; }
|
2073 |
-
|
2074 |
-
if ( $options['embed_method'] == "Strobe Media Playback" ) {
|
2075 |
-
|
2076 |
-
$flash_settings = kgvid_generate_flashvars($content, $query_atts, $encodevideo_info, $div_suffix);
|
2077 |
-
|
2078 |
-
} //if Strobe Media Playback
|
2079 |
-
|
2080 |
-
if ( $query_atts['inline'] == "true" ) {
|
2081 |
-
$aligncode = ' kgvid_wrapper_inline';
|
2082 |
-
if ( $query_atts['align'] == "left" ) { $aligncode .= ' kgvid_wrapper_inline_left'; }
|
2083 |
-
if ( $query_atts['align'] == "center" ) { $aligncode .= ' kgvid_wrapper_auto_left kgvid_wrapper_auto_right'; }
|
2084 |
-
if ( $query_atts['align'] == "right" ) { $aligncode .= ' kgvid_wrapper_inline_right'; }
|
2085 |
-
}
|
2086 |
-
else {
|
2087 |
-
if ( $query_atts['align'] == "left" ) { $aligncode = ''; }
|
2088 |
-
if ( $query_atts['align'] == "center" ) { $aligncode = ' kgvid_wrapper_auto_left kgvid_wrapper_auto_right'; }
|
2089 |
-
if ( $query_atts['align'] == "right" ) { $aligncode = ' kgvid_wrapper_auto_left'; }
|
2090 |
-
}
|
2091 |
-
|
2092 |
-
if ( ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" )
|
2093 |
-
|| $query_atts['embedcode'] != "false" ) { //generate content overlaid on video
|
2094 |
-
$kgvid_meta = true;
|
2095 |
-
}
|
2096 |
-
else { $kgvid_meta = false; }
|
2097 |
-
|
2098 |
-
$video_variables = array(
|
2099 |
-
'id' => $div_suffix,
|
2100 |
-
'attachment_id' => $id,
|
2101 |
-
'player_type' => str_replace(' ', ' ', $options['embed_method']),
|
2102 |
-
'width' => $query_atts['width'],
|
2103 |
-
'height' => $query_atts['height'],
|
2104 |
-
'fullwidth' => $query_atts['fullwidth'],
|
2105 |
-
'countable' => $countable,
|
2106 |
-
'autoplay' => $query_atts['autoplay'],
|
2107 |
-
'set_volume' => $query_atts['volume'],
|
2108 |
-
'mute' => $query_atts['mute'],
|
2109 |
-
'meta' => $kgvid_meta,
|
2110 |
-
'endofvideooverlay' => $query_atts['endofvideooverlay'],
|
2111 |
-
'resize' => $query_atts['resize'],
|
2112 |
-
'auto_res' => $query_atts['auto_res'],
|
2113 |
-
'right_click' => $query_atts['right_click']
|
2114 |
-
);
|
2115 |
-
|
2116 |
-
if ( $options['embed_method'] == "Strobe Media Playback" && $flash_settings['flash_source_found'] ) {
|
2117 |
-
|
2118 |
-
$video_variables['swfurl'] = plugins_url('', __FILE__)."/flash/StrobeMediaPlayback.swf";
|
2119 |
-
$video_variables['expressinstallswfurl'] = plugins_url("", __FILE__)."/flash/expressInstall.swf";
|
2120 |
-
$video_variables['flashvars'] = $flash_settings['flashvars'];
|
2121 |
-
$video_variables['params'] = $flash_settings['params'];
|
2122 |
-
|
2123 |
-
} //if Strobe Media
|
2124 |
-
|
2125 |
-
$video_variables = str_replace(' ', ' ', $video_variables);
|
2126 |
-
$code .= '<div id="kgvid_'.$div_suffix.'_wrapper" class="kgvid_wrapper'.$aligncode.'">'."\n\t\t\t";
|
2127 |
-
$code .= '<div id="video_'.$div_suffix.'_div" class="fitvidsignore kgvid_videodiv" data-id="'.$div_suffix.'" data-kgvid_video_vars="'.esc_attr(json_encode($video_variables)).'" itemprop="video" itemscope itemtype="https://schema.org/VideoObject">';
|
2128 |
-
if ( $query_atts["poster"] != '' ) { $code .= '<meta itemprop="thumbnailUrl" content="'.esc_attr($query_atts["poster"]).'" />'; }
|
2129 |
-
if ( !empty($id) ) { $schema_embedURL = site_url('/')."?attachment_id=".$id."&kgvid_video_embed[enable]=true"; }
|
2130 |
-
else { $schema_embedURL = $content; }
|
2131 |
-
$code .= '<meta itemprop="embedUrl" content="'.esc_attr($schema_embedURL).'" />';
|
2132 |
-
$code .= '<meta itemprop="contentUrl" content="'.$content.'" />';
|
2133 |
-
|
2134 |
-
if ( !empty($query_atts['title']) ) { $code .= '<meta itemprop="name" content="'.esc_attr($query_atts['title']).'" />'; }
|
2135 |
-
|
2136 |
-
if ( !empty($query_atts['description']) ) { $description = $query_atts['description']; }
|
2137 |
-
elseif ( !empty($query_atts['caption']) ) { $description = $query_atts['caption']; }
|
2138 |
-
elseif ( in_the_loop() && !is_attachment() ) { $description = get_the_excerpt(); }
|
2139 |
-
if ( empty($description) ) { $description = __('Video', 'video-embed-thumbnail-generator'); }
|
2140 |
-
$code .= '<meta itemprop="description" content="'.esc_attr($description).'" />';
|
2141 |
-
|
2142 |
-
if ( !empty($id) ) { $upload_date = get_the_date('c', $id); }
|
2143 |
-
elseif ( $post_ID != 1 ) { $upload_date = get_the_date('c', $post_ID); }
|
2144 |
-
else { $upload_date = current_time('c'); }
|
2145 |
-
$code .= '<meta itemprop="uploadDate" content="'.esc_attr($upload_date).'" />';
|
2146 |
-
|
2147 |
-
$track_keys = array('kind', 'srclang', 'src', 'label', 'default');
|
2148 |
-
if ( !isset($kgvid_postmeta) || ( is_array($kgvid_postmeta) && !is_array($kgvid_postmeta['track']) ) ) {
|
2149 |
-
$kgvid_postmeta['track'] = array();
|
2150 |
-
$kgvid_postmeta['track'][0] = array ( 'kind' => '', 'srclang' => '', 'src' => '', 'label' => '', 'default' => '');
|
2151 |
-
}
|
2152 |
-
foreach ( $track_keys as $key ) {
|
2153 |
-
if ( empty($kgvid_postmeta['track'][0][$key]) ) { $kgvid_postmeta['track'][0][$key] = $query_atts['track_'.$key]; }
|
2154 |
-
}
|
2155 |
-
|
2156 |
-
$track_code = "";
|
2157 |
-
if ( !empty($kgvid_postmeta['track'][0]['src']) ) {
|
2158 |
-
foreach ( $kgvid_postmeta['track'] as $track => $track_attribute ) {
|
2159 |
-
foreach ( $track_attribute as $attribute => $value ) {
|
2160 |
-
if ( empty($value) ) { $track_attribute[$attribute] = $query_atts['track_'.$attribute]; }
|
2161 |
-
}
|
2162 |
-
if ( $options['embed_method'] == "WordPress Default" && $track_attribute['kind'] == 'captions' ) { $track_attribute['kind'] = 'subtitles'; }
|
2163 |
-
$track_code .= "\t\t\t\t\t<track id='".$div_suffix."_text_".$track."' kind='".esc_attr($track_attribute['kind'])."' src='".esc_attr($track_attribute['src'])."' srclang='".esc_attr($track_attribute['srclang'])."' label='".esc_attr($track_attribute['label'])."' ".esc_attr($track_attribute['default'])." />\n";
|
2164 |
-
}
|
2165 |
-
}
|
2166 |
-
|
2167 |
-
if ( $options['embed_method'] == "WordPress Default" ) {
|
2168 |
-
$wp_shortcode = "[video ";
|
2169 |
-
$sources_hack = "";
|
2170 |
-
foreach ($video_formats as $format => $format_stats) {
|
2171 |
-
if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
|
2172 |
-
if ( $encodevideo_info[$format]["exists"] ) {
|
2173 |
-
if ( $format_stats['type'] != "h264" || !$mp4already ) {
|
2174 |
-
$shortcode_type = wp_check_filetype( $encodevideo_info[$format]["url"], wp_get_mime_types() );
|
2175 |
-
$sources[$format] = $shortcode_type['ext'].'="'.$encodevideo_info[$format]["url"].'" ';
|
2176 |
-
if ( $format_stats['type'] == "h264" ) { //WordPress built-in shortcode doesn't support multiple videos of the same type but we'll hack it in later
|
2177 |
-
$mp4already = true;
|
2178 |
-
}
|
2179 |
-
}
|
2180 |
-
else { $sources_hack .= '<source type="'.$format_stats['mime'].'" src="'.esc_attr($encodevideo_info[$format]["url"]).'" />'; }
|
2181 |
-
}
|
2182 |
-
}
|
2183 |
-
|
2184 |
-
$wp_shortcode .= implode($sources);
|
2185 |
-
if ( $query_atts["poster"] != '' ) { $wp_shortcode .= 'poster="'.esc_attr($query_atts["poster"]).'" '; }
|
2186 |
-
$wp_shortcode .= 'width='.$query_atts["width"].' height='.$query_atts["height"].' ';
|
2187 |
-
if ( $query_atts["loop"] == 'true') { $wp_shortcode .= 'loop="true" '; }
|
2188 |
-
if ( $query_atts["autoplay"] == 'true') { $wp_shortcode .= 'autoplay="true" '; }
|
2189 |
-
$wp_shortcode .= 'preload="'.$options['preload'].'"';
|
2190 |
-
$wp_shortcode .= "]";
|
2191 |
-
$content_width = $query_atts['width'];
|
2192 |
-
$executed_shortcode = do_shortcode($wp_shortcode);
|
2193 |
-
$content_width = $content_width_save;
|
2194 |
-
if ( $sources_hack ) { //insert remaining mp4 sources manually
|
2195 |
-
$position = strpos($executed_shortcode, '<a href=');
|
2196 |
-
$executed_shortcode = substr_replace( $executed_shortcode, $sources_hack, $position, 0 );
|
2197 |
-
}
|
2198 |
-
if ( !empty($track_code) ) { //insert track code manually
|
2199 |
-
$position = strpos($executed_shortcode, '</video>');
|
2200 |
-
$executed_shortcode = substr_replace( $executed_shortcode, $track_code, $position, 0 );
|
2201 |
-
}
|
2202 |
-
$code .= $executed_shortcode;
|
2203 |
-
}
|
2204 |
-
|
2205 |
-
if ( $options['embed_method'] == "JW Player" ) {
|
2206 |
-
|
2207 |
-
if ( class_exists('JWP6_Shortcode') ) {
|
2208 |
-
|
2209 |
-
$x = 0;
|
2210 |
-
foreach ($video_formats as $format => $format_stats) {
|
2211 |
-
if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
|
2212 |
-
if ( $encodevideo_info[$format]["exists"] ) {
|
2213 |
-
if ( array_key_exists('height', $encodevideo_info[$format]) ) {
|
2214 |
-
$source_key = $encodevideo_info[$format]['height'];
|
2215 |
-
$format_stats['label'] = $encodevideo_info[$format]['height'].'p';
|
2216 |
-
}
|
2217 |
-
else { $source_key = $x; }
|
2218 |
-
|
2219 |
-
$sources[$source_key] = '{ file:\''.esc_attr($encodevideo_info[$format]["url"]).'\', label:\''.$format_stats['label'].'\'';
|
2220 |
-
if ( $format == "original" ) { $sources[$source_key] .= ', default:\'true\''; }
|
2221 |
-
$sources[$source_key] .= '}';
|
2222 |
-
$x++;
|
2223 |
-
}
|
2224 |
-
}
|
2225 |
-
krsort($sources);
|
2226 |
-
|
2227 |
-
$jw_tracks = array();
|
2228 |
-
if ( !empty($kgvid_postmeta['track'][0]['src']) ) {
|
2229 |
-
foreach ( $kgvid_postmeta['track'] as $track => $track_attribute ) {
|
2230 |
-
foreach ( $track_attribute as $attribute => $value ) {
|
2231 |
-
if ( empty($value) ) { $track_attribute[$attribute] = $query_atts['track_'.$attribute]; }
|
2232 |
-
}
|
2233 |
-
$default_text = '';
|
2234 |
-
if ( $track_attribute['default'] == 'default' ) { $default_text = ', \'default\': true'; }
|
2235 |
-
$jw_tracks[] = '{ file:\''.esc_attr($track_attribute['src']).'\', kind:\''.esc_attr($track_attribute['kind']).'\', label:\''.esc_attr($track_attribute['label']).'\''.$default_text.'}';
|
2236 |
-
}
|
2237 |
-
}
|
2238 |
-
|
2239 |
-
$jw_shortcode = "[jwplayer ";
|
2240 |
-
$jw_shortcode .= 'sources="'.implode(',', $sources).'" ';
|
2241 |
-
$jw_shortcode .= 'tracks="'.implode(',', $jw_tracks).'" ';
|
2242 |
-
if ( $query_atts["poster"] != '' ) { $jw_shortcode .= 'image="'.esc_attr($query_atts["poster"]).'" '; }
|
2243 |
-
if ( $query_atts["loop"] == 'true' ) { $jw_shortcode .= 'repeat="true" '; }
|
2244 |
-
if ( $query_atts["autoplay"] == 'true' ) { $jw_shortcode .= 'autostart="true" '; }
|
2245 |
-
if ( $query_atts["controlbar"] == 'none') { $jw_shortcode .= 'controls="false" '; }
|
2246 |
-
if ( $query_atts['title'] != "false" ) { $jw_shortcode .= ' title="'.$query_atts['title'].'" '; }
|
2247 |
-
if ( $options['jw_player_id'] != "") {
|
2248 |
-
$jw_player_config = get_option('jwp6_player_config_'.$options['jw_player_id']);
|
2249 |
-
if ( !empty($jw_player_config) ) { $jw_shortcode .= ' player="'.$options['jw_player_id'].'" '; }
|
2250 |
-
}
|
2251 |
-
|
2252 |
-
if ( !empty($query_atts['custom_atts']) && is_array($query_atts['custom_atts']) ) {
|
2253 |
-
foreach ( $query_atts['custom_atts'] as $jw_param => $jw_setting ) {
|
2254 |
-
$jw_shortcode .= ' '.$jw_param.'="'.$jw_setting.'" ';
|
2255 |
-
}
|
2256 |
-
}
|
2257 |
-
|
2258 |
-
$jw_shortcode = trim($jw_shortcode);
|
2259 |
-
$jw_shortcode .= ']';
|
2260 |
-
|
2261 |
-
$executed_shortcode = do_shortcode($jw_shortcode); //just in case the shortcode is active
|
2262 |
-
//this is JW Player's hack for executing without registering a WP shortcode
|
2263 |
-
$tag_regex = '/(.?)\[(jwplayer)\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s';
|
2264 |
-
$executed_shortcode = preg_replace_callback($tag_regex, array("JWP6_Shortcode", "tag_parser"), $jw_shortcode);
|
2265 |
-
|
2266 |
-
$code .= $executed_shortcode;
|
2267 |
-
|
2268 |
-
}// if class exists
|
2269 |
-
else { $options['embed_method'] = "Video.js"; }
|
2270 |
-
|
2271 |
-
}
|
2272 |
-
|
2273 |
-
if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
|
2274 |
-
|
2275 |
-
$enable_resolutions_plugin = false;
|
2276 |
-
$x = 20;
|
2277 |
-
$h264_resolutions = array();
|
2278 |
-
|
2279 |
-
foreach ($video_formats as $format => $format_stats) {
|
2280 |
-
if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
|
2281 |
-
if ( $encodevideo_info[$format]["exists"] ) {
|
2282 |
-
|
2283 |
-
if ( array_key_exists('height', $encodevideo_info[$format]) && $format_stats['type'] == 'h264' ) {
|
2284 |
-
$source_key = $encodevideo_info[$format]['height'];
|
2285 |
-
$format_stats['label'] = $encodevideo_info[$format]['height'].'p';
|
2286 |
-
}
|
2287 |
-
else { $source_key = $x; }
|
2288 |
-
|
2289 |
-
$sources[$source_key] = "\t\t\t\t\t".'<source src="'.esc_attr($encodevideo_info[$format]["url"]).'?id='.$kgvid_video_id.'" type="'.$format_stats["mime"].'"';
|
2290 |
-
if ( $format == 'vp9' ) { $sources[$source_key] .= ' codecs="vp9, vorbis"'; }
|
2291 |
-
if ( $format_stats['type'] == 'h264' ) {
|
2292 |
-
$sources[$source_key] .= ' data-res="'.$format_stats['label'].'"';
|
2293 |
-
if ( $mp4already ) { //there is more than one resolution available
|
2294 |
-
$enable_resolutions_plugin = true;
|
2295 |
-
}
|
2296 |
-
$mp4already = true;
|
2297 |
-
$h264_resolutions[] = $format_stats['label'];
|
2298 |
-
}
|
2299 |
-
else { $sources[$source_key] .= ' data-res="'.$format_stats['name'].'"'; }
|
2300 |
-
$sources[$source_key] .= '>'."\n";
|
2301 |
-
}
|
2302 |
-
$x--;
|
2303 |
-
}
|
2304 |
-
krsort($sources);
|
2305 |
-
natsort($h264_resolutions);
|
2306 |
-
|
2307 |
-
$code .= '<video id="video_'.$div_suffix.'" ';
|
2308 |
-
if ( $query_atts["loop"] == 'true') { $code .= 'loop '; }
|
2309 |
-
if ( $query_atts["autoplay"] == 'true') { $code .= 'autoplay '; }
|
2310 |
-
if ( $query_atts["controlbar"] != 'none') { $code .= 'controls '; }
|
2311 |
-
$code .= 'preload="'.$options['preload'].'" ';
|
2312 |
-
if ( $query_atts["poster"] != '' ) { $code .= 'poster="'.esc_attr($query_atts["poster"]).'" '; }
|
2313 |
-
$code .= 'width="'.$query_atts["width"].'" height="'.esc_attr($query_atts["height"]).'"';
|
2314 |
-
$locale = get_locale();
|
2315 |
-
if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
|
2316 |
-
if ( is_array($atts) && array_key_exists('skin', $atts) ) {
|
2317 |
-
$options['js_skin'] = $atts['skin']; //allows user to set skin for individual videos using the skin="" attribute
|
2318 |
-
}
|
2319 |
-
$code .= ' class="fitvidsignore '.esc_attr('video-js '.$options['js_skin']).'" data-setup=\'{ ';
|
2320 |
-
if ( $options['nativecontrolsfortouch'] == "on" ) { $code .= '"nativeControlsForTouch": true, '; }
|
2321 |
-
$code .= '"language": "'.substr($locale, 0, 2).'"';
|
2322 |
-
if ( $enable_resolutions_plugin ) { $code .= ', "plugins" : { "resolutionSelector" : { "force_types" : ["video/mp4"]';
|
2323 |
-
if ( $query_atts["auto_res"] == "highest" ) { $code .= ', "default_res": "'.end($h264_resolutions).'"'; }
|
2324 |
-
if ( $query_atts["auto_res"] == "lowest" ) { $code .= ', "default_res": "'.reset($h264_resolutions).'"'; }
|
2325 |
-
$code .= ' } }';
|
2326 |
-
}
|
2327 |
-
$code .= ' }\'';
|
2328 |
-
$code .= ">\n";
|
2329 |
-
|
2330 |
-
$code .= implode("", $sources); //add the <source> tags created earlier
|
2331 |
-
$code .= $track_code; //if there's a text track
|
2332 |
-
$code .= "\t\t\t\t</video>\n";
|
2333 |
-
|
2334 |
-
}
|
2335 |
-
$code .= "\t\t\t</div>\n";
|
2336 |
-
$show_views = false;
|
2337 |
-
if ( !empty($id) || !empty($query_atts['caption']) || $query_atts['downloadlink'] == "true" || $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { //generate content below the video
|
2338 |
-
if ( is_array($kgvid_postmeta) && array_key_exists('starts', $kgvid_postmeta) ) { $view_count = number_format(intval($kgvid_postmeta['starts'])); }
|
2339 |
-
else { $view_count = "0"; }
|
2340 |
-
if ( $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { $view_count = "XX"; }
|
2341 |
-
if ( $query_atts['view_count'] == "true" ) { $show_views = true; }
|
2342 |
-
if ( !empty($query_atts['caption']) || $show_views || $query_atts['downloadlink'] == "true" ) {
|
2343 |
-
$code .= "\t\t\t".'<div class="kgvid_below_video" id="video_'.$div_suffix.'_below">';
|
2344 |
-
if ( $show_views ) { $code .= '<div class="kgvid-viewcount" id="video_'.$div_suffix.'_viewcount">'.sprintf( _n( '%s view', '%s views', intval(str_replace(',', '', $view_count)) , 'video-embed-thumbnail-generator'), $view_count ).'</div>'; }
|
2345 |
-
if ( !empty($query_atts['caption']) || $query_atts['downloadlink'] == "true" ) {
|
2346 |
-
$code .= '<div class="kgvid-caption" id="video_'.$div_suffix.'_caption">'.$query_atts['caption'];
|
2347 |
-
if ( $query_atts['downloadlink'] == "true" ) {
|
2348 |
-
if ( !empty($query_atts['caption']) ) { $code .= '<br>'; }
|
2349 |
-
$forceable = false;
|
2350 |
-
if ( !empty($id) && $options['click_download'] == 'on' ) {
|
2351 |
-
$filepath = get_attached_file($id);
|
2352 |
-
if ( file_exists($filepath) ) {
|
2353 |
-
$forceable = true;
|
2354 |
-
$code .= '<a href="'.site_url('/').'?attachment_id='.$id.'&kgvid_video_embed[download]=true">'.__('Click on this link to download', 'video-embed-thumbnail-generator').'</a>';
|
2355 |
-
}
|
2356 |
-
}
|
2357 |
-
if ( !$forceable ) { $code .= '<a href="'.$content.'">'.__('Right-click or ctrl-click on this link to download', 'video-embed-thumbnail-generator').'</a>'; }
|
2358 |
-
}
|
2359 |
-
$code .= '</div>';
|
2360 |
-
}
|
2361 |
-
$code .= '</div>';
|
2362 |
-
}
|
2363 |
-
}
|
2364 |
-
|
2365 |
-
if ( $kgvid_meta == true ) { //generate content overlaid on video
|
2366 |
-
$code .= "\t\t\t<div style=\"display:none;\" id=\"video_".$div_suffix."_meta\" class=\"kgvid_video_meta kgvid_video_meta_hover\">\n";
|
2367 |
-
if ( $query_atts['embedcode'] != "false" ) {
|
2368 |
-
if ( $query_atts['embedcode'] == "true" ) { $iframeurl = site_url('/')."?attachment_id=".$id."&kgvid_video_embed[enable]=true"; }
|
2369 |
-
else { $iframeurl = $query_atts['embedcode']; }
|
2370 |
-
$iframecode = "<iframe allowfullscreen src='".$iframeurl."' frameborder='0' scrolling='no' width='".esc_attr($query_atts['width'])."' height='".esc_attr($query_atts["height"])."'></iframe>";
|
2371 |
-
$code .= "\t\t\t\t<div id=\"video_".$div_suffix."_embed\" class=\"kgvid_share\"><span>"._x('Embed:', 'precedes code for embedding video', 'video-embed-thumbnail-generator')." </span><input type=\"text\" value=\"".esc_attr($iframecode)."\" onClick=\"this.select();\"></div>\n";
|
2372 |
-
}
|
2373 |
-
if ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" ) {
|
2374 |
-
$code .= "\t\t\t\t<div id='video_".$div_suffix."_title' class='kgvid_title'>".$query_atts['title']."</div>\n";
|
2375 |
-
}
|
2376 |
-
$code .= "\t\t\t</div>\n";
|
2377 |
-
}
|
2378 |
-
|
2379 |
-
if ( !empty($query_atts["watermark"]) && $query_atts["watermark"] != "false" ) {
|
2380 |
-
$watermark_id = kgvid_url_to_id($query_atts["watermark"]);
|
2381 |
-
if ( $watermark_id ) { $query_atts["watermark"] = wp_get_attachment_url($watermark_id); }
|
2382 |
-
$code .= "<div style=\"display:none;\" id='video_".$div_suffix."_watermark' class='kgvid_watermark'>";
|
2383 |
-
if ( !empty($query_atts["watermark_url"]) && $query_atts["watermark_link_to"] != 'custom' ) { $query_atts["watermark_link_to"] = 'custom'; }
|
2384 |
-
if ( $query_atts['watermark_link_to'] != 'false' && $query_atts["watermark_url"] != 'false' ) {
|
2385 |
-
$watermark_link = true;
|
2386 |
-
switch ( $query_atts['watermark_link_to'] ) {
|
2387 |
-
|
2388 |
-
case 'home':
|
2389 |
-
$watermark_href = get_home_url();
|
2390 |
-
break;
|
2391 |
-
|
2392 |
-
case 'parent':
|
2393 |
-
if ( !empty($id) && is_object($attachment_info) && array_key_exists('post_parent', $attachment_info) && !empty($attachment_info->post_parent) ) {
|
2394 |
-
$watermark_href = get_permalink($attachment_info->post_parent);
|
2395 |
-
}
|
2396 |
-
else { $watermark_href = get_home_url(); }
|
2397 |
-
break;
|
2398 |
-
|
2399 |
-
case 'attachment':
|
2400 |
-
if ( !empty($id) ) {
|
2401 |
-
$watermark_href = get_permalink($id);
|
2402 |
-
}
|
2403 |
-
else { $watermark_href = get_home_url(); }
|
2404 |
-
break;
|
2405 |
-
|
2406 |
-
case 'download':
|
2407 |
-
if ( !empty($id) ) {
|
2408 |
-
$watermark_href = site_url('/').'?attachment_id='.$id.'&kgvid_video_embed[download]=true';
|
2409 |
-
}
|
2410 |
-
else { $watermark_href = $content; }
|
2411 |
-
break;
|
2412 |
-
|
2413 |
-
case 'custom':
|
2414 |
-
$watermark_href = $query_atts["watermark_url"];
|
2415 |
-
break;
|
2416 |
-
|
2417 |
-
}
|
2418 |
-
$code .= "<a target='_parent' href='".$watermark_href."'>";
|
2419 |
-
}
|
2420 |
-
else { $watermark_link = false; }
|
2421 |
-
$code .= "<img src='".esc_attr($query_atts["watermark"])."' alt='watermark'>";
|
2422 |
-
if ( $watermark_link ) { $code .= "</a>"; }
|
2423 |
-
$code .= "</div>";
|
2424 |
-
} //generate watermark
|
2425 |
-
$code .= "\t\t</div>"; //end kgvid_XXXX_wrapper div
|
2426 |
-
|
2427 |
-
$kgvid_video_id++;
|
2428 |
-
|
2429 |
-
} //end id_array loop
|
2430 |
|
2431 |
} //if not gallery
|
2432 |
|
3 |
Plugin Name: Video Embed & Thumbnail Generator
|
4 |
Plugin URI: http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/
|
5 |
Description: Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG or LIBAV for encoding.
|
6 |
+
Version: 4.5.5
|
7 |
Author: Kyle Gilman
|
8 |
Author URI: http://www.kylegilman.net/
|
9 |
Text Domain: video-embed-thumbnail-generator
|
59 |
$edit_others_capable = kgvid_check_if_capable('edit_others_posts');
|
60 |
|
61 |
$options = array(
|
62 |
+
"version" => 4.505,
|
63 |
"embed_method" => "Video.js",
|
64 |
"jw_player_id" => "",
|
65 |
"template" => false,
|
761 |
|
762 |
}
|
763 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
764 |
function kgvid_get_attachment_medium_url( $id )
|
765 |
{
|
766 |
$medium_array = image_downsize( $id, 'medium' );
|
1728 |
|
1729 |
$dimensions = kgvid_set_video_dimensions($attachment->ID, true);
|
1730 |
|
1731 |
+
$atts = array(
|
1732 |
+
'autoplay' => 'true',
|
1733 |
+
'id' => $attachment->ID,
|
1734 |
+
'width' => $dimensions['width'],
|
1735 |
+
'height' => $dimensions['height']
|
1736 |
+
);
|
1737 |
+
if ( $kgvid_postmeta['downloadlink'] == "on" ) { $atts['downloadlink'] = "true"; }
|
1738 |
+
|
1739 |
+
$popup_atts = kgvid_shortcode_atts($atts);
|
1740 |
+
if ( in_the_loop() ) { $post_ID = get_the_ID(); }
|
1741 |
+
else { $post_ID = 1; }
|
1742 |
+
$content = '';
|
1743 |
+
$popup_code = kgvid_single_video_code($popup_atts, $atts, $content, $post_ID);
|
1744 |
|
|
|
1745 |
preg_match('/data-kgvid_video_vars=.*? /', $popup_code, $video_vars);
|
1746 |
$popup_code = str_replace(array("\r", "\n", "\t", $video_vars[0]), "", $popup_code);
|
|
|
1747 |
|
1748 |
if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
|
1749 |
if ( is_array($query_atts) && array_key_exists('skin', $query_atts) ) {
|
1779 |
} //if there are attachments
|
1780 |
|
1781 |
return $code;
|
1782 |
+
|
1783 |
}
|
1784 |
|
1785 |
function kgvid_switch_gallery_page() {
|
1798 |
add_action( 'wp_ajax_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for logged in users
|
1799 |
add_action( 'wp_ajax_nopriv_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for not logged in users
|
1800 |
|
1801 |
+
function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
|
1802 |
+
|
1803 |
+
global $content_width;
|
1804 |
+
$content_width_save = $content_width;
|
1805 |
+
|
1806 |
+
global $kgvid_video_id;
|
1807 |
+
if ( !$kgvid_video_id ) { $kgvid_video_id = 0; }
|
1808 |
+
|
1809 |
+
$options = kgvid_get_options();
|
1810 |
+
$code = "";
|
1811 |
+
$id_array = array();
|
1812 |
+
$video_formats = kgvid_video_formats();
|
1813 |
+
|
1814 |
+
if ( empty($content) ) {
|
1815 |
+
if ( !empty($query_atts["id"]) ) {
|
1816 |
+
$id_array[0] = $query_atts["id"];
|
1817 |
+
}
|
1818 |
+
elseif ( $post_ID != 1 ) {
|
1819 |
+
$args = array(
|
1820 |
+
'numberposts' => $query_atts['videos'],
|
1821 |
+
'post_mime_type' => 'video',
|
1822 |
+
'post_parent' => $post_ID,
|
1823 |
+
'post_status' => null,
|
1824 |
+
'post_type' => 'attachment',
|
1825 |
+
'orderby' => $query_atts['orderby'],
|
1826 |
+
'order' => $query_atts['order']
|
1827 |
+
);
|
1828 |
+
$video_attachments = get_posts($args);
|
1829 |
+
if ( $video_attachments ) {
|
1830 |
+
foreach ( $video_attachments as $video ) {
|
1831 |
+
$id_array[] = $video->ID;
|
1832 |
+
}
|
1833 |
+
}
|
1834 |
+
else { return; } //if there are no video children of the current post
|
1835 |
+
}
|
1836 |
+
else { return; } //if there's no post ID and no $content
|
1837 |
+
}
|
1838 |
+
else { // $content is a URL
|
1839 |
+
// workaround for relative video URL (contributed by Lee Fernandes)
|
1840 |
+
if(substr($content, 0, 1) == '/') $content = get_bloginfo('url').$content;
|
1841 |
+
$content = trim($content);
|
1842 |
+
$id_array[0] = kgvid_url_to_id($content);
|
1843 |
+
}
|
1844 |
+
|
1845 |
+
$original_content = $content;
|
1846 |
+
|
1847 |
+
foreach ( $id_array as $id ) { //loop through videos
|
1848 |
+
|
1849 |
+
$div_suffix = 'kgvid_'.strval($kgvid_video_id);
|
1850 |
+
|
1851 |
+
$query_atts = kgvid_shortcode_atts($atts); //reset values so they can be different with multiple videos
|
1852 |
+
$content = $original_content;
|
1853 |
+
$sources = array();
|
1854 |
+
$mp4already = false;
|
1855 |
+
$dimensions = array();
|
1856 |
+
|
1857 |
+
$compatible = array("flv", "f4v", "mp4", "mov", "m4v", "ogv", "ogg", "webm");
|
1858 |
+
$h264compatible = array("mp4", "mov", "m4v");
|
1859 |
+
|
1860 |
+
if ( !empty($id) ) { //if the video is an attachment in the WordPress db
|
1861 |
+
|
1862 |
+
$attachment_url = wp_get_attachment_url($id);
|
1863 |
+
if ( $attachment_url == false ) { echo "Invalid video ID"; continue; }
|
1864 |
+
$exempt_cdns = array('amazonaws.com', 'rackspace.com', 'netdna-cdn.com', 'nexcess-cdn.net', 'limelight.com'); //don't replace URLs that point to CDNs
|
1865 |
+
$exempt_url = false;
|
1866 |
+
foreach ( $exempt_cdns as $exempt_cdn ) {
|
1867 |
+
if ( strpos($content, $exempt_cdn) !== false ) {
|
1868 |
+
$exempt_url = true;
|
1869 |
+
}
|
1870 |
+
}
|
1871 |
+
if ( !$exempt_url ) { $content = $attachment_url; }
|
1872 |
+
|
1873 |
+
$encodevideo_info = kgvid_encodevideo_info($content, $id);
|
1874 |
+
$attachment_info = get_post( $id );
|
1875 |
+
$kgvid_postmeta = kgvid_get_attachment_meta($id);
|
1876 |
+
|
1877 |
+
$dimensions = kgvid_set_video_dimensions($id);
|
1878 |
+
|
1879 |
+
if ( empty($atts['width']) ) {
|
1880 |
+
$query_atts['width'] = $dimensions['width'];
|
1881 |
+
$query_atts['height'] = $dimensions['height'];
|
1882 |
+
}
|
1883 |
+
|
1884 |
+
$poster_id = get_post_meta($id, '_kgflashmediaplayer-poster-id', true);
|
1885 |
+
if ( !empty($poster_id) ) {
|
1886 |
+
$poster_image_src = wp_get_attachment_image_src($poster_id, 'full');
|
1887 |
+
$query_atts['poster'] = $poster_image_src[0];
|
1888 |
+
if ( strpos($query_atts['width'], '%') === false && intval($query_atts['width']) <= get_option('medium_size_h') ) {
|
1889 |
+
$query_atts['poster'] = kgvid_get_attachment_medium_url($poster_id);
|
1890 |
+
}
|
1891 |
+
}
|
1892 |
+
|
1893 |
+
if ( $query_atts['title'] == "true" ) {
|
1894 |
+
$query_atts['title'] = $attachment_info->post_title;
|
1895 |
+
$stats_title = $query_atts['title'];
|
1896 |
+
}
|
1897 |
+
else { $stats_title = $attachment_info->post_title; }
|
1898 |
+
if ( empty($query_atts['caption']) ) { $query_atts['caption'] = $attachment_info->post_excerpt; }
|
1899 |
+
if ( empty($query_atts['description']) ) { $query_atts['description'] = $attachment_info->post_content; }
|
1900 |
+
|
1901 |
+
$countable = true;
|
1902 |
+
}
|
1903 |
+
else { //video is not in the database
|
1904 |
+
|
1905 |
+
$encodevideo_info = kgvid_encodevideo_info($content, $post_ID); //send the id of the post the video's embedded in
|
1906 |
+
if ( $query_atts['title'] == "true" ) {
|
1907 |
+
$query_atts['title'] = "false";
|
1908 |
+
}
|
1909 |
+
$stats_title = basename($content);
|
1910 |
+
if ( $query_atts['embedcode'] == "true" ) {
|
1911 |
+
$query_atts['embedcode'] = "false"; //can't use embed code with videos that are not in the database
|
1912 |
+
}
|
1913 |
+
|
1914 |
+
$countable = false;
|
1915 |
+
}
|
1916 |
+
|
1917 |
+
$mime_type_check = wp_check_filetype($content);
|
1918 |
+
if ( in_array($mime_type_check['ext'], $h264compatible) ) {
|
1919 |
+
$format_type = "h264";
|
1920 |
+
$mime_type = "video/mp4";
|
1921 |
+
}
|
1922 |
+
else {
|
1923 |
+
$format_type = $mime_type_check['ext'];
|
1924 |
+
$mime_type = $mime_type_check['type'];
|
1925 |
+
}
|
1926 |
+
|
1927 |
+
unset($video_formats['fullres']);
|
1928 |
+
$video_formats = array('original' => array( "type" => $format_type, "mime" => $mime_type, "name" => "Full", "label" => "Full" ) ) + $video_formats;
|
1929 |
+
|
1930 |
+
if ( in_array($mime_type_check['ext'], $compatible) ) {
|
1931 |
+
|
1932 |
+
$encodevideo_info["original"]["exists"] = true;
|
1933 |
+
$encodevideo_info["original"]["url"] = $content;
|
1934 |
+
|
1935 |
+
if ( is_array($dimensions) && array_key_exists('actualheight', $dimensions) ) {
|
1936 |
+
$video_formats['original']['label'] = $dimensions['actualheight'].'p';
|
1937 |
+
$video_formats['original']['height'] = $dimensions['actualheight'];
|
1938 |
+
$encodevideo_info["original"]["height"] = $dimensions['actualheight'];
|
1939 |
+
}
|
1940 |
+
|
1941 |
+
}
|
1942 |
+
else { $encodevideo_info["original"]["exists"] = false; }
|
1943 |
+
|
1944 |
+
if($query_atts["endofvideooverlaysame"] == "true") { $query_atts["endofvideooverlay"] = $query_atts["poster"]; }
|
1945 |
+
|
1946 |
+
if ( $options['embed_method'] == "Strobe Media Playback" ) {
|
1947 |
+
|
1948 |
+
$flash_settings = kgvid_generate_flashvars($content, $query_atts, $encodevideo_info, $div_suffix);
|
1949 |
+
|
1950 |
+
} //if Strobe Media Playback
|
1951 |
+
|
1952 |
+
if ( $query_atts['inline'] == "true" ) {
|
1953 |
+
$aligncode = ' kgvid_wrapper_inline';
|
1954 |
+
if ( $query_atts['align'] == "left" ) { $aligncode .= ' kgvid_wrapper_inline_left'; }
|
1955 |
+
if ( $query_atts['align'] == "center" ) { $aligncode .= ' kgvid_wrapper_auto_left kgvid_wrapper_auto_right'; }
|
1956 |
+
if ( $query_atts['align'] == "right" ) { $aligncode .= ' kgvid_wrapper_inline_right'; }
|
1957 |
+
}
|
1958 |
+
else {
|
1959 |
+
if ( $query_atts['align'] == "left" ) { $aligncode = ''; }
|
1960 |
+
if ( $query_atts['align'] == "center" ) { $aligncode = ' kgvid_wrapper_auto_left kgvid_wrapper_auto_right'; }
|
1961 |
+
if ( $query_atts['align'] == "right" ) { $aligncode = ' kgvid_wrapper_auto_left'; }
|
1962 |
+
}
|
1963 |
+
|
1964 |
+
if ( ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" )
|
1965 |
+
|| $query_atts['embedcode'] != "false" ) { //generate content overlaid on video
|
1966 |
+
$kgvid_meta = true;
|
1967 |
+
}
|
1968 |
+
else { $kgvid_meta = false; }
|
1969 |
+
|
1970 |
+
$video_variables = array(
|
1971 |
+
'id' => $div_suffix,
|
1972 |
+
'attachment_id' => $id,
|
1973 |
+
'player_type' => str_replace(' ', '', $options['embed_method']),
|
1974 |
+
'width' => $query_atts['width'],
|
1975 |
+
'height' => $query_atts['height'],
|
1976 |
+
'fullwidth' => $query_atts['fullwidth'],
|
1977 |
+
'countable' => $countable,
|
1978 |
+
'autoplay' => $query_atts['autoplay'],
|
1979 |
+
'set_volume' => $query_atts['volume'],
|
1980 |
+
'mute' => $query_atts['mute'],
|
1981 |
+
'meta' => $kgvid_meta,
|
1982 |
+
'endofvideooverlay' => $query_atts['endofvideooverlay'],
|
1983 |
+
'resize' => $query_atts['resize'],
|
1984 |
+
'auto_res' => $query_atts['auto_res'],
|
1985 |
+
'right_click' => $query_atts['right_click']
|
1986 |
+
);
|
1987 |
+
|
1988 |
+
if ( $options['embed_method'] == "Strobe Media Playback" && $flash_settings['flash_source_found'] ) {
|
1989 |
+
|
1990 |
+
$video_variables['swfurl'] = plugins_url('', __FILE__)."/flash/StrobeMediaPlayback.swf";
|
1991 |
+
$video_variables['expressinstallswfurl'] = plugins_url("", __FILE__)."/flash/expressInstall.swf";
|
1992 |
+
$video_variables['flashvars'] = $flash_settings['flashvars'];
|
1993 |
+
$video_variables['params'] = $flash_settings['params'];
|
1994 |
+
|
1995 |
+
} //if Strobe Media
|
1996 |
+
|
1997 |
+
$code .= '<div id="kgvid_'.$div_suffix.'_wrapper" class="kgvid_wrapper'.$aligncode.'">'."\n\t\t\t";
|
1998 |
+
$code .= '<div id="video_'.$div_suffix.'_div" class="fitvidsignore kgvid_videodiv" data-id="'.$div_suffix.'" data-kgvid_video_vars="'.esc_attr(json_encode($video_variables)).'" itemprop="video" itemscope itemtype="https://schema.org/VideoObject">';
|
1999 |
+
if ( $query_atts["poster"] != '' ) { $code .= '<meta itemprop="thumbnailUrl" content="'.esc_attr($query_atts["poster"]).'" />'; }
|
2000 |
+
if ( !empty($id) ) { $schema_embedURL = site_url('/')."?attachment_id=".$id."&kgvid_video_embed[enable]=true"; }
|
2001 |
+
else { $schema_embedURL = $content; }
|
2002 |
+
$code .= '<meta itemprop="embedUrl" content="'.esc_attr($schema_embedURL).'" />';
|
2003 |
+
$code .= '<meta itemprop="contentUrl" content="'.$content.'" />';
|
2004 |
+
|
2005 |
+
if ( !empty($query_atts['title']) ) { $code .= '<meta itemprop="name" content="'.esc_attr($query_atts['title']).'" />'; }
|
2006 |
+
|
2007 |
+
if ( !empty($query_atts['description']) ) { $description = $query_atts['description']; }
|
2008 |
+
elseif ( !empty($query_atts['caption']) ) { $description = $query_atts['caption']; }
|
2009 |
+
elseif ( in_the_loop() && !is_attachment() ) {
|
2010 |
+
global $post;
|
2011 |
+
if ( !empty($post->post_excerpt) ) {
|
2012 |
+
$description = $post->post_excerpt;
|
2013 |
+
}
|
2014 |
+
else {
|
2015 |
+
$description = esc_attr(wp_trim_words(strip_tags(strip_shortcodes($post->post_content))));
|
2016 |
+
}
|
2017 |
+
}
|
2018 |
+
if ( empty($description) ) { $description = __('Video', 'video-embed-thumbnail-generator'); }
|
2019 |
+
$code .= '<meta itemprop="description" content="'.esc_attr($description).'" />';
|
2020 |
+
|
2021 |
+
if ( !empty($id) ) { $upload_date = get_the_date('c', $id); }
|
2022 |
+
elseif ( $post_ID != 1 ) { $upload_date = get_the_date('c', $post_ID); }
|
2023 |
+
else { $upload_date = current_time('c'); }
|
2024 |
+
$code .= '<meta itemprop="uploadDate" content="'.esc_attr($upload_date).'" />';
|
2025 |
+
|
2026 |
+
$track_keys = array('kind', 'srclang', 'src', 'label', 'default');
|
2027 |
+
if ( !isset($kgvid_postmeta) || ( is_array($kgvid_postmeta) && !is_array($kgvid_postmeta['track']) ) ) {
|
2028 |
+
$kgvid_postmeta['track'] = array();
|
2029 |
+
$kgvid_postmeta['track'][0] = array ( 'kind' => '', 'srclang' => '', 'src' => '', 'label' => '', 'default' => '');
|
2030 |
+
}
|
2031 |
+
foreach ( $track_keys as $key ) {
|
2032 |
+
if ( empty($kgvid_postmeta['track'][0][$key]) ) { $kgvid_postmeta['track'][0][$key] = $query_atts['track_'.$key]; }
|
2033 |
+
}
|
2034 |
+
|
2035 |
+
$track_code = "";
|
2036 |
+
if ( !empty($kgvid_postmeta['track'][0]['src']) ) {
|
2037 |
+
foreach ( $kgvid_postmeta['track'] as $track => $track_attribute ) {
|
2038 |
+
foreach ( $track_attribute as $attribute => $value ) {
|
2039 |
+
if ( empty($value) ) { $track_attribute[$attribute] = $query_atts['track_'.$attribute]; }
|
2040 |
+
}
|
2041 |
+
if ( $options['embed_method'] == "WordPress Default" && $track_attribute['kind'] == 'captions' ) { $track_attribute['kind'] = 'subtitles'; }
|
2042 |
+
$track_code .= "\t\t\t\t\t<track id='".$div_suffix."_text_".$track."' kind='".esc_attr($track_attribute['kind'])."' src='".esc_attr($track_attribute['src'])."' srclang='".esc_attr($track_attribute['srclang'])."' label='".esc_attr($track_attribute['label'])."' ".esc_attr($track_attribute['default'])." />\n";
|
2043 |
+
}
|
2044 |
+
}
|
2045 |
+
|
2046 |
+
if ( $options['embed_method'] == "WordPress Default" ) {
|
2047 |
+
$sources_hack = "";
|
2048 |
+
$attr = array();
|
2049 |
+
foreach ($video_formats as $format => $format_stats) {
|
2050 |
+
if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
|
2051 |
+
if ( $encodevideo_info[$format]["exists"] ) {
|
2052 |
+
if ( $format_stats['type'] != "h264" || !$mp4already ) {
|
2053 |
+
$shortcode_type = wp_check_filetype( $encodevideo_info[$format]["url"], wp_get_mime_types() );
|
2054 |
+
$attr[$shortcode_type['ext']] = $encodevideo_info[$format]["url"];
|
2055 |
+
if ( $format_stats['type'] == "h264" ) { //WordPress built-in shortcode doesn't support multiple videos of the same type but we'll hack it in later
|
2056 |
+
$mp4already = true;
|
2057 |
+
}
|
2058 |
+
}
|
2059 |
+
else { $sources_hack .= '<source type="'.$format_stats['mime'].'" src="'.esc_attr($encodevideo_info[$format]["url"]).'" />'; }
|
2060 |
+
}
|
2061 |
+
}
|
2062 |
+
|
2063 |
+
if ( $query_atts["poster"] != '' ) { $attr['poster'] = esc_attr($query_atts["poster"]); }
|
2064 |
+
if ( $query_atts["loop"] == 'true') { $attr['loop'] = "true"; }
|
2065 |
+
if ( $query_atts["autoplay"] == 'true') { $attr['autoplay'] = "true"; }
|
2066 |
+
$attr['preload'] = $options['preload'];
|
2067 |
+
$attr['width'] = $query_atts['width'];
|
2068 |
+
$attr['height'] = $query_atts['height'];
|
2069 |
+
|
2070 |
+
$content_width = $query_atts['width'];
|
2071 |
+
if ( function_exists('wp_video_shortcode') ) { $executed_shortcode = wp_video_shortcode($attr); }
|
2072 |
+
else { $executed_shortcode = 'WordPress video shortcode function does not exist.'; }
|
2073 |
+
$content_width = $content_width_save;
|
2074 |
+
if ( $sources_hack ) { //insert remaining mp4 sources manually
|
2075 |
+
$position = strpos($executed_shortcode, '<a href=');
|
2076 |
+
$executed_shortcode = substr_replace( $executed_shortcode, $sources_hack, $position, 0 );
|
2077 |
+
}
|
2078 |
+
if ( !empty($track_code) ) { //insert track code manually
|
2079 |
+
$position = strpos($executed_shortcode, '</video>');
|
2080 |
+
$executed_shortcode = substr_replace( $executed_shortcode, $track_code, $position, 0 );
|
2081 |
+
}
|
2082 |
+
$code .= $executed_shortcode;
|
2083 |
+
}
|
2084 |
+
|
2085 |
+
if ( $options['embed_method'] == "JW Player" ) {
|
2086 |
+
|
2087 |
+
if ( class_exists('JWP6_Shortcode') ) {
|
2088 |
+
|
2089 |
+
$x = 0;
|
2090 |
+
foreach ($video_formats as $format => $format_stats) {
|
2091 |
+
if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
|
2092 |
+
if ( $encodevideo_info[$format]["exists"] ) {
|
2093 |
+
if ( array_key_exists('height', $encodevideo_info[$format]) ) {
|
2094 |
+
$source_key = $encodevideo_info[$format]['height'];
|
2095 |
+
$format_stats['label'] = $encodevideo_info[$format]['height'].'p';
|
2096 |
+
}
|
2097 |
+
else { $source_key = $x; }
|
2098 |
+
|
2099 |
+
$sources[$source_key] = '{ file:\''.esc_attr($encodevideo_info[$format]["url"]).'\', label:\''.$format_stats['label'].'\'';
|
2100 |
+
if ( $format == "original" ) { $sources[$source_key] .= ', default:\'true\''; }
|
2101 |
+
$sources[$source_key] .= '}';
|
2102 |
+
$x++;
|
2103 |
+
}
|
2104 |
+
}
|
2105 |
+
krsort($sources);
|
2106 |
+
|
2107 |
+
$jw_tracks = array();
|
2108 |
+
if ( !empty($kgvid_postmeta['track'][0]['src']) ) {
|
2109 |
+
foreach ( $kgvid_postmeta['track'] as $track => $track_attribute ) {
|
2110 |
+
foreach ( $track_attribute as $attribute => $value ) {
|
2111 |
+
if ( empty($value) ) { $track_attribute[$attribute] = $query_atts['track_'.$attribute]; }
|
2112 |
+
}
|
2113 |
+
$default_text = '';
|
2114 |
+
if ( $track_attribute['default'] == 'default' ) { $default_text = ', \'default\': true'; }
|
2115 |
+
$jw_tracks[] = '{ file:\''.esc_attr($track_attribute['src']).'\', kind:\''.esc_attr($track_attribute['kind']).'\', label:\''.esc_attr($track_attribute['label']).'\''.$default_text.'}';
|
2116 |
+
}
|
2117 |
+
}
|
2118 |
+
|
2119 |
+
$jw_shortcode = "[jwplayer ";
|
2120 |
+
$jw_shortcode .= 'sources="'.implode(',', $sources).'" ';
|
2121 |
+
$jw_shortcode .= 'tracks="'.implode(',', $jw_tracks).'" ';
|
2122 |
+
if ( $query_atts["poster"] != '' ) { $jw_shortcode .= 'image="'.esc_attr($query_atts["poster"]).'" '; }
|
2123 |
+
if ( $query_atts["loop"] == 'true' ) { $jw_shortcode .= 'repeat="true" '; }
|
2124 |
+
if ( $query_atts["autoplay"] == 'true' ) { $jw_shortcode .= 'autostart="true" '; }
|
2125 |
+
if ( $query_atts["controlbar"] == 'none') { $jw_shortcode .= 'controls="false" '; }
|
2126 |
+
if ( $query_atts['title'] != "false" ) { $jw_shortcode .= ' title="'.$query_atts['title'].'" '; }
|
2127 |
+
if ( $options['jw_player_id'] != "") {
|
2128 |
+
$jw_player_config = get_option('jwp6_player_config_'.$options['jw_player_id']);
|
2129 |
+
if ( !empty($jw_player_config) ) { $jw_shortcode .= ' player="'.$options['jw_player_id'].'" '; }
|
2130 |
+
}
|
2131 |
+
|
2132 |
+
if ( !empty($query_atts['custom_atts']) && is_array($query_atts['custom_atts']) ) {
|
2133 |
+
foreach ( $query_atts['custom_atts'] as $jw_param => $jw_setting ) {
|
2134 |
+
$jw_shortcode .= ' '.$jw_param.'="'.$jw_setting.'" ';
|
2135 |
+
}
|
2136 |
+
}
|
2137 |
+
|
2138 |
+
$jw_shortcode = trim($jw_shortcode);
|
2139 |
+
$jw_shortcode .= ']';
|
2140 |
+
|
2141 |
+
//this is JW Player's hack for executing without registering a WP shortcode
|
2142 |
+
$tag_regex = '/(.?)\[(jwplayer)\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s';
|
2143 |
+
$executed_shortcode = preg_replace_callback($tag_regex, array("JWP6_Shortcode", "tag_parser"), $jw_shortcode);
|
2144 |
+
|
2145 |
+
$code .= $executed_shortcode;
|
2146 |
+
|
2147 |
+
}// if class exists
|
2148 |
+
else { $options['embed_method'] = "Video.js"; }
|
2149 |
+
|
2150 |
+
}
|
2151 |
+
|
2152 |
+
if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
|
2153 |
+
|
2154 |
+
$enable_resolutions_plugin = false;
|
2155 |
+
$x = 20;
|
2156 |
+
$h264_resolutions = array();
|
2157 |
+
|
2158 |
+
foreach ($video_formats as $format => $format_stats) {
|
2159 |
+
if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
|
2160 |
+
if ( $encodevideo_info[$format]["exists"] ) {
|
2161 |
+
|
2162 |
+
if ( array_key_exists('height', $encodevideo_info[$format]) && $format_stats['type'] == 'h264' ) {
|
2163 |
+
$source_key = $encodevideo_info[$format]['height'];
|
2164 |
+
$format_stats['label'] = $encodevideo_info[$format]['height'].'p';
|
2165 |
+
}
|
2166 |
+
else { $source_key = $x; }
|
2167 |
+
|
2168 |
+
$sources[$source_key] = "\t\t\t\t\t".'<source src="'.esc_attr($encodevideo_info[$format]["url"]).'?id='.$kgvid_video_id.'" type="'.$format_stats["mime"].'"';
|
2169 |
+
if ( $format == 'vp9' ) { $sources[$source_key] .= ' codecs="vp9, vorbis"'; }
|
2170 |
+
if ( $format_stats['type'] == 'h264' ) {
|
2171 |
+
$sources[$source_key] .= ' data-res="'.$format_stats['label'].'"';
|
2172 |
+
if ( $mp4already ) { //there is more than one resolution available
|
2173 |
+
$enable_resolutions_plugin = true;
|
2174 |
+
}
|
2175 |
+
$mp4already = true;
|
2176 |
+
$h264_resolutions[] = $format_stats['label'];
|
2177 |
+
}
|
2178 |
+
else { $sources[$source_key] .= ' data-res="'.$format_stats['name'].'"'; }
|
2179 |
+
$sources[$source_key] .= '>'."\n";
|
2180 |
+
}
|
2181 |
+
$x--;
|
2182 |
+
}
|
2183 |
+
krsort($sources);
|
2184 |
+
natsort($h264_resolutions);
|
2185 |
+
|
2186 |
+
$code .= '<video id="video_'.$div_suffix.'" ';
|
2187 |
+
if ( $query_atts["loop"] == 'true') { $code .= 'loop '; }
|
2188 |
+
if ( $query_atts["autoplay"] == 'true') { $code .= 'autoplay '; }
|
2189 |
+
if ( $query_atts["controlbar"] != 'none') { $code .= 'controls '; }
|
2190 |
+
$code .= 'preload="'.$options['preload'].'" ';
|
2191 |
+
if ( $query_atts["poster"] != '' ) { $code .= 'poster="'.esc_attr($query_atts["poster"]).'" '; }
|
2192 |
+
$code .= 'width="'.$query_atts["width"].'" height="'.esc_attr($query_atts["height"]).'"';
|
2193 |
+
$locale = get_locale();
|
2194 |
+
if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
|
2195 |
+
if ( is_array($atts) && array_key_exists('skin', $atts) ) {
|
2196 |
+
$options['js_skin'] = $atts['skin']; //allows user to set skin for individual videos using the skin="" attribute
|
2197 |
+
}
|
2198 |
+
$code .= ' class="fitvidsignore '.esc_attr('video-js '.$options['js_skin']).'" data-setup=\'{ ';
|
2199 |
+
if ( $options['nativecontrolsfortouch'] == "on" ) { $code .= '"nativeControlsForTouch": true, '; }
|
2200 |
+
$code .= '"language": "'.substr($locale, 0, 2).'"';
|
2201 |
+
if ( $enable_resolutions_plugin ) { $code .= ', "plugins" : { "resolutionSelector" : { "force_types" : ["video/mp4"]';
|
2202 |
+
if ( $query_atts["auto_res"] == "highest" ) { $code .= ', "default_res": "'.end($h264_resolutions).'"'; }
|
2203 |
+
if ( $query_atts["auto_res"] == "lowest" ) { $code .= ', "default_res": "'.reset($h264_resolutions).'"'; }
|
2204 |
+
$code .= ' } }';
|
2205 |
+
}
|
2206 |
+
$code .= ' }\'';
|
2207 |
+
$code .= ">\n";
|
2208 |
+
|
2209 |
+
$code .= implode("", $sources); //add the <source> tags created earlier
|
2210 |
+
$code .= $track_code; //if there's a text track
|
2211 |
+
$code .= "\t\t\t\t</video>\n";
|
2212 |
+
|
2213 |
+
}
|
2214 |
+
$code .= "\t\t\t</div>\n";
|
2215 |
+
$show_views = false;
|
2216 |
+
if ( !empty($id) || !empty($query_atts['caption']) || $query_atts['downloadlink'] == "true" || $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { //generate content below the video
|
2217 |
+
if ( is_array($kgvid_postmeta) && array_key_exists('starts', $kgvid_postmeta) ) { $view_count = number_format(intval($kgvid_postmeta['starts'])); }
|
2218 |
+
else { $view_count = "0"; }
|
2219 |
+
if ( $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { $view_count = "XX"; }
|
2220 |
+
if ( $query_atts['view_count'] == "true" ) { $show_views = true; }
|
2221 |
+
if ( !empty($query_atts['caption']) || $show_views || $query_atts['downloadlink'] == "true" ) {
|
2222 |
+
$code .= "\t\t\t".'<div class="kgvid_below_video" id="video_'.$div_suffix.'_below">';
|
2223 |
+
if ( $show_views ) { $code .= '<div class="kgvid-viewcount" id="video_'.$div_suffix.'_viewcount">'.sprintf( _n( '%s view', '%s views', intval(str_replace(',', '', $view_count)) , 'video-embed-thumbnail-generator'), $view_count ).'</div>'; }
|
2224 |
+
if ( !empty($query_atts['caption']) || $query_atts['downloadlink'] == "true" ) {
|
2225 |
+
$code .= '<div class="kgvid-caption" id="video_'.$div_suffix.'_caption">'.$query_atts['caption'];
|
2226 |
+
if ( $query_atts['downloadlink'] == "true" ) {
|
2227 |
+
if ( !empty($query_atts['caption']) ) { $code .= '<br>'; }
|
2228 |
+
$forceable = false;
|
2229 |
+
if ( !empty($id) && $options['click_download'] == 'on' ) {
|
2230 |
+
$filepath = get_attached_file($id);
|
2231 |
+
if ( file_exists($filepath) ) {
|
2232 |
+
$forceable = true;
|
2233 |
+
$code .= '<a href="'.site_url('/').'?attachment_id='.$id.'&kgvid_video_embed[download]=true">'.__('Click on this link to download', 'video-embed-thumbnail-generator').'</a>';
|
2234 |
+
}
|
2235 |
+
}
|
2236 |
+
if ( !$forceable ) { $code .= '<a href="'.$content.'">'.__('Right-click or ctrl-click on this link to download', 'video-embed-thumbnail-generator').'</a>'; }
|
2237 |
+
}
|
2238 |
+
$code .= '</div>';
|
2239 |
+
}
|
2240 |
+
$code .= '</div>';
|
2241 |
+
}
|
2242 |
+
}
|
2243 |
+
|
2244 |
+
if ( $kgvid_meta == true ) { //generate content overlaid on video
|
2245 |
+
$code .= "\t\t\t<div style=\"display:none;\" id=\"video_".$div_suffix."_meta\" class=\"kgvid_video_meta kgvid_video_meta_hover\">\n";
|
2246 |
+
if ( $query_atts['embedcode'] != "false" ) {
|
2247 |
+
if ( $query_atts['embedcode'] == "true" ) { $iframeurl = site_url('/')."?attachment_id=".$id."&kgvid_video_embed[enable]=true"; }
|
2248 |
+
else { $iframeurl = $query_atts['embedcode']; }
|
2249 |
+
$iframecode = "<iframe allowfullscreen src='".$iframeurl."' frameborder='0' scrolling='no' width='".esc_attr($query_atts['width'])."' height='".esc_attr($query_atts["height"])."'></iframe>";
|
2250 |
+
$code .= "\t\t\t\t<div id=\"video_".$div_suffix."_embed\" class=\"kgvid_share\"><span>"._x('Embed:', 'precedes code for embedding video', 'video-embed-thumbnail-generator')." </span><input type=\"text\" value=\"".esc_attr($iframecode)."\" onClick=\"this.select();\"></div>\n";
|
2251 |
+
}
|
2252 |
+
if ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" ) {
|
2253 |
+
$code .= "\t\t\t\t<div id='video_".$div_suffix."_title' class='kgvid_title'>".$query_atts['title']."</div>\n";
|
2254 |
+
}
|
2255 |
+
$code .= "\t\t\t</div>\n";
|
2256 |
+
}
|
2257 |
+
|
2258 |
+
if ( !empty($query_atts["watermark"]) && $query_atts["watermark"] != "false" ) {
|
2259 |
+
$watermark_id = kgvid_url_to_id($query_atts["watermark"]);
|
2260 |
+
if ( $watermark_id ) { $query_atts["watermark"] = wp_get_attachment_url($watermark_id); }
|
2261 |
+
$code .= "<div style=\"display:none;\" id='video_".$div_suffix."_watermark' class='kgvid_watermark'>";
|
2262 |
+
if ( !empty($query_atts["watermark_url"]) && $query_atts["watermark_link_to"] != 'custom' ) { $query_atts["watermark_link_to"] = 'custom'; }
|
2263 |
+
if ( $query_atts['watermark_link_to'] != 'false' && $query_atts["watermark_url"] != 'false' ) {
|
2264 |
+
$watermark_link = true;
|
2265 |
+
switch ( $query_atts['watermark_link_to'] ) {
|
2266 |
+
|
2267 |
+
case 'home':
|
2268 |
+
$watermark_href = get_home_url();
|
2269 |
+
break;
|
2270 |
+
|
2271 |
+
case 'parent':
|
2272 |
+
if ( !empty($id) && is_object($attachment_info) && array_key_exists('post_parent', $attachment_info) && !empty($attachment_info->post_parent) ) {
|
2273 |
+
$watermark_href = get_permalink($attachment_info->post_parent);
|
2274 |
+
}
|
2275 |
+
else { $watermark_href = get_home_url(); }
|
2276 |
+
break;
|
2277 |
+
|
2278 |
+
case 'attachment':
|
2279 |
+
if ( !empty($id) ) {
|
2280 |
+
$watermark_href = get_permalink($id);
|
2281 |
+
}
|
2282 |
+
else { $watermark_href = get_home_url(); }
|
2283 |
+
break;
|
2284 |
+
|
2285 |
+
case 'download':
|
2286 |
+
if ( !empty($id) ) {
|
2287 |
+
$watermark_href = site_url('/').'?attachment_id='.$id.'&kgvid_video_embed[download]=true';
|
2288 |
+
}
|
2289 |
+
else { $watermark_href = $content; }
|
2290 |
+
break;
|
2291 |
+
|
2292 |
+
case 'custom':
|
2293 |
+
$watermark_href = $query_atts["watermark_url"];
|
2294 |
+
break;
|
2295 |
+
|
2296 |
+
}
|
2297 |
+
$code .= "<a target='_parent' href='".$watermark_href."'>";
|
2298 |
+
}
|
2299 |
+
else { $watermark_link = false; }
|
2300 |
+
$code .= "<img src='".esc_attr($query_atts["watermark"])."' alt='watermark'>";
|
2301 |
+
if ( $watermark_link ) { $code .= "</a>"; }
|
2302 |
+
$code .= "</div>";
|
2303 |
+
} //generate watermark
|
2304 |
+
$code .= "\t\t</div>"; //end kgvid_XXXX_wrapper div
|
2305 |
+
|
2306 |
+
$kgvid_video_id++;
|
2307 |
+
|
2308 |
+
} //end id_array loop
|
2309 |
+
|
2310 |
+
return $code;
|
2311 |
+
|
2312 |
+
}
|
2313 |
+
|
2314 |
function kgvid_shortcode_atts($atts) {
|
2315 |
|
2316 |
$options = kgvid_get_options();
|
2419 |
|
2420 |
function KGVID_shortcode($atts, $content = ''){
|
2421 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2422 |
$code = "";
|
2423 |
if ( !is_feed() ) {
|
2424 |
|
2425 |
$options = kgvid_get_options();
|
2426 |
+
|
2427 |
kgvid_enqueue_shortcode_scripts();
|
2428 |
|
2429 |
if ( in_the_loop() ) { $post_ID = get_the_ID(); }
|
2433 |
|
2434 |
if ( $query_atts["gallery"] != "true" ) { //if this is not a pop-up gallery
|
2435 |
|
2436 |
+
$code = kgvid_single_video_code($query_atts, $atts, $content, $post_ID);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2437 |
|
2438 |
} //if not gallery
|
2439 |
|