Video Embed & Thumbnail Generator - Version 1.0.3

Version Description

  • October 27, 2011 =
  • Revised thumbnail cleanup to make sure temp files aren't deleted when generating thumbnails for more than one video at a time.
Download this release

Release Info

Developer kylegilman
Plugin Icon 128x128 Video Embed & Thumbnail Generator
Version 1.0.3
Comparing to
See all releases

Code changes from version 1.0.2 to 1.0.3

kg_callffmpeg.php CHANGED
@@ -299,11 +299,14 @@ if ($action == submit) {
299
  $tmp_posterpath = $uploads["path"].'/thumb_tmp/'.$posterfile;
300
  $final_posterpath = $uploads["path"].'/'.$posterfile;
301
  if ( is_file($tmp_posterpath) ) { copy($tmp_posterpath, $final_posterpath); }
302
- rrmdir($uploads['path'].'/thumb_tmp');
303
 
304
- //$arr = array ( "posterfile"=>$posterfile, "tmp_posterpath"=>$tmp_posterpath, "final_posterpath"=>$final_posterpath );
305
- echo json_encode($arr);
 
 
306
 
 
 
307
 
308
  }//if submit
309
 
299
  $tmp_posterpath = $uploads["path"].'/thumb_tmp/'.$posterfile;
300
  $final_posterpath = $uploads["path"].'/'.$posterfile;
301
  if ( is_file($tmp_posterpath) ) { copy($tmp_posterpath, $final_posterpath); }
 
302
 
303
+ $thumb_base = substr($tmp_posterpath, 0, -5);
304
+ foreach (glob($thumb_base."?.jpg") as $thumbfilename) {
305
+ unlink($thumbfilename);
306
+ }
307
 
308
+ //$arr = array ( "posterfile"=>$posterfile, "tmp_posterpath"=>$tmp_posterpath, "final_posterpath"=>$final_posterpath );
309
+ //echo json_encode($arr);
310
 
311
  }//if submit
312
 
kg_video_plugin.js CHANGED
@@ -84,6 +84,8 @@ function kg_generate_thumb(postID, buttonPushed) {
84
 
85
  }, "json");
86
 
 
 
87
  }
88
 
89
  function kg_insert_shortcode() {
84
 
85
  }, "json");
86
 
87
+ jQuery.post( ajaxurl , { action:"kg_schedule_cleanup_generated_files" } );
88
+
89
  }
90
 
91
  function kg_insert_shortcode() {
readme.txt CHANGED
@@ -2,17 +2,13 @@
2
  Contributors: kylegilman
3
  Tags: video, html5, shortcode, thumbnail, ffmpeg
4
  Requires at least: 3.0
5
- Tested up to: 3.2.1
6
- Stable tag: 1.0.2
7
 
8
  Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG for thumbnails and encodes.
9
 
10
  == Description ==
11
 
12
- This is a big re-write. You no longer have to manually choose the video URL. The visual-editor plugin with my icon is gone. Just click "Insert Video" to get things started.
13
-
14
- I would appreciate any feedback you have.
15
-
16
  A plugin for the Wordpress visual editor to make embedding videos, generating thumbnails, and encoding HTML5-compliant files a little bit easier.
17
 
18
  The plugin adds several fields to any video attachment in the Media Library:
@@ -55,8 +51,6 @@ I'm not really a software developer. I'm just a film editor with some time on hi
55
  AddType video/mp4 .mp4
56
  AddType video/mp4 .m4v
57
  AddType video/webm .webm`
58
-
59
- Or use your web host's configuration panel (cpanel, etc) to add a custom MIME type.
60
  1. Follow instructions on the Description page.
61
 
62
  == Frequently Asked Questions ==
@@ -74,6 +68,9 @@ Some of it will work without FFMPEG. You can generate embed codes for your video
74
 
75
  == Changelog ==
76
 
 
 
 
77
  = 1.0.2 - October 21, 2011 =
78
  * Fixed a shocking number of unenclosed stings in get_options() calls. Bad programming. Didn't affect functionality, but will stop generating errors.
79
  * Removed clumsy check for FFMPEG running. Was preventing encoding if ANY user on the server was running FFMPEG. Be wary of overusing your system resources though.
2
  Contributors: kylegilman
3
  Tags: video, html5, shortcode, thumbnail, ffmpeg
4
  Requires at least: 3.0
5
+ Tested up to: 3.3
6
+ Stable tag: 1.0.3
7
 
8
  Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG for thumbnails and encodes.
9
 
10
  == Description ==
11
 
 
 
 
 
12
  A plugin for the Wordpress visual editor to make embedding videos, generating thumbnails, and encoding HTML5-compliant files a little bit easier.
13
 
14
  The plugin adds several fields to any video attachment in the Media Library:
51
  AddType video/mp4 .mp4
52
  AddType video/mp4 .m4v
53
  AddType video/webm .webm`
 
 
54
  1. Follow instructions on the Description page.
55
 
56
  == Frequently Asked Questions ==
68
 
69
  == Changelog ==
70
 
71
+ = 1.0.3 - October 27, 2011 =
72
+ * Revised thumbnail cleanup to make sure temp files aren't deleted when generating thumbnails for more than one video at a time.
73
+
74
  = 1.0.2 - October 21, 2011 =
75
  * Fixed a shocking number of unenclosed stings in get_options() calls. Bad programming. Didn't affect functionality, but will stop generating errors.
76
  * Removed clumsy check for FFMPEG running. Was preventing encoding if ANY user on the server was running FFMPEG. Be wary of overusing your system resources though.
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: Generate video thumbnails, HTML5-compliant videos, and video embed shortcodes. Some functions require FFMPEG.
6
- Version: 1.0.2
7
  Author: Kyle Gilman
8
  Author URI: http://www.kylegilman.net/
9
 
@@ -277,14 +277,14 @@ function FMP_shortcode($atts, $content = ''){
277
  }
278
 
279
  return $code;
280
- }
281
-
282
 
283
- function addFMPOptionsPage() {
284
  add_options_page('Video Embed & Thumbnail Generator', 'Video Embed & Thumbnail Generator', 8, basename(__FILE__), 'FMPOptionsPage');
285
  }
286
 
287
- function FMPOptionsPage() {
288
 
289
  if (isset($_POST['wp_FMP_reset'])) {
290
  update_option(wp_FMP_swfobject, wp_FMP_swfobject_default);
@@ -785,7 +785,7 @@ function kg_addPostSave($post_id) {
785
  }//if post not already saved
786
  $flag = 1;
787
  }
788
-
789
 
790
 
791
  /**
@@ -867,13 +867,14 @@ function kg_addPostSave($post_id) {
867
  }
868
  else { if ( !url_exists($thumbnail_url) ) { $thumbnail_url = ""; } }
869
 
 
870
  if ($thumbnail_url != "" ) {
871
  $thumbnail_html = '<div style="border-style:solid; border-color:#ccc; border-width:3px; width:200px; text-align:center; margin:10px;"><img width="200" src="'.$thumbnail_url.'"></div>';
872
  }
873
 
874
  $form_fields["generator"]["label"] = __("Thumbnails");
875
  $form_fields["generator"]["input"] = "html";
876
- $form_fields["generator"]["html"] = '<div id="attachments_'. $post->ID .'_thumbnailplaceholder">'. $thumbnail_html .'</div><input id="attachments_'. $post->ID .'_numberofthumbs" type="text" value="4" maxlength="2" size="4" style="width:25px;" title="Number of Thumbnails" onchange="document.getElementById(\'attachments['.$post->ID.'][thumbtime]\').value =\'\';"><input type="button" id="attachments['. $post->ID .'][thumbgenerate]" class="button-secondary" value="Generate" name="thumbgenerate" onclick="kg_generate_thumb('. $post->ID .', \'generate\');"/><input type="button" id="thumbrandomize" class="button-secondary" value="Randomize" name="thumbrandomize" onclick="kg_generate_thumb('. $post->ID .', \'random\');" /><input type="button" id="attachments['. $post->ID .'][deletebutton]" class="button-secondary" value="Delete" name="deletebutton" onclick="kg_generate_thumb('. $post->ID .', \'delete\');"/> <input type="checkbox" id="attachments_'. $post->ID .'_firstframe"><label for="attachments_'. $post->ID .'_firstframe">Force 1st Frame Thumbnail</label>';
877
 
878
  $form_fields["thumbtime"]["label"] = __("Thumbnail Timecode");
879
  $form_fields["thumbtime"]["value"] = get_post_meta($post->ID, "_kgflashmediaplayer-thumbtime", true);
@@ -920,13 +921,19 @@ function kg_addPostSave($post_id) {
920
  // $attachment part of the form $_POST ($_POST[attachments][postID])
921
  // $post attachments wp post array - will be saved after returned
922
  // $post['post_type'] == 'attachment'
923
- if( isset($attachment['kgflashmediaplayer-poster']) ) {
924
- if ( !url_exists($attachment['kgflashmediaplayer-poster']) ) {
925
- $uploads = wp_upload_dir();
926
- $posterfile = pathinfo($attachment['kgflashmediaplayer-poster'], PATHINFO_BASENAME);
927
- $tmp_posterpath = $uploads['path'].'/thumb_tmp/'.$posterfile;
928
- if ( is_file($tmp_posterpath) ) { copy($tmp_posterpath, $uploads['path'].'/'.$posterfile); }
929
- rrmdir($uploads['path'].'/thumb_tmp');
 
 
 
 
 
 
930
  }
931
  update_post_meta($post['ID'], '_kgflashmediaplayer-poster', $attachment['kgflashmediaplayer-poster']);
932
  }
@@ -1045,7 +1052,7 @@ media_upload_header();
1045
  <tr class="submit">
1046
  <td></td>
1047
  <td>
1048
- <input type="submit" onclick="kg_insert_shortcode();" name="insertonlybutton" id="insertonlybutton" class="button" value="Insert into Post" />
1049
  </td>
1050
  </tr>
1051
  </tbody></table>
@@ -1071,22 +1078,36 @@ $maxwidth = get_option('wp_FMP_width');
1071
  </form>
1072
 
1073
  <?php
1074
- }
 
1075
  function kg_embedurl_handle() {
1076
  return wp_iframe( 'media_embedurl_process');
1077
  }
1078
  add_action('media_upload_embedurl', 'kg_embedurl_handle');
1079
 
1080
 
1081
- function enqueue_kg_script() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1082
  wp_enqueue_script( 'video_embed_thumbnail_generator_script', plugins_url('/kg_video_plugin.js', __FILE__) );
1083
  }
 
1084
 
1085
  add_action('wp_head', 'addSWFObject');
1086
  add_action('admin_menu', 'addFMPOptionsPage');
1087
- add_action('save_post', 'kg_addPostSave');
1088
- add_action('admin_enqueue_scripts', 'enqueue_kg_script');
1089
-
1090
- add_shortcode('FMP', 'FMP_shortcode');
1091
 
1092
  ?>
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: Generate video thumbnails, HTML5-compliant videos, and video embed shortcodes. Some functions require FFMPEG.
6
+ Version: 1.0.3
7
  Author: Kyle Gilman
8
  Author URI: http://www.kylegilman.net/
9
 
277
  }
278
 
279
  return $code;
280
+ }
281
+ add_shortcode('FMP', 'FMP_shortcode');
282
 
283
+ function addFMPOptionsPage() {
284
  add_options_page('Video Embed & Thumbnail Generator', 'Video Embed & Thumbnail Generator', 8, basename(__FILE__), 'FMPOptionsPage');
285
  }
286
 
287
+ function FMPOptionsPage() {
288
 
289
  if (isset($_POST['wp_FMP_reset'])) {
290
  update_option(wp_FMP_swfobject, wp_FMP_swfobject_default);
785
  }//if post not already saved
786
  $flag = 1;
787
  }
788
+ add_action('save_post', 'kg_addPostSave');
789
 
790
 
791
  /**
867
  }
868
  else { if ( !url_exists($thumbnail_url) ) { $thumbnail_url = ""; } }
869
 
870
+ $thumbnail_html = "";
871
  if ($thumbnail_url != "" ) {
872
  $thumbnail_html = '<div style="border-style:solid; border-color:#ccc; border-width:3px; width:200px; text-align:center; margin:10px;"><img width="200" src="'.$thumbnail_url.'"></div>';
873
  }
874
 
875
  $form_fields["generator"]["label"] = __("Thumbnails");
876
  $form_fields["generator"]["input"] = "html";
877
+ $form_fields["generator"]["html"] = '<div id="attachments_'. $post->ID .'_thumbnailplaceholder">'. $thumbnail_html .'</div><input id="attachments_'. $post->ID .'_numberofthumbs" type="text" value="4" maxlength="1" size="4" style="width:25px;" title="Number of Thumbnails" onchange="document.getElementById(\'attachments['.$post->ID.'][thumbtime]\').value =\'\';"><input type="button" id="attachments['. $post->ID .'][thumbgenerate]" class="button-secondary" value="Generate" name="thumbgenerate" onclick="kg_generate_thumb('. $post->ID .', \'generate\');"/><input type="button" id="thumbrandomize" class="button-secondary" value="Randomize" name="thumbrandomize" onclick="kg_generate_thumb('. $post->ID .', \'random\');" /><input type="button" id="attachments['. $post->ID .'][deletebutton]" class="button-secondary" value="Delete" name="deletebutton" onclick="kg_generate_thumb('. $post->ID .', \'delete\');"/> <input type="checkbox" id="attachments_'. $post->ID .'_firstframe"><label for="attachments_'. $post->ID .'_firstframe">Force 1st Frame Thumbnail</label>';
878
 
879
  $form_fields["thumbtime"]["label"] = __("Thumbnail Timecode");
880
  $form_fields["thumbtime"]["value"] = get_post_meta($post->ID, "_kgflashmediaplayer-thumbtime", true);
921
  // $attachment part of the form $_POST ($_POST[attachments][postID])
922
  // $post attachments wp post array - will be saved after returned
923
  // $post['post_type'] == 'attachment'
924
+ if( isset($attachment['kgflashmediaplayer-poster']) ) {
925
+ $uploads = wp_upload_dir();
926
+ $posterfile = pathinfo($attachment['kgflashmediaplayer-poster'], PATHINFO_BASENAME);
927
+ $tmp_posterpath = $uploads['path'].'/thumb_tmp/'.$posterfile;
928
+ if ( !is_file($uploads['path'].'/'.$posterfile) ) {
929
+ if ( is_file($tmp_posterpath) ) {
930
+ copy($tmp_posterpath, $uploads['path'].'/'.$posterfile);
931
+ $thumb_base = substr($tmp_posterpath, 0, -5);
932
+ foreach (glob($thumb_base."?.jpg") as $thumbfilename) {
933
+ unlink($thumbfilename);
934
+ }
935
+ }
936
+ rmdir($uploads['path'].'/thumb_tmp');
937
  }
938
  update_post_meta($post['ID'], '_kgflashmediaplayer-poster', $attachment['kgflashmediaplayer-poster']);
939
  }
1052
  <tr class="submit">
1053
  <td></td>
1054
  <td>
1055
+ <input type="submit" onclick="kg_generate_thumb('singleurl', 'submit'); kg_insert_shortcode();" name="insertonlybutton" id="insertonlybutton" class="button" value="Insert into Post" />
1056
  </td>
1057
  </tr>
1058
  </tbody></table>
1078
  </form>
1079
 
1080
  <?php
1081
+ } //end media_embedurl_process
1082
+
1083
  function kg_embedurl_handle() {
1084
  return wp_iframe( 'media_embedurl_process');
1085
  }
1086
  add_action('media_upload_embedurl', 'kg_embedurl_handle');
1087
 
1088
 
1089
+
1090
+
1091
+ function kg_cleanup_generated_thumbnails_handler($posterurl) {
1092
+ $uploads = wp_upload_dir();
1093
+ rrmdir($uploads['path'].'/thumb_tmp'); //remove the whole tmp file directory
1094
+ }
1095
+ add_action('kg_cleanup_generated_thumbnails','kg_cleanup_generated_thumbnails_handler');
1096
+
1097
+ function kg_schedule_cleanup_generated_files() { //schedules deleting all tmp thumbnails if no thumbnails are generated in an hour
1098
+ $timestamp = wp_next_scheduled( 'kg_cleanup_generated_thumbnails' );
1099
+ wp_unschedule_event($timestamp, 'kg_cleanup_generated_thumbnails' );
1100
+ wp_schedule_single_event(time()+3600, 'kg_cleanup_generated_thumbnails');
1101
+ die(); // this is required to return a proper result
1102
+ }
1103
+ add_action('wp_ajax_kg_schedule_cleanup_generated_files', 'kg_schedule_cleanup_generated_files');
1104
+
1105
+ function enqueue_kg_script() { //loads plugin-related javascripts
1106
  wp_enqueue_script( 'video_embed_thumbnail_generator_script', plugins_url('/kg_video_plugin.js', __FILE__) );
1107
  }
1108
+ add_action('admin_enqueue_scripts', 'enqueue_kg_script');
1109
 
1110
  add_action('wp_head', 'addSWFObject');
1111
  add_action('admin_menu', 'addFMPOptionsPage');
 
 
 
 
1112
 
1113
  ?>