PowerPress Podcasting plugin by Blubrry - Version 0.7.2

Version Description

Download this release

Release Info

Developer amandato
Plugin Icon 128x128 PowerPress Podcasting plugin by Blubrry
Version 0.7.2
Comparing to
See all releases

Code changes from version 0.7.1 to 0.7.2

mp3info.class.php CHANGED
@@ -87,8 +87,8 @@
87
  return false;
88
  }
89
 
90
- if( !ini_get( 'allow_url_fopen' ) )
91
- return $this->DownloadAlt($url);
92
 
93
  // The following code relies on fopen_url capability.
94
  if( $RedirectCount > $this->m_RedirectLimit )
@@ -204,10 +204,11 @@
204
  /*
205
  Alternative method (curl) for downloading portion of a media file
206
  */
207
- function DownloadAlt($url)
208
  {
209
  $curl = curl_init();
210
  // First, get the content-length...
 
211
  curl_setopt($curl, CURLOPT_URL, $url);
212
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
213
  curl_setopt($curl, CURLOPT_HEADER, true); // header will be at output
@@ -250,6 +251,7 @@
250
  $fp = fopen($TempFile, 'w+b');
251
  // Next get the first chunk of the file...
252
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
 
253
  curl_setopt($curl, CURLOPT_FILE, $fp);
254
  curl_setopt($curl, CURLOPT_URL, $url);
255
  curl_setopt($curl, CURLOPT_HEADER, false); // header will be at output
@@ -258,7 +260,7 @@
258
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
259
  curl_setopt($curl, CURLOPT_MAXREDIRS, $this->m_RedirectLimit);
260
  curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
261
- curl_setopt($curl, CURLOPT_HTTPHEADER,array('Range: bytes=0-'.($this->m_DownloadBytesLimit-1) ));
262
  //curl_setopt($curl, CURLINFO_HEADER_OUT, true); // For debugging
263
  // Do the download
264
  $success = curl_exec($curl);
87
  return false;
88
  }
89
 
90
+ if( ini_get( 'curl_init' ) )
91
+ return $this->DownloadCurl($url);
92
 
93
  // The following code relies on fopen_url capability.
94
  if( $RedirectCount > $this->m_RedirectLimit )
204
  /*
205
  Alternative method (curl) for downloading portion of a media file
206
  */
207
+ function DownloadCurl($url)
208
  {
209
  $curl = curl_init();
210
  // First, get the content-length...
211
+ curl_setopt($cUrl, CURLOPT_USERAGENT, 'Blubrry PowerPress/'.POWERPRESS_VERSION);
212
  curl_setopt($curl, CURLOPT_URL, $url);
213
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
214
  curl_setopt($curl, CURLOPT_HEADER, true); // header will be at output
251
  $fp = fopen($TempFile, 'w+b');
252
  // Next get the first chunk of the file...
253
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
254
+ curl_setopt($cUrl, CURLOPT_USERAGENT, 'Blubrry PowerPress/'.POWERPRESS_VERSION);
255
  curl_setopt($curl, CURLOPT_FILE, $fp);
256
  curl_setopt($curl, CURLOPT_URL, $url);
257
  curl_setopt($curl, CURLOPT_HEADER, false); // header will be at output
260
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
261
  curl_setopt($curl, CURLOPT_MAXREDIRS, $this->m_RedirectLimit);
262
  curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
263
+ curl_setopt($curl, CURLOPT_HTTPHEADER,array('Range: bytes=0-'.($this->m_DownloadBytesLimit-1) ));
264
  //curl_setopt($curl, CURLINFO_HEADER_OUT, true); // For debugging
265
  // Do the download
266
  $success = curl_exec($curl);
player.js CHANGED
@@ -8,6 +8,7 @@
8
  * Released under Aoache 2 license:
9
  * http://www.apache.org/licenses/LICENSE-2.0
10
  *
 
11
  * versoin 1.1.2 - 03/04/2009 - Added options to set the width for audio, width and height for video.
12
  * versoin 1.1.1 - 12/22/20008 - Minor change to support Windows Media in Firefox. Includes link to preferred Firefox Windows Media Player plugin.
13
  * versoin 1.1.0 - 11/25/20008 - Major re-write, object now stored in this include file, auto play is no longer a member variable and is determined by function call.
@@ -28,8 +29,20 @@ var g_bpPlayer = false;
28
  */
29
  function powerpress_player_init(PluginURL, QuicktimeImage)
30
  {
31
- if( g_bpPlayer == false )
 
 
 
 
 
 
 
 
 
 
32
  g_bpPlayer = new jsMediaPlayer(PluginURL +'FlowPlayerClassic.swf');
 
 
33
  g_bpPlayer.PlayImage(QuicktimeImage);
34
  if( powerpress_player_init.arguments.length > 2 )
35
  g_bpPlayer.OnePlayerOnly(powerpress_player_init.arguments[2]);
@@ -104,6 +117,8 @@ function jsMediaPlayer(FlashSrc) {
104
  this.m_one_player_only = false;
105
  this.m_media_url = false;
106
  this.m_play_image = false;
 
 
107
 
108
 
109
  this.FlashSrc=function(Src) {
@@ -126,6 +141,11 @@ function jsMediaPlayer(FlashSrc) {
126
  this.m_one_player_only = Setting;
127
  }
128
 
 
 
 
 
 
129
  this.PlayImage=function(URL) {
130
  this.m_play_image = URL;
131
  }
@@ -340,13 +360,54 @@ function jsMediaPlayer(FlashSrc) {
340
  auto_play = this._doFlowPlayer.arguments[1];
341
  if( height == 24 )
342
  width = this.m_widthAudio;
343
-
344
- flashembed(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  this.m_player_div,
346
  {src: this.m_flash_src, width: width, height: height },
347
  {config: { autoPlay: auto_play?true:false, autoBuffering: false, initialScale: 'scale', showFullScreenButton: false, showMenu: false, videoFile: this.m_media_url, loop: false, autoRewind: true } }
348
  );
349
-
 
350
  return false;
351
  }
352
 
@@ -562,6 +623,7 @@ function powerpress_addLoadEvent(func)
562
  }
563
  }
564
 
 
565
  /**
566
  * flashembed 0.31. Adobe Flash embedding script
567
  *
@@ -577,4 +639,5 @@ function powerpress_addLoadEvent(func)
577
  * version 0.01 - 03/11/2008
578
  * version 0.31 - Tue Jul 22 2008 06:30:31 GMT+0200 (GMT+02:00)
579
  */
580
- function flashembed(root,userParams,flashvars){function getHTML(){var html="";if(typeof flashvars=='function'){flashvars=flashvars();}if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){html='<embed type="application/x-shockwave-flash" ';if(params.id){extend(params,{name:params.id});}for(var key in params){if(params[key]!==null){html+=[key]+'="'+params[key]+'"\n\t';}}if(flashvars){html+='flashvars=\''+concatVars(flashvars)+'\'';}html+='/>';}else{html='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';html+='width="'+params.width+'" height="'+params.height+'"';if(!params.id&&document.all){params.id="_"+(""+Math.random()).substring(5);}if(params.id){html+=' id="'+params.id+'"';}html+='>';html+='\n\t<param name="movie" value="'+params.src+'" />';params.id=params.src=params.width=params.height=null;for(var k in params){if(params[k]!==null){html+='\n\t<param name="'+k+'" value="'+params[k]+'" />';}}if(flashvars){html+='\n\t<param name="flashvars" value=\''+concatVars(flashvars)+'\' />';}html+="</object>";if(debug){alert(html);}}return html;}function init(name){var timer=setInterval(function(){var doc=document;var el=doc.getElementById(name);if(el){flashembed(el,userParams,flashvars);clearInterval(timer);}else if(doc&&doc.getElementsByTagName&&doc.getElementById&&doc.body){clearInterval(timer);}},13);return true;}function extend(to,from){if(from){for(key in from){if(from.hasOwnProperty(key)){to[key]=from[key];}}}}var params={src:'#',width:'100%',height:'100%',version:null,onFail:null,expressInstall:null,debug:false,bgcolor:'#ffffff',allowfullscreen:true,allowscriptaccess:'always',quality:'high',type:'application/x-shockwave-flash',pluginspage:'http://www.adobe.com/go/getflashplayer'};if(typeof userParams=='string'){userParams={src:userParams};}extend(params,userParams);var version=flashembed.getVersion();var required=params.version;var express=params.expressInstall;var debug=params.debug;if(typeof root=='string'){var el=document.getElementById(root);if(el){root=el;}else{return init(root);}}if(!root){return;}if(!required||flashembed.isSupported(required)){params.onFail=params.version=params.expressInstall=params.debug=null;root.innerHTML=getHTML();return root.firstChild;}else if(params.onFail){var ret=params.onFail.call(params,flashembed.getVersion(),flashvars);if(ret){root.innerHTML=ret;}}else if(required&&express&&flashembed.isSupported([6,65])){extend(params,{src:express});flashvars={MMredirectURL:location.href,MMplayerType:'PlugIn',MMdoctitle:document.title};root.innerHTML=getHTML();}else{if(root.innerHTML.replace(/\s/g,'')!==''){}else{root.innerHTML="<h2>Flash version "+required+" or greater is required</h2>"+"<h3>"+(version[0]>0?"Your version is "+version:"You have no flash plugin installed")+"</h3>"+"<p>Download latest version from <a href='"+params.pluginspage+"'>here</a></p>";}}function concatVars(vars){var out="";for(var key in vars){if(vars[key]){out+=[key]+'='+asString(vars[key])+'&';}}return out.substring(0,out.length-1);}function asString(obj){switch(typeOf(obj)){case'string':return'"'+obj.replace(new RegExp('(["\\\\])','g'),'\\$1')+'"';case'array':return'['+map(obj,function(el){return asString(el);}).join(',')+']';case'function':return'"function()"';case'object':var str=[];for(var prop in obj){if(obj.hasOwnProperty(prop)){str.push('"'+prop+'":'+asString(obj[prop]));}}return'{'+str.join(',')+'}';}return String(obj).replace(/\s/g," ").replace(/\'/g,"\"");}function typeOf(obj){if(obj===null||obj===undefined){return false;}var type=typeof obj;return(type=='object'&&obj.push)?'array':type;}if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};});}function map(arr,func){var newArr=[];for(var i in arr){if(arr.hasOwnProperty(i)){newArr[i]=func(arr[i]);}}return newArr;}return root;}if(typeof jQuery=='function'){(function($){$.fn.extend({flashembed:function(params,flashvars){return this.each(function(){flashembed(this,params,flashvars);});}});})(jQuery);}flashembed=flashembed||{};flashembed.getVersion=function(){var version=[0,0];if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){var _d=navigator.plugins["Shockwave Flash"].description;if(typeof _d!="undefined"){_d=_d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");var _m=parseInt(_d.replace(/^(.*)\..*$/,"$1"),10);var _r=/r/.test(_d)?parseInt(_d.replace(/^.*r(.*)$/,"$1"),10):0;version=[_m,_r];}}else if(window.ActiveXObject){try{var _a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");version=[6,0];_a.AllowScriptAccess="always";}catch(ee){if(version[0]==6){return;}}try{_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(eee){}}if(typeof _a=="object"){_d=_a.GetVariable("$version");if(typeof _d!="undefined"){_d=_d.replace(/^\S+\s+(.*)$/,"$1").split(",");version=[parseInt(_d[0],10),parseInt(_d[2],10)];}}}return version;};flashembed.isSupported=function(version){var now=flashembed.getVersion();var ret=(now[0]>version[0])||(now[0]==version[0]&&now[1]>=version[1]);return ret;};
 
8
  * Released under Aoache 2 license:
9
  * http://www.apache.org/licenses/LICENSE-2.0
10
  *
11
+ * versoin 1.1.3 - 03/23/2009 - Added code to support FlowPlayer v3.
12
  * versoin 1.1.2 - 03/04/2009 - Added options to set the width for audio, width and height for video.
13
  * versoin 1.1.1 - 12/22/20008 - Minor change to support Windows Media in Firefox. Includes link to preferred Firefox Windows Media Player plugin.
14
  * versoin 1.1.0 - 11/25/20008 - Major re-write, object now stored in this include file, auto play is no longer a member variable and is determined by function call.
29
  */
30
  function powerpress_player_init(PluginURL, QuicktimeImage)
31
  {
32
+ var FlowPlayerVer = 2;
33
+ if( powerpress_player_init.arguments.length > 3 )
34
+ FlowPlayerVer = powerpress_player_init.arguments[3];
35
+
36
+ if( g_bpPlayer == false && FlowPlayerVer == 3 )
37
+ {
38
+ g_bpPlayer = new jsMediaPlayer(PluginURL +'flowplayer-3.0.7.swf');
39
+ g_bpPlayer.FlashSrcPlugin( PluginURL + 'flowplayer.audio-3.0.4.swf');
40
+ }
41
+ else
42
+ {
43
  g_bpPlayer = new jsMediaPlayer(PluginURL +'FlowPlayerClassic.swf');
44
+ }
45
+
46
  g_bpPlayer.PlayImage(QuicktimeImage);
47
  if( powerpress_player_init.arguments.length > 2 )
48
  g_bpPlayer.OnePlayerOnly(powerpress_player_init.arguments[2]);
117
  this.m_one_player_only = false;
118
  this.m_media_url = false;
119
  this.m_play_image = false;
120
+ this.m_FlowPlayerVer = 2;
121
+ this.m_flash_src_plugin = '';
122
 
123
 
124
  this.FlashSrc=function(Src) {
141
  this.m_one_player_only = Setting;
142
  }
143
 
144
+ this.FlashSrcPlugin=function(Src) {
145
+ this.m_FlowPlayerVer = (Src==''?2:3);
146
+ this.m_flash_src_plugin = Src;
147
+ }
148
+
149
  this.PlayImage=function(URL) {
150
  this.m_play_image = URL;
151
  }
360
  auto_play = this._doFlowPlayer.arguments[1];
361
  if( height == 24 )
362
  width = this.m_widthAudio;
363
+ if( this.m_FlowPlayerVer == 3 )
364
+ {
365
+ flashembed(
366
+ this.m_player_div,
367
+ {src: this.m_flash_src, width: width, height: height },
368
+ {
369
+ config: {
370
+ plugins: {
371
+ controls: {
372
+ borderRadius: '0',
373
+ durationColor: '#000000',
374
+ timeColor: '#ECECEC',
375
+ sliderColor: '#6F6F6F',
376
+ sliderGradient: 'low',
377
+ progressColor: '#6F6F6F',
378
+ progressGradient: 'low',
379
+ bufferColor: '#CCCCCC',
380
+ bufferGradient: 'low',
381
+ buttonColor: '#6F6F6F',
382
+ buttonOverColor: '#7F7F7F',
383
+ backgroundColor: '#9F9F9F',
384
+ backgroundGradient: 'low',
385
+ fullscreen: false,
386
+ opacity:1.0
387
+ },
388
+ audio: {
389
+ url: this.m_flash_src_plugin
390
+ }
391
+ },
392
+ clip: {
393
+ autoPlay: false,
394
+ autoBuffering: false,
395
+ url: this.m_media_url
396
+ }
397
+ }
398
+ }
399
+ );
400
+ // {config: { autoPlay: auto_play?true:false, autoBuffering: false, initialScale: 'scale', showFullScreenButton: false, showMenu: false, videoFile: this.m_media_url, loop: false, autoRewind: true } }
401
+ }
402
+ else
403
+ {
404
+ flashembed(
405
  this.m_player_div,
406
  {src: this.m_flash_src, width: width, height: height },
407
  {config: { autoPlay: auto_play?true:false, autoBuffering: false, initialScale: 'scale', showFullScreenButton: false, showMenu: false, videoFile: this.m_media_url, loop: false, autoRewind: true } }
408
  );
409
+ }
410
+
411
  return false;
412
  }
413
 
623
  }
624
  }
625
 
626
+
627
  /**
628
  * flashembed 0.31. Adobe Flash embedding script
629
  *
639
  * version 0.01 - 03/11/2008
640
  * version 0.31 - Tue Jul 22 2008 06:30:31 GMT+0200 (GMT+02:00)
641
  */
642
+
643
+ function flashembed(root,userParams,flashvars){function getHTML(){var html="";if(typeof flashvars=='function'){flashvars=flashvars();}if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){html='<embed type="application/x-shockwave-flash" ';if(params.id){extend(params,{name:params.id});}for(var key in params){if(params[key]!==null){html+=[key]+'="'+params[key]+'"\n\t';}}if(flashvars){html+='flashvars=\''+concatVars(flashvars)+'\'';}html+='/>';}else{html='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';html+='width="'+params.width+'" height="'+params.height+'"';if(!params.id&&document.all){params.id="_"+(""+Math.random()).substring(5);}if(params.id){html+=' id="'+params.id+'"';}html+='>';html+='\n\t<param name="movie" value="'+params.src+'" />';params.id=params.src=params.width=params.height=null;for(var k in params){if(params[k]!==null){html+='\n\t<param name="'+k+'" value="'+params[k]+'" />';}}if(flashvars){html+='\n\t<param name="flashvars" value=\''+concatVars(flashvars)+'\' />';}html+="</object>";if(debug){alert(html);}}return html;}function init(name){var timer=setInterval(function(){var doc=document;var el=doc.getElementById(name);if(el){flashembed(el,userParams,flashvars);clearInterval(timer);}else if(doc&&doc.getElementsByTagName&&doc.getElementById&&doc.body){clearInterval(timer);}},13);return true;}function extend(to,from){if(from){for(key in from){if(from.hasOwnProperty(key)){to[key]=from[key];}}}}var params={src:'#',width:'100%',height:'100%',version:null,onFail:null,expressInstall:null,debug:false,bgcolor:'#ffffff',allowfullscreen:true,allowscriptaccess:'always',quality:'high',type:'application/x-shockwave-flash',pluginspage:'http://www.adobe.com/go/getflashplayer'};if(typeof userParams=='string'){userParams={src:userParams};}extend(params,userParams);var version=flashembed.getVersion();var required=params.version;var express=params.expressInstall;var debug=params.debug;if(typeof root=='string'){var el=document.getElementById(root);if(el){root=el;}else{return init(root);}}if(!root){return;}if(!required||flashembed.isSupported(required)){params.onFail=params.version=params.expressInstall=params.debug=null;root.innerHTML=getHTML();return root.firstChild;}else if(params.onFail){var ret=params.onFail.call(params,flashembed.getVersion(),flashvars);if(ret){root.innerHTML=ret;}}else if(required&&express&&flashembed.isSupported([6,65])){extend(params,{src:express});flashvars={MMredirectURL:location.href,MMplayerType:'PlugIn',MMdoctitle:document.title};root.innerHTML=getHTML();}else{if(root.innerHTML.replace(/\s/g,'')!==''){}else{root.innerHTML="<h2>Flash version "+required+" or greater is required</h2>"+"<h3>"+(version[0]>0?"Your version is "+version:"You have no flash plugin installed")+"</h3>"+"<p>Download latest version from <a href='"+params.pluginspage+"'>here</a></p>";}}function concatVars(vars){var out="";for(var key in vars){if(vars[key]){out+=[key]+'='+asString(vars[key])+'&';}}return out.substring(0,out.length-1);}function asString(obj){switch(typeOf(obj)){case'string':return'"'+obj.replace(new RegExp('(["\\\\])','g'),'\\$1')+'"';case'array':return'['+map(obj,function(el){return asString(el);}).join(',')+']';case'function':return'"function()"';case'object':var str=[];for(var prop in obj){if(obj.hasOwnProperty(prop)){str.push('"'+prop+'":'+asString(obj[prop]));}}return'{'+str.join(',')+'}';}return String(obj).replace(/\s/g," ").replace(/\'/g,"\"");}function typeOf(obj){if(obj===null||obj===undefined){return false;}var type=typeof obj;return(type=='object'&&obj.push)?'array':type;}if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};});}function map(arr,func){var newArr=[];for(var i in arr){if(arr.hasOwnProperty(i)){newArr[i]=func(arr[i]);}}return newArr;}return root;}if(typeof jQuery=='function'){(function($){$.fn.extend({flashembed:function(params,flashvars){return this.each(function(){flashembed(this,params,flashvars);});}});})(jQuery);}flashembed=flashembed||{};flashembed.getVersion=function(){var version=[0,0];if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){var _d=navigator.plugins["Shockwave Flash"].description;if(typeof _d!="undefined"){_d=_d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");var _m=parseInt(_d.replace(/^(.*)\..*$/,"$1"),10);var _r=/r/.test(_d)?parseInt(_d.replace(/^.*r(.*)$/,"$1"),10):0;version=[_m,_r];}}else if(window.ActiveXObject){try{var _a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");version=[6,0];_a.AllowScriptAccess="always";}catch(ee){if(version[0]==6){return;}}try{_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(eee){}}if(typeof _a=="object"){_d=_a.GetVariable("$version");if(typeof _d!="undefined"){_d=_d.replace(/^\S+\s+(.*)$/,"$1").split(",");version=[parseInt(_d[0],10),parseInt(_d[2],10)];}}}return version;};flashembed.isSupported=function(version){var now=flashembed.getVersion();var ret=(now[0]>version[0])||(now[0]==version[0]&&now[1]>=version[1]);return ret;};
powerpress.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://www.blubrry.com/powerpress/
5
  Description: <a href="http://www.blubrry.com/powerpress/" target="_blank">Blubrry PowerPress</a> adds podcasting support to your blog. Features include: media player, 3rd party statistics and iTunes integration.
6
- Version: 0.7.1
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Change Log:
@@ -29,7 +29,7 @@ License: GPL (http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt)
29
  */
30
 
31
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
32
- define('POWERPRESS_VERSION', '0.7.1' );
33
 
34
  /////////////////////////////////////////////////////
35
  // The following define options should be placed in your
@@ -49,8 +49,6 @@ if( !defined('POWERPRESS_PLAY_ON_PAGE_TEXT') )
49
  if( !defined('POWERPRESS_DOWNLOAD_TEXT') )
50
  define('POWERPRESS_DOWNLOAD_TEXT', __('Download') );
51
 
52
-
53
-
54
  // Load players in the footer of the page, improves page load times but requires wp_footer() function to be included in WP Theme.
55
  //define('POWERPRESS_USE_FOOTER', true);
56
  // You can also define the delay.
@@ -58,15 +56,12 @@ if( !defined('POWERPRESS_DOWNLOAD_TEXT') )
58
 
59
  // Set whether players should be loaded using the page onload event
60
  if( !defined('POWERPRESS_USE_ONLOAD') ) // Add define('POWERPRESS_USE_ONLOAD', false); to your wp-config.php to turn this feature off
61
- define('POWERPRESS_USE_ONLOAD', true);
62
 
63
  // define how much of a delay should exist when media players are loaded
64
  if( !defined('POWERPRESS_USE_ONLOAD_DELAY') ) // Add define('POWERPRESS_USE_ONLOAD_DELAY', 1000); to your wp-config.php to set a full 1 second delay.
65
  define('POWERPRESS_USE_ONLOAD_DELAY', 500);
66
 
67
- // Display PowerPress player only for previously created Podpress episodes.
68
- //define('POWERPRESS_USE_PLAYER_FOR_PODPRESS_EPISODES', true);
69
-
70
  // Display custom play image for quicktime media. Applies to on page player only.
71
  //define('POWERPRESS_PLAY_IMAGE', 'http://www.blubrry.com/themes/blubrry/images/player/PlayerBadge150x50NoBorder.jpg');
72
 
@@ -176,12 +171,6 @@ function powerpress_content($content)
176
  if( !isset($Powerpress['podcast_link']) )
177
  $Powerpress['podcast_link'] = 1;
178
 
179
- if( defined('POWERPRESS_USE_PLAYER_FOR_PODPRESS_EPISODES') )
180
- {
181
- if( !isset($podPressMedia) )
182
- return $content;
183
- }
184
-
185
  // The blog owner doesn't want anything displayed, so don't bother wasting anymore CPU cycles
186
  if( $Powerpress['display_player'] == 0 )
187
  return $content;
@@ -298,28 +287,30 @@ function powerpress_header()
298
  // PowerPress settings:
299
  $Powerpress = get_option('powerpress_general');
300
 
301
- $PowerpressPluginURL = powerpress_get_root_url();
 
 
302
  ?>
303
  <script type="text/javascript" src="<?php echo $PowerpressPluginURL; ?>player.js"></script>
304
  <script type="text/javascript">
305
  <?php
306
- $player_image_url = POWERPRESS_PLAY_IMAGE;
307
- if( strstr($player_image_url, 'http://') !== $player_image_url )
308
- $player_image_url = powerpress_get_root_url().$player_image_url;
309
 
310
- if( $Powerpress['player_function'] == 4 || $Powerpress['player_function'] == 5 ) // Links would imply only one player in the page
311
- echo 'powerpress_player_init(\''. $PowerpressPluginURL .'\',\''. $player_image_url .'\',true);'.PHP_EOL;
312
- else
313
- echo 'powerpress_player_init(\''. $PowerpressPluginURL .'\',\''. $player_image_url .'\');'.PHP_EOL;
314
-
315
- if( isset($Powerpress['player_width']) && isset($Powerpress['player_height']) && isset($Powerpress['player_width_audio']) )
316
- echo 'powerpress_player_size('. (int)trim($Powerpress['player_width']) .','. (int)trim($Powerpress['player_height']) .','. (int)trim($Powerpress['player_width_audio']) .');'.PHP_EOL;
317
-
318
- if( defined('POWERPRESS_USE_ONLOAD') && POWERPRESS_USE_ONLOAD )
319
- {
320
- echo 'powerpress_addLoadEvent(powerpress_onload);'.PHP_EOL;
321
- echo "var g_bpLoadDelay = ".POWERPRESS_USE_ONLOAD_DELAY.";\n";
322
- }
323
  ?>
324
  </script>
325
  <style type="text/css">
@@ -329,6 +320,7 @@ if( defined('POWERPRESS_USE_ONLOAD') && POWERPRESS_USE_ONLOAD )
329
  }
330
  </style>
331
  <?php
 
332
  }
333
 
334
  add_action('wp_head', 'powerpress_header');
@@ -351,12 +343,16 @@ function powerpress_rss2_head()
351
  if( !powerpress_is_podcast_feed() )
352
  return; // Not a feed we manage
353
 
354
- $feed = get_query_var( 'feed' );
355
 
 
356
  if( powerpress_is_custom_podcast_feed() )
357
- $Feed = get_option('powerpress_feed_'.$feed);
358
- else
359
- $Feed = get_option('powerpress_feed');
 
 
 
360
 
361
  // We made it this far, lets write stuff to the feed!
362
  echo '<!-- podcast_generator="Blubrry PowerPress/'. POWERPRESS_VERSION .'" -->'.PHP_EOL;
@@ -367,7 +363,7 @@ function powerpress_rss2_head()
367
  if( trim($Feed['itunes_new_feed_url']) )
368
  echo "\t<itunes:new-feed-url>". trim($Feed['itunes_new_feed_url']) .'</itunes:new-feed-url>'.PHP_EOL;
369
  }
370
- else if( trim($Feed['itunes_new_feed_url']) && ($feed == 'feed' || $feed == 'rss2') ) // If it is the default feed (We don't wnat to apply this to category or tag feeds
371
  {
372
  echo "\t<itunes:new-feed-url>". $Feed['itunes_new_feed_url'] .'</itunes:new-feed-url>'.PHP_EOL;
373
  }
@@ -377,8 +373,8 @@ function powerpress_rss2_head()
377
  else
378
  echo "\t".'<itunes:summary>'. powerpress_format_itunes_value( get_bloginfo('description'), 4000 ) .'</itunes:summary>'.PHP_EOL;
379
 
380
- if( $powerpress_feed['talent_name'] )
381
- echo "\t\t<itunes:author>" . wp_specialchars($powerpress_feed['talent_name']) . '</itunes:author>'.PHP_EOL;
382
 
383
  if( $powerpress_feed['explicit'] )
384
  echo "\t".'<itunes:explicit>' . $powerpress_feed['explicit'] . '</itunes:explicit>'.PHP_EOL;
@@ -398,10 +394,10 @@ function powerpress_rss2_head()
398
  if( $Feed['email'] )
399
  {
400
  echo "\t".'<itunes:owner>'.PHP_EOL;
401
- echo "\t\t".'<itunes:name>' . wp_specialchars($powerpress_feed['talent_name']) . '</itunes:name>'.PHP_EOL;
402
  echo "\t\t".'<itunes:email>' . wp_specialchars($Feed['email']) . '</itunes:email>'.PHP_EOL;
403
  echo "\t".'</itunes:owner>'.PHP_EOL;
404
- echo "\t".'<managingEditor>'. wp_specialchars($Feed['email'] .' ('. $powerpress_feed['talent_name'] .')') .'</managingEditor>'.PHP_EOL;
405
  }
406
 
407
  if( $Feed['copyright'] )
@@ -610,7 +606,7 @@ function powerpress_rss2_item()
610
  $EnclosureURL = trim($EnclosureURL);
611
  $EnclosureType = trim($EnclosureType);
612
  $EnclosureSize = trim($EnclosureSize);
613
- $author = $powerpress_feed['talent_name'];
614
  $explicit = $powerpress_feed['explicit'];
615
  $summary = false;
616
  $subtitle = false;
@@ -744,7 +740,7 @@ function powerpress_filter_rss_enclosure($content)
744
 
745
  add_filter('rss_enclosure', 'powerpress_filter_rss_enclosure');
746
 
747
- function powerpress_bloginfo_rss($content, $field)
748
  {
749
  if( powerpress_is_custom_podcast_feed() )
750
  {
@@ -819,10 +815,28 @@ function powerpress_init()
819
  if( $feed_slug != 'podcast' )
820
  add_feed($feed_slug, 'powerpress_do_podcast_feed');
821
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
822
  }
823
  }
824
 
825
- add_action('init', 'powerpress_init');
826
 
827
  // Load the general feed settings for feeds handled by powerpress
828
  function powerpress_load_general_feed_settings()
@@ -834,13 +848,20 @@ function powerpress_load_general_feed_settings()
834
 
835
  // Get the powerpress settings
836
  $GeneralSettings = get_option('powerpress_general');
 
 
 
837
  if( $GeneralSettings )
838
  {
839
  $feed_slug = get_query_var('feed');
840
 
841
  if( isset($GeneralSettings['custom_feeds']) && is_array($GeneralSettings['custom_feeds']) && isset($GeneralSettings['custom_feeds'][ $feed_slug ] ))
842
  {
843
- $Feed = get_option('powerpress_feed_'.$feed_slug);
 
 
 
 
844
  $powerpress_feed = array();
845
  $powerpress_feed['is_custom'] = true;
846
  $powerpress_feed['feed-slug'] = $feed_slug;
@@ -848,10 +869,10 @@ function powerpress_load_general_feed_settings()
848
  $powerpress_feed['default_url'] = rtrim($GeneralSettings['default_url'], '/') .'/';
849
  $explicit = array("no", "yes", "clean");
850
  $powerpress_feed['explicit'] = $explicit[$Feed['itunes_explicit']];
851
- if( $Feed['talent_name'] )
852
- $powerpress_feed['talent_name'] = $Feed['talent_name'];
853
  else
854
- $powerpress_feed['talent_name'] = get_bloginfo_rss('name');
855
  $powerpress_feed['enhance_itunes_summary'] = @$Feed['enhance_itunes_summary'];
856
  $powerpress_feed['posts_per_rss'] = $Feed['posts_per_rss'];
857
  }
@@ -859,25 +880,39 @@ function powerpress_load_general_feed_settings()
859
  {
860
  // One last check, we may still want to manage this feed, it's just not a custom feed...
861
  $Feed = get_option('powerpress_feed');
 
862
  // First, determine if powerpress should even be rewriting this feed...
863
  switch( $Feed['apply_to'] )
864
  {
865
  case 2: // RSS2 feed only
866
- if( $feed_slug != 'podcast' && isset($GLOBALS['wp_query']->query_vars) && count($GLOBALS['wp_query']->query_vars) > 1 )
867
- break; // This is not just an RSS2 feed...
 
 
 
 
 
 
 
 
 
 
 
 
 
868
  case 1: // All other feeds
869
  {
870
- $powerpress_feed = array();
871
  $powerpress_feed['is_custom'] = false; // ($feed_slug == 'podcast'?true:false);
872
  $powerpress_feed['feed-slug'] = $feed_slug;
873
  $powerpress_feed['process_podpress'] = $GeneralSettings['process_podpress']; // We don't touch podpress data for custom feeds
874
  $powerpress_feed['default_url'] = rtrim($GeneralSettings['default_url'], '/') .'/';
875
  $explicit = array("no", "yes", "clean");
876
  $powerpress_feed['explicit'] = $explicit[$Feed['itunes_explicit']];
877
- if( $Feed['talent_name'] )
878
- $powerpress_feed['talent_name'] = $Feed['talent_name'];
879
  else
880
- $powerpress_feed['talent_name'] = get_bloginfo_rss('name');
881
  $powerpress_feed['enhance_itunes_summary'] = @$Feed['enhance_itunes_summary'];
882
  $powerpress_feed['posts_per_rss'] = $Feed['posts_per_rss'];
883
  }; break;
@@ -1259,6 +1294,18 @@ function powerpress_byte_size($ppbytes)
1259
  return $ppsize;
1260
  }
1261
 
 
 
 
 
 
 
 
 
 
 
 
 
1262
  function powerpress_readable_duration($duration, $include_hour=false)
1263
  {
1264
  $seconds = 0;
@@ -1272,12 +1319,12 @@ function powerpress_readable_duration($duration, $include_hour=false)
1272
 
1273
  $hours = 0;
1274
  $minutes = 0;
1275
- if( $seconds > (60*60) )
1276
  {
1277
  $hours = floor( $seconds /(60*60) );
1278
  $seconds -= (60*60*$hours);
1279
  }
1280
- if( $seconds > (60) )
1281
  {
1282
  $minutes = floor( $seconds /(60) );
1283
  $seconds -= (60*$minutes);
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://www.blubrry.com/powerpress/
5
  Description: <a href="http://www.blubrry.com/powerpress/" target="_blank">Blubrry PowerPress</a> adds podcasting support to your blog. Features include: media player, 3rd party statistics and iTunes integration.
6
+ Version: 0.7.2
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Change Log:
29
  */
30
 
31
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
32
+ define('POWERPRESS_VERSION', '0.7.2' );
33
 
34
  /////////////////////////////////////////////////////
35
  // The following define options should be placed in your
49
  if( !defined('POWERPRESS_DOWNLOAD_TEXT') )
50
  define('POWERPRESS_DOWNLOAD_TEXT', __('Download') );
51
 
 
 
52
  // Load players in the footer of the page, improves page load times but requires wp_footer() function to be included in WP Theme.
53
  //define('POWERPRESS_USE_FOOTER', true);
54
  // You can also define the delay.
56
 
57
  // Set whether players should be loaded using the page onload event
58
  if( !defined('POWERPRESS_USE_ONLOAD') ) // Add define('POWERPRESS_USE_ONLOAD', false); to your wp-config.php to turn this feature off
59
+ define('POWERPRESS_USE_ONLOAD', false);
60
 
61
  // define how much of a delay should exist when media players are loaded
62
  if( !defined('POWERPRESS_USE_ONLOAD_DELAY') ) // Add define('POWERPRESS_USE_ONLOAD_DELAY', 1000); to your wp-config.php to set a full 1 second delay.
63
  define('POWERPRESS_USE_ONLOAD_DELAY', 500);
64
 
 
 
 
65
  // Display custom play image for quicktime media. Applies to on page player only.
66
  //define('POWERPRESS_PLAY_IMAGE', 'http://www.blubrry.com/themes/blubrry/images/player/PlayerBadge150x50NoBorder.jpg');
67
 
171
  if( !isset($Powerpress['podcast_link']) )
172
  $Powerpress['podcast_link'] = 1;
173
 
 
 
 
 
 
 
174
  // The blog owner doesn't want anything displayed, so don't bother wasting anymore CPU cycles
175
  if( $Powerpress['display_player'] == 0 )
176
  return $content;
287
  // PowerPress settings:
288
  $Powerpress = get_option('powerpress_general');
289
 
290
+ if( $Powerpress['player_function'] ) // Don't include the player in the header if it is not needed...
291
+ {
292
+ $PowerpressPluginURL = powerpress_get_root_url();
293
  ?>
294
  <script type="text/javascript" src="<?php echo $PowerpressPluginURL; ?>player.js"></script>
295
  <script type="text/javascript">
296
  <?php
297
+ $player_image_url = POWERPRESS_PLAY_IMAGE;
298
+ if( strstr($player_image_url, 'http://') !== $player_image_url )
299
+ $player_image_url = powerpress_get_root_url().$player_image_url;
300
 
301
+ if( $Powerpress['player_function'] == 4 || $Powerpress['player_function'] == 5 ) // Links would imply only one player in the page
302
+ echo 'powerpress_player_init(\''. $PowerpressPluginURL .'\',\''. $player_image_url .'\',true);'.PHP_EOL;
303
+ else
304
+ echo 'powerpress_player_init(\''. $PowerpressPluginURL .'\',\''. $player_image_url .'\');'.PHP_EOL;
305
+
306
+ if( isset($Powerpress['player_width']) && isset($Powerpress['player_height']) && isset($Powerpress['player_width_audio']) )
307
+ echo 'powerpress_player_size('. (int)trim($Powerpress['player_width']) .','. (int)trim($Powerpress['player_height']) .','. (int)trim($Powerpress['player_width_audio']) .');'.PHP_EOL;
308
+
309
+ if( defined('POWERPRESS_USE_ONLOAD') && POWERPRESS_USE_ONLOAD )
310
+ {
311
+ echo 'powerpress_addLoadEvent(powerpress_onload);'.PHP_EOL;
312
+ echo "var g_bpLoadDelay = ".POWERPRESS_USE_ONLOAD_DELAY.";\n";
313
+ }
314
  ?>
315
  </script>
316
  <style type="text/css">
320
  }
321
  </style>
322
  <?php
323
+ }
324
  }
325
 
326
  add_action('wp_head', 'powerpress_header');
343
  if( !powerpress_is_podcast_feed() )
344
  return; // Not a feed we manage
345
 
346
+ $feed_slug = get_query_var( 'feed' );
347
 
348
+ $Feed = get_option('powerpress_feed');
349
  if( powerpress_is_custom_podcast_feed() )
350
+ {
351
+ $CustomFeed = get_option('powerpress_feed_'.$feed_slug);
352
+ if( $CustomFeed )
353
+ $Feed = powerpress_merge_empty_feed_settings($CustomFeed, $Feed);
354
+ }
355
+
356
 
357
  // We made it this far, lets write stuff to the feed!
358
  echo '<!-- podcast_generator="Blubrry PowerPress/'. POWERPRESS_VERSION .'" -->'.PHP_EOL;
363
  if( trim($Feed['itunes_new_feed_url']) )
364
  echo "\t<itunes:new-feed-url>". trim($Feed['itunes_new_feed_url']) .'</itunes:new-feed-url>'.PHP_EOL;
365
  }
366
+ else if( trim($Feed['itunes_new_feed_url']) && ($feed_slug == 'feed' || $feed_slug == 'rss2') ) // If it is the default feed (We don't wnat to apply this to category or tag feeds
367
  {
368
  echo "\t<itunes:new-feed-url>". $Feed['itunes_new_feed_url'] .'</itunes:new-feed-url>'.PHP_EOL;
369
  }
373
  else
374
  echo "\t".'<itunes:summary>'. powerpress_format_itunes_value( get_bloginfo('description'), 4000 ) .'</itunes:summary>'.PHP_EOL;
375
 
376
+ if( $powerpress_feed['itunes_talent_name'] )
377
+ echo "\t\t<itunes:author>" . wp_specialchars($powerpress_feed['itunes_talent_name']) . '</itunes:author>'.PHP_EOL;
378
 
379
  if( $powerpress_feed['explicit'] )
380
  echo "\t".'<itunes:explicit>' . $powerpress_feed['explicit'] . '</itunes:explicit>'.PHP_EOL;
394
  if( $Feed['email'] )
395
  {
396
  echo "\t".'<itunes:owner>'.PHP_EOL;
397
+ echo "\t\t".'<itunes:name>' . wp_specialchars($powerpress_feed['itunes_talent_name']) . '</itunes:name>'.PHP_EOL;
398
  echo "\t\t".'<itunes:email>' . wp_specialchars($Feed['email']) . '</itunes:email>'.PHP_EOL;
399
  echo "\t".'</itunes:owner>'.PHP_EOL;
400
+ echo "\t".'<managingEditor>'. wp_specialchars($Feed['email'] .' ('. $powerpress_feed['itunes_talent_name'] .')') .'</managingEditor>'.PHP_EOL;
401
  }
402
 
403
  if( $Feed['copyright'] )
606
  $EnclosureURL = trim($EnclosureURL);
607
  $EnclosureType = trim($EnclosureType);
608
  $EnclosureSize = trim($EnclosureSize);
609
+ $author = $powerpress_feed['itunes_talent_name'];
610
  $explicit = $powerpress_feed['explicit'];
611
  $summary = false;
612
  $subtitle = false;
740
 
741
  add_filter('rss_enclosure', 'powerpress_filter_rss_enclosure');
742
 
743
+ function powerpress_bloginfo_rss($content, $field = '')
744
  {
745
  if( powerpress_is_custom_podcast_feed() )
746
  {
815
  if( $feed_slug != 'podcast' )
816
  add_feed($feed_slug, 'powerpress_do_podcast_feed');
817
  }
818
+
819
+ // FeedSmith support...
820
+ if( isset($_GET['feed']) )
821
+ {
822
+ switch($_GET['feed'])
823
+ {
824
+ case '':
825
+ case 'feed':
826
+ case 'atom':
827
+ case 'rss':
828
+ case 'comments-rss2':
829
+ case 'rss2': break; // Let FeedSmith redirect these feeds if it wants
830
+ default: { // Otherwise lets remove FeedSmith
831
+ if( has_action('init', 'ol_check_url') !== false )
832
+ remove_action('init', 'ol_check_url');
833
+ }
834
+ }
835
+ }
836
  }
837
  }
838
 
839
+ add_action('init', 'powerpress_init', 9);
840
 
841
  // Load the general feed settings for feeds handled by powerpress
842
  function powerpress_load_general_feed_settings()
848
 
849
  // Get the powerpress settings
850
  $GeneralSettings = get_option('powerpress_general');
851
+ if( !isset($GeneralSettings['custom_feeds']['podcast']) )
852
+ $GeneralSettings['custom_feeds']['podcast'] = 'Podcast Feed'; // Fixes scenario where the user never configured the custom default podcast feed.
853
+
854
  if( $GeneralSettings )
855
  {
856
  $feed_slug = get_query_var('feed');
857
 
858
  if( isset($GeneralSettings['custom_feeds']) && is_array($GeneralSettings['custom_feeds']) && isset($GeneralSettings['custom_feeds'][ $feed_slug ] ))
859
  {
860
+ $Feed = get_option('powerpress_feed'); // Get overall feed settings
861
+ $FeedCustom = get_option('powerpress_feed_'.$feed_slug); // Get custom feed specific settings
862
+ if( $FeedCustom )
863
+ $Feed = powerpress_merge_empty_feed_settings($FeedCustom, $Feed);
864
+
865
  $powerpress_feed = array();
866
  $powerpress_feed['is_custom'] = true;
867
  $powerpress_feed['feed-slug'] = $feed_slug;
869
  $powerpress_feed['default_url'] = rtrim($GeneralSettings['default_url'], '/') .'/';
870
  $explicit = array("no", "yes", "clean");
871
  $powerpress_feed['explicit'] = $explicit[$Feed['itunes_explicit']];
872
+ if( $Feed['itunes_talent_name'] )
873
+ $powerpress_feed['itunes_talent_name'] = $Feed['itunes_talent_name'];
874
  else
875
+ $powerpress_feed['itunes_talent_name'] = get_bloginfo_rss('name');
876
  $powerpress_feed['enhance_itunes_summary'] = @$Feed['enhance_itunes_summary'];
877
  $powerpress_feed['posts_per_rss'] = $Feed['posts_per_rss'];
878
  }
880
  {
881
  // One last check, we may still want to manage this feed, it's just not a custom feed...
882
  $Feed = get_option('powerpress_feed');
883
+ $wp = $GLOBALS['wp_query'];
884
  // First, determine if powerpress should even be rewriting this feed...
885
  switch( $Feed['apply_to'] )
886
  {
887
  case 2: // RSS2 feed only
888
+ {
889
+ if( $feed_slug != 'feed' && $feed_slug != 'rss2')
890
+ break; // We're only adding podcasts to the rss2 feed in this situation
891
+
892
+ if( $wp->query_vars['category_name'] != '' ) // don't touch the category feeds...
893
+ break;
894
+
895
+ if( $wp->query_vars['tag'] != '' ) // don't touch the tag feeds...
896
+ break;
897
+
898
+ if( $wp->query_vars['withcomments'] ) // don't touch the comments feeds...
899
+ break;
900
+
901
+ // Okay we must be working with the normal rss2 feed...
902
+ } // important: no break here!
903
  case 1: // All other feeds
904
  {
905
+ $powerpress_feed = array(); // Only store what's needed for each feed item
906
  $powerpress_feed['is_custom'] = false; // ($feed_slug == 'podcast'?true:false);
907
  $powerpress_feed['feed-slug'] = $feed_slug;
908
  $powerpress_feed['process_podpress'] = $GeneralSettings['process_podpress']; // We don't touch podpress data for custom feeds
909
  $powerpress_feed['default_url'] = rtrim($GeneralSettings['default_url'], '/') .'/';
910
  $explicit = array("no", "yes", "clean");
911
  $powerpress_feed['explicit'] = $explicit[$Feed['itunes_explicit']];
912
+ if( $Feed['itunes_talent_name'] )
913
+ $powerpress_feed['itunes_talent_name'] = $Feed['itunes_talent_name'];
914
  else
915
+ $powerpress_feed['itunes_talent_name'] = get_bloginfo_rss('name');
916
  $powerpress_feed['enhance_itunes_summary'] = @$Feed['enhance_itunes_summary'];
917
  $powerpress_feed['posts_per_rss'] = $Feed['posts_per_rss'];
918
  }; break;
1294
  return $ppsize;
1295
  }
1296
 
1297
+ // Merges settings where $S
1298
+ function powerpress_merge_empty_feed_settings($CustomFeedSettings, $FeedSettings)
1299
+ {
1300
+ while( list($key,$value) = each($CustomFeedSettings) )
1301
+ {
1302
+ if( $value === '' && $FeedSettings[$key] != $value )
1303
+ $CustomFeedSettings[$key] = $FeedSettings[$key];
1304
+ }
1305
+
1306
+ return $CustomFeedSettings;
1307
+ }
1308
+
1309
  function powerpress_readable_duration($duration, $include_hour=false)
1310
  {
1311
  $seconds = 0;
1319
 
1320
  $hours = 0;
1321
  $minutes = 0;
1322
+ if( $seconds >= (60*60) )
1323
  {
1324
  $hours = floor( $seconds /(60*60) );
1325
  $seconds -= (60*60*$hours);
1326
  }
1327
+ if( $seconds >= (60) )
1328
  {
1329
  $minutes = floor( $seconds /(60) );
1330
  $seconds -= (60*$minutes);
powerpressadmin-appearance.php CHANGED
@@ -5,6 +5,7 @@ function powerpressadmin_appearance()
5
  {
6
  $General = powerpress_get_settings('powerpress_general');
7
  ?>
 
8
  <h2><?php echo __("Appearance Settings"); ?></h2>
9
 
10
  <p style="margin-bottom: 0;">Configure how your media will be found on your blog.</p>
5
  {
6
  $General = powerpress_get_settings('powerpress_general');
7
  ?>
8
+ <input type="hidden" name="action" value="powerpress-save-appearance" />
9
  <h2><?php echo __("Appearance Settings"); ?></h2>
10
 
11
  <p style="margin-bottom: 0;">Configure how your media will be found on your blog.</p>
powerpressadmin-basic.php CHANGED
@@ -5,6 +5,7 @@ function powerpress_admin_basic()
5
  $General = powerpress_get_settings('powerpress_general');
6
  $AdvancedMode = $General['advanced_mode'];
7
  ?>
 
8
  <h2><?php echo __("Basic Settings"); ?></h2>
9
 
10
  <table class="form-table">
@@ -78,7 +79,7 @@ while( list($value,$desc) = each($options) )
78
  <p>Click the following link to <a href="https://phobos.apple.com/WebObjects/MZFinance.woa/wa/publishPodcast" target="_blank" title="Publish a Podcast on iTunes">Publish a Podcast on iTunes</a>.
79
  Once your podcast is listed on iTunes, enter your one-click subscription URL above.
80
  </p>
81
- <p>e.g. http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=000000000</p>
82
  </td>
83
  </tr>
84
 
@@ -108,6 +109,8 @@ while( list($value,$desc) = each($options) )
108
  $ping_url = str_replace(
109
  array( 'https://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
110
  'http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
 
 
111
  'https://www.itunes.com/podcast?id=',
112
  'http://www.itunes.com/podcast?id='),
113
  'https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast?id=', $General['itunes_url']);
5
  $General = powerpress_get_settings('powerpress_general');
6
  $AdvancedMode = $General['advanced_mode'];
7
  ?>
8
+ <input type="hidden" name="action" value="powerpress-save-basic" />
9
  <h2><?php echo __("Basic Settings"); ?></h2>
10
 
11
  <table class="form-table">
79
  <p>Click the following link to <a href="https://phobos.apple.com/WebObjects/MZFinance.woa/wa/publishPodcast" target="_blank" title="Publish a Podcast on iTunes">Publish a Podcast on iTunes</a>.
80
  Once your podcast is listed on iTunes, enter your one-click subscription URL above.
81
  </p>
82
+ <p>e.g. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=000000000</p>
83
  </td>
84
  </tr>
85
 
109
  $ping_url = str_replace(
110
  array( 'https://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
111
  'http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
112
+ 'https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
113
+ 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
114
  'https://www.itunes.com/podcast?id=',
115
  'http://www.itunes.com/podcast?id='),
116
  'https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast?id=', $General['itunes_url']);
powerpressadmin-editfeed.php CHANGED
@@ -35,10 +35,12 @@ function powerpress_admin_editfeed($feed_slug=false)
35
  ?>
36
  <h2><?php echo $FeedTitle; ?></h2>
37
  <?php if( $feed_slug ) { ?>
 
38
  <p style="margin-bottom: 0;">
39
  <?php _e('Configure your custom podcast feed.'); ?>
40
  </p>
41
  <?php } else { ?>
 
42
  <p style="margin-bottom: 0;">
43
  <?php _e('Configure your feeds to support podcasting.'); ?>
44
  </p>
@@ -322,6 +324,7 @@ while( list($value,$desc) = each($explicit) )
322
 
323
  <p>Place the URL to the iTunes image above. e.g. http://mysite.com/images/itunes.jpg<br /><br />iTunes prefers square .jpg or .png images that are at 600 x 600 pixels (prevously 300 x 300), which is different than what is specified for the standard RSS image.</p>
324
 
 
325
  <?php if( $SupportUploads ) { ?>
326
  <p><input name="itunes_image_checkbox" type="checkbox" onchange="powerpress_show_field('itunes_image_upload', this.checked)" value="1" /> Upload new image </p>
327
  <div style="display:none" id="itunes_image_upload">
35
  ?>
36
  <h2><?php echo $FeedTitle; ?></h2>
37
  <?php if( $feed_slug ) { ?>
38
+ <input type="hidden" name="action" value="powerpress-save-customfeed" />
39
  <p style="margin-bottom: 0;">
40
  <?php _e('Configure your custom podcast feed.'); ?>
41
  </p>
42
  <?php } else { ?>
43
+ <input type="hidden" name="action" value="powerpress-save-feedsettings" />
44
  <p style="margin-bottom: 0;">
45
  <?php _e('Configure your feeds to support podcasting.'); ?>
46
  </p>
324
 
325
  <p>Place the URL to the iTunes image above. e.g. http://mysite.com/images/itunes.jpg<br /><br />iTunes prefers square .jpg or .png images that are at 600 x 600 pixels (prevously 300 x 300), which is different than what is specified for the standard RSS image.</p>
326
 
327
+ <p>Note: It may take some time (days or even a month) for iTunes to cache modified or replaced iTunes images in the iTunes Podcast Directory. Please contact <a href="http://www.apple.com/support/itunes/">iTunes Support</a> if you are having issues with your image changes not appearing in iTunes.</p>
328
  <?php if( $SupportUploads ) { ?>
329
  <p><input name="itunes_image_checkbox" type="checkbox" onchange="powerpress_show_field('itunes_image_upload', this.checked)" value="1" /> Upload new image </p>
330
  <div style="display:none" id="itunes_image_upload">
powerpressadmin-podpress.php CHANGED
@@ -19,6 +19,7 @@
19
  $query .= "FROM {$wpdb->posts} AS p ";
20
  $query .= "INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id ";
21
  $query .= "WHERE pm.meta_key = 'podPressMedia' ";
 
22
  $query .= "GROUP BY p.ID ";
23
  $query .= "ORDER BY p.post_date DESC ";
24
 
@@ -237,7 +238,7 @@
237
  {
238
  if( $results['feeds_required'] > count($Settings['custom_feeds']) )
239
  {
240
- powerpress_page_message_add_error( sprintf(__('You will need %d Custom Podcast Feeds to continue.'), $results['feeds_required']) );
241
  powerpress_page_message_print();
242
  }
243
  else
@@ -564,6 +565,14 @@ function check_radio_selection(obj, PostID, FileIndex)
564
  <p class="submit">
565
  <input type="submit" name="Submit" id="powerpress_import_button" class="button-primary" value="Import Episodes" />
566
  </p>
 
 
 
 
 
 
 
 
567
  <?php
568
  }
569
 
@@ -590,6 +599,33 @@ function check_radio_selection(obj, PostID, FileIndex)
590
  <?php
591
  }
592
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
593
  ?>
594
  <!-- start footer -->
595
  <?php
19
  $query .= "FROM {$wpdb->posts} AS p ";
20
  $query .= "INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id ";
21
  $query .= "WHERE pm.meta_key = 'podPressMedia' ";
22
+ $query .= "AND p.post_type != 'revision' ";
23
  $query .= "GROUP BY p.ID ";
24
  $query .= "ORDER BY p.post_date DESC ";
25
 
238
  {
239
  if( $results['feeds_required'] > count($Settings['custom_feeds']) )
240
  {
241
+ powerpress_page_message_add_error( sprintf(__('We found blog posts that have %d media files. You will need to create %d more Custom Feed%s in order to continue.'), $results['feeds_required'], $results['feeds_required'] - count($Settings['custom_feeds']), (( ( $results['feeds_required'] - count($Settings['custom_feeds']) ) > 1 )?'s':'') ) );
242
  powerpress_page_message_print();
243
  }
244
  else
565
  <p class="submit">
566
  <input type="submit" name="Submit" id="powerpress_import_button" class="button-primary" value="Import Episodes" />
567
  </p>
568
+ <?php
569
+ }
570
+ else
571
+ {
572
+ ?>
573
+ <p class="submit">
574
+ <input type="button" name="Submit" id="powerpress_import_button" class="button-primary" value="Import Episodes" onclick="alert('There are no PodPress episodes found to import.');" />
575
+ </p>
576
  <?php
577
  }
578
 
599
  <?php
600
  }
601
  }
602
+ else
603
+ {
604
+ ?>
605
+ <div class="error powerpress-error">
606
+ We found blog posts that have <?php echo $results['feeds_required']; ?> media files.
607
+
608
+ You will need to create <?php echo ( $results['feeds_required'] - count($Settings['custom_feeds']) ); ?> more Custom Feed<?php if( ( $results['feeds_required'] - count($Settings['custom_feeds']) ) > 1 ) echo 's'; ?> in order to continue.
609
+ </div>
610
+ <p>
611
+ Blubrry PowerPress does not allow you to include multiple media files for one feed item (blog post).
612
+ This is because each podcatcher handles multiple enclosures in feeds differently. iTunes will download
613
+ the first enclosure that it sees in the feed ignoring the rest. Other podcatchers and podcasting directories
614
+ either pick up the first enclosure or the last in each post item. This inconsistency combined with the fact that
615
+ <a href="http://www.reallysimplesyndication.com/2004/12/21" target="_blank">Dave Winer does not recommend multiple enclosures</a>
616
+ and the
617
+ <a href="http://www.feedvalidator.org/docs/warning/DuplicateEnclosure.html" target="_blank">FeedValidator.org recommendation against it</a>
618
+ is why Blubrry PowerPress does not support them.
619
+ </p>
620
+ <p>
621
+ As a alternative, PowerPress allows you to create additional <a href="<?php echo admin_url('admin.php?page=powerpress/powerpressadmin_customfeeds.php'); ?>">Custom Podcast Feeds</a> to associate additional media files in a blog post to specific feeds.
622
+ </p>
623
+ <p class="submit">
624
+ <input type="button" name="Submit" id="powerpress_import_button" class="button-primary" value="Import Episodes" onclick="alert('We found blog posts that have <?php echo $results['feeds_required']; ?> media files.\n\nYou will need to create <?php echo ( $results['feeds_required'] - count($Settings['custom_feeds']) ); ?> more Custom Feed<?php if( ( $results['feeds_required'] - count($Settings['custom_feeds']) ) > 1 ) echo 's'; ?> in order to continue. ');" />
625
+ </p>
626
+
627
+ <?php
628
+ }
629
  ?>
630
  <!-- start footer -->
631
  <?php
powerpressadmin.php CHANGED
@@ -132,6 +132,12 @@ function powerpress_admin_init()
132
  // Update the settings in the database:
133
  if( $General )
134
  {
 
 
 
 
 
 
135
  // Wordpress adds slashes to everything, but since we're storing everything serialized, lets remove them...
136
  $General = powerpress_stripslashes($General);
137
  powerpress_save_settings($General);
@@ -149,17 +155,29 @@ function powerpress_admin_init()
149
  $wp_rewrite->flush_rules();
150
 
151
  // Settings saved successfully
152
- if( $FeedSlug )
153
- powerpress_page_message_add_notice( __('Blubrry PowerPress settings saved.') );
154
- else
155
- powerpress_page_message_add_notice( __('Blubrry PowerPress feed settings saved.') );
 
 
 
 
 
 
 
 
 
 
 
 
156
 
157
  if( @$_POST['TestiTunesPing'] == 1 )
158
  {
159
  $PingResults = powerpress_ping_itunes($General['itunes_url']);
160
  if( @$PingResults['success'] )
161
  {
162
- powerpress_page_message_add_notice( 'iTunes Ping Successful. Podcast Feed URL:'. $PingResults['feed_url'] );
163
  }
164
  else
165
  {
@@ -915,19 +933,18 @@ add_action('shutdown','powerpress_shutdown'); // disable the auto enclosure proc
915
  */
916
  function powerpress_ping_itunes($iTunes_url)
917
  {
918
- if( strpos($iTunes_url, 'phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=' ) === false )
 
919
  return array('error'=>true, 'content'=>'iTunes URL required to ping iTunes.');
920
 
 
 
921
  // convert: https://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=
922
  // to: https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast?id=
923
- $ping_url = str_replace(
924
- array( 'https://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
925
- 'http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',
926
- 'https://www.itunes.com/podcast?id=',
927
- 'http://www.itunes.com/podcast?id='),
928
- 'https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast?id=', $iTunes_url);
929
 
930
- $tempdata = wp_remote_fopen($ping_url);
 
931
 
932
  if( $tempdata == false )
933
  return array('error'=>true, 'content'=>'Unable to connect to iTunes ping server.');
@@ -942,6 +959,36 @@ function powerpress_ping_itunes($iTunes_url)
942
  return array('success'=>true, 'content'=>$tempdata, 'feed_url'=>trim($FeedURL), 'podcast_id'=>trim($PodcastID) );
943
  }
944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
945
  // Import podpress settings
946
  function powerpress_admin_import_podpress_settings()
947
  {
132
  // Update the settings in the database:
133
  if( $General )
134
  {
135
+ if( $_POST['action'] == 'powerpress-save-appearance' )
136
+ {
137
+ if( !isset($General['display_player_excerpt']) ) // If we are modifying appearance settings but this option was not checked...
138
+ $General['display_player_excerpt'] = 0; // Set it to zero.
139
+ }
140
+
141
  // Wordpress adds slashes to everything, but since we're storing everything serialized, lets remove them...
142
  $General = powerpress_stripslashes($General);
143
  powerpress_save_settings($General);
155
  $wp_rewrite->flush_rules();
156
 
157
  // Settings saved successfully
158
+ switch( $_POST['action'] )
159
+ {
160
+ case 'powerpress-save-appearance': {
161
+ powerpress_page_message_add_notice( __('Blubrry PowerPress Appearance settings saved.') );
162
+ }; break;
163
+ case 'powerpress-save-customfeed': {
164
+ powerpress_page_message_add_notice( __('Blubrry PowerPress Custom Feed settings saved.') );
165
+ }; break;
166
+ case 'powerpress-save-feedsettings': {
167
+ powerpress_page_message_add_notice( __('Blubrry PowerPress Feed settings saved.') );
168
+ }; break;
169
+ case 'powerpress-save-basic':
170
+ default: {
171
+ powerpress_page_message_add_notice( __('Blubrry PowerPress settings saved.') );
172
+ }; break;
173
+ }
174
 
175
  if( @$_POST['TestiTunesPing'] == 1 )
176
  {
177
  $PingResults = powerpress_ping_itunes($General['itunes_url']);
178
  if( @$PingResults['success'] )
179
  {
180
+ powerpress_page_message_add_notice( 'iTunes Ping Successful. Podcast Feed URL: '. $PingResults['feed_url'] );
181
  }
182
  else
183
  {
933
  */
934
  function powerpress_ping_itunes($iTunes_url)
935
  {
936
+ // Pull the iTunes FEEDID from the URL...
937
+ if( !preg_match('/id=(\d+)/', $iTunes_url, $matches) )
938
  return array('error'=>true, 'content'=>'iTunes URL required to ping iTunes.');
939
 
940
+ $FEEDID = $matches[1];
941
+
942
  // convert: https://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=
943
  // to: https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast?id=
944
+ $ping_url = sprintf('https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast?id=%d', $FEEDID );
 
 
 
 
 
945
 
946
+ //$tempdata = wp_remote_fopen($ping_url);
947
+ $tempdata = powerpress_remote_fopen($ping_url);
948
 
949
  if( $tempdata == false )
950
  return array('error'=>true, 'content'=>'Unable to connect to iTunes ping server.');
959
  return array('success'=>true, 'content'=>$tempdata, 'feed_url'=>trim($FeedURL), 'podcast_id'=>trim($PodcastID) );
960
  }
961
 
962
+ function powerpress_remote_fopen($url)
963
+ {
964
+ if( function_exists( 'curl_init' ) )
965
+ {
966
+ $curl = curl_init();
967
+ curl_setopt($curl, CURLOPT_URL, $url);
968
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
969
+ curl_setopt($curl, CURLOPT_HEADER, 0);
970
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // Follow location redirection
971
+ curl_setopt($curl, CURLOPT_MAXREDIRS, 5); // Location redirection limit
972
+ curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2 ); // Connect time out
973
+ curl_setopt($curl, CURLOPT_TIMEOUT, 5); // The maximum number of seconds to execute.
974
+ curl_setopt($curl, CURLOPT_USERAGENT, 'Blubrry PowerPress/'.POWERPRESS_VERSION);
975
+ if( strtolower(substr($url, 0, 5)) == 'https' )
976
+ {
977
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
978
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
979
+ }
980
+ $content = curl_exec($curl);
981
+ $error = curl_errno($curl);
982
+ curl_close($curl);
983
+ if( $error )
984
+ return false;
985
+ return $content;
986
+ }
987
+
988
+ // Use the bullt-in remote_fopen...
989
+ return wp_remote_fopen($url);
990
+ }
991
+
992
  // Import podpress settings
993
  function powerpress_admin_import_podpress_settings()
994
  {
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Angelo Mandato, Blubrry.com
3
  Tags: podcast, podcasting, itunes, enclosure, zune, iphone, audio, video, rss2, feed, player, media, rss
4
  Requires at least: 2.5.0
5
  Tested up to: 2.7.1
6
- Stable tag: 0.7.1
7
 
8
  Add podcasting support to your blog.
9
 
@@ -44,7 +44,9 @@ http://help.blubrry.com/blubrry-powerpress/
44
  == Frequently Asked Questions ==
45
 
46
  = Why doesn't Blubrry PowerPress support multiple enclosures? =
47
- Blubrry PowerPress does not support multiple enclosures in one blog post. This is because each podcatching application handles multiple enclosures differently. iTunes will download the first enclosure that it sees in the feed ignoring the rest. Other podcatchers and podcasting directories either pick up the first enclosure or the last in each post item. This inconsistency combined with the fact that [Dave Winer does not recommend multiple enclosures](http://www.reallysimplesyndication.com/2004/12/21) and the [FeedValidator.org recommendation against it](http://www.feedvalidator.org/docs/warning/DuplicateEnclosure.html) is why the Blubrry PowerPress does not support them.
 
 
48
 
49
  = Why doesn't Blubrry PowerPress include media statistics? =
50
  Blubrry PowerPress does not include media statistics. This is not because Blubrry has its own statistics service, although that's a good reason by itself. Maintaining and calculating statistics is a resource and server intensive task that would add bloat to an otherwise lightweight Wordpress podcasting plugin. We recommend you use your media hosting's statistics and you're more than welcome to use the [Blubrry Statistics service](http://www.blubrry.com/podcast_statistics/) as well.
@@ -64,63 +66,67 @@ http://help.blubrry.com/blubrry-powerpress/
64
 
65
  == Changelog ==
66
 
67
- 0.2 released on 08/11/2008
68
- Initial release of Blubrry PowerPress
69
 
70
- 0.2.1 released on 09/17/2008
71
- Fixed bugs: itunes:subtitle bug, itunes:summary is now enabled by default, add ending trailing slash to media url if missing, and copy blubrry keyword from podpress fix.
 
72
 
73
- 0.3.0 released on 09/24/2008
74
- New features: Added important feeds list in feed settings, logic to prevent stats redirect duplication and added podcast only feed.
75
 
76
- 0.3.1 released on 10/02/2008
77
- Fixed bug and added enhancements: iTunes subtitle, keywords and summary values now properly escape html special characters such as &nbsp; added define for adding itunes:new-feed-url tag, added define to display player for legacy Podpress episodes only.
78
 
79
- 0.3.2 released on 10/05/2008
80
- Added alternative logic for those who host their blogs on servers with allow _ url _ fopen turned off.
81
 
82
- 0.4.0 released on 10/21/2008
83
- Added two new play options adding 'play on page' links with and without play in new window links and now use a customizable play image for quicktime formatted media. Image may be customized by adding a define('POWERPRESS _ PLAY _ IMAGE', 'URL to image') to wp config file.
84
 
85
- 0.4.1 released on 10/24/2008
86
- Fixed auto-play bug found in last update, only affected quicktime files with the play on page option.
87
 
88
- 0.4.2 released on 11/02/2008
89
- Fixed quicktime in-page player bug, fixed bug which caused itunes keywords and subtitle to be blank and incremented version number.
90
 
91
- 0.5.0 released on 11/26/2008
92
- Added options to report media duration and file size next to download links. Removed optional defines POWERPRESS _ PLUGIN _ PATH and POWERPRESS _ ITEM _ SUMMARY, defines no longer necessary. Added itunes:author and itunes:subtitle to header portion of podcast feeds and itunes:summary to post items. No longer removing quotes or extra spaces from itunes summary. Player auto-play bug fixed when quicktime files mixed with mp3s. Added new option to ping iTunes in a new browser window. Verify flash player check added, Wordpress auto plugin update will corrupt the flash player. This bug is fixed in Wordpress 2.7 beta 2 and newer. Media URL now displays a warning if the value contains characters which may cause problems.
 
 
 
93
 
94
  0.5.1 released on 12/10/2008
95
  Added podcast to pages option (Thanks @Frumph), added code to make sure the itunes:subtitle, keywords and summary feed tags never exceed their size limits.
96
 
97
- 0.5.2 released on 12/14/2008
98
- Fixed bug with the feed channel itunes:summary being limited to 255 characters, the limit is now set to 4,000.
99
 
100
- 0.6.0 released on 12/17/2008
101
- Fixed bug with podcast feed in Wordpress 2.7, added defaults for file size and duration, and added iTunes New Feed URL option.
102
 
103
- 0.6.1 released on 01/20/2009
104
- Player now handles Windows Media (wmv) in Firefox, offering link to preferred Firefox plugin, now using the wp_specialchars() function for adding entities to feed values, fix problem with themes using excerpts not displaying the player correctly (Thanks @wayofthegeek for your help), and a number of other syntactical changes.
105
 
106
- 0.6.2 released on 01/26/2009
107
- Added option to reset rewrite rules when settings saved to fix problem with podcast feed returning 404, logic added to prevent FeedSmith plugin from redirecting podcast feed, and added support for the Kimili Flash Embed plugin
108
 
109
- 0.6.3 released on 02/16/2009
110
- Added new options to load all javascript for players in the wp_footer() function. Options are available as defines to add to the wp-config.php and are documented near the top of the powerpress.php. Added option in settings to display player in excerpts. Added code to repair corrupted Podpress data for displaying previously created podpress episodes. Note: Podpress data corruption was originally caused by previous versions of Podpress. Added code to prevent Wordpress from auto adding enclosures created from links to media found in the blog post.
111
 
112
- 0.6.4 released on 02/16/2009
113
- Fixed bug where post_password_required() function does not exist, bug only affects users using Wordpress blogs older than version 2.7.
114
 
115
- 0.6.5 released on 02/20/2009
116
- Fixed warning from being printed when v0.6.3/v0.6.4 used with PHP4. Bug only affected users using PHP4.
117
 
118
- 0.7.0 released on 03/10/2009
119
- Beta release only intended for a handfull of beta testers. For full list of changes, please refer to version 0.7.1
 
 
 
120
 
121
- 0.7.1 released on 03/11/2009
122
- Bugs: Improved flash player loading on pages with multiple podcast episodes, Detecting file size when specifying duration bug fixed. Fixed bug where duration would sometimes save minutes over 60 rather than rolling over one hour.
123
- Features: Added new Simple and Advanced Modes. Advance mode adds 5 new pages (Basic, Appearance, Feed Settings, Custom Feeds and Tools). New Edit Post settings section added which allows user to toggle between a simple and normal edit episode boxes. The simple mode displays only the Media URL field. Users can now set the width of the audio player as well as the width and height of the video player. New language added to the Feed Settings page to better explain the apply settings to setting which is now renamed "Enhance Feeds" setting. Added new Enhance iTunes Summary from Blog Posts option, which intelligently takes web links and links to images in your regular blog post into a readable and clickable format for the iTunes summary. Custom feeds including the default podcast feed include additional options such as setting the number of most recent posts in the feed, customizing the feed title, description and landing web link, as well as full support for redirecting feed to a hosted feed service such as FeedBurner.com. The new Custom Feeds section allows user to create an endless number of podcast specific feeds either for separating long and sort formats and/or media types such as ogg, wma and mp3. New Tools section allows users to re-import PodPress settings (typically imported automatically upon first install), Import PodPress episodes with a detailed table of media files with options to specify which media files go to which feeds. Tools page also includes an option to add Edit Podcast Capability for User Role Management. Added Nonces support to all edit and delete transactions to admin pages. Added simple mode for podcast episode boxes in the edit post screen.
124
 
125
  == Contributors ==
126
  Angelo Mandato, CIO [RawVoice](http://www.rawvoice.com) - Plugin founder, architect and lead developer
3
  Tags: podcast, podcasting, itunes, enclosure, zune, iphone, audio, video, rss2, feed, player, media, rss
4
  Requires at least: 2.5.0
5
  Tested up to: 2.7.1
6
+ Stable tag: 0.7.2
7
 
8
  Add podcasting support to your blog.
9
 
44
  == Frequently Asked Questions ==
45
 
46
  = Why doesn't Blubrry PowerPress support multiple enclosures? =
47
+ Blubrry PowerPress does not allow you to include multiple media files for one feed item (blog post). This is because each podcatcher handles multiple enclosures in feeds differently. iTunes will download the first enclosure that it sees in the feed ignoring the rest. Other podcatchers and podcasting directories either pick up the first enclosure or the last in each post item. This inconsistency combined with the fact that [Dave Winer does not recommend multiple enclosures](http://www.reallysimplesyndication.com/2004/12/21) and the [FeedValidator.org recommendation against it](http://www.feedvalidator.org/docs/warning/DuplicateEnclosure.html) is why the Blubrry PowerPress does not support them.
48
+
49
+ As a alternative, PowerPress allows you to create additional Custom Podcast Feeds to associate additional media files in a blog post to specific feeds.
50
 
51
  = Why doesn't Blubrry PowerPress include media statistics? =
52
  Blubrry PowerPress does not include media statistics. This is not because Blubrry has its own statistics service, although that's a good reason by itself. Maintaining and calculating statistics is a resource and server intensive task that would add bloat to an otherwise lightweight Wordpress podcasting plugin. We recommend you use your media hosting's statistics and you're more than welcome to use the [Blubrry Statistics service](http://www.blubrry.com/podcast_statistics/) as well.
66
 
67
  == Changelog ==
68
 
69
+ 0.7.2 released on 3/26/2009
70
+ Re-ordered change log so latest release is listed first rather than last. Fixed powerpress_bloginfo_rss() warning message that occurred for some users, Updated the itunes_url setting to handle the latest itunes URL itunes.apple.com, No longer including revision posts in the PodPress import episode utility, Fixed bug with iTunes author setting not getting applied to feeds, display player in excerpts checkbox bug fixed, no longer including player code in HTML headers if not necessary, fixed duration bug with 1:00:60 which now reports 1:01:00, feed settings are now used for custom feeds that do not have settings of their own, added additional fix for FeedSmith when permalinks is not enabled, fixed bug where feed settings were not being applied to podcast feed in simple mode under some situations, fixed bug with enhance podcast only and main site feed only setting, fixed bug with pinging iTunes with CURL missing SSL certificates, and fixed itunes ping for latest itunes.apple.com one click subscribe links.
71
 
72
+ 0.7.1 released on 03/11/2009
73
+ Bugs: Improved flash player loading on pages with multiple podcast episodes, Detecting file size when specifying duration bug fixed. Fixed bug where duration would sometimes save minutes over 60 rather than rolling over one hour.
74
+ Features: Added new Simple and Advanced Modes. Advance mode adds 5 new pages (Basic, Appearance, Feed Settings, Custom Feeds and Tools). New Edit Post settings section added which allows user to toggle between a simple and normal edit episode boxes. The simple mode displays only the Media URL field. Users can now set the width of the audio player as well as the width and height of the video player. New language added to the Feed Settings page to better explain the apply settings to setting which is now renamed "Enhance Feeds" setting. Added new Enhance iTunes Summary from Blog Posts option, which intelligently takes web links and links to images in your regular blog post into a readable and clickable format for the iTunes summary. Custom feeds including the default podcast feed include additional options such as setting the number of most recent posts in the feed, customizing the feed title, description and landing web link, as well as full support for redirecting feed to a hosted feed service such as FeedBurner.com. The new Custom Feeds section allows user to create an endless number of podcast specific feeds either for separating long and sort formats and/or media types such as ogg, wma and mp3. New Tools section allows users to re-import PodPress settings (typically imported automatically upon first install), Import PodPress episodes with a detailed table of media files with options to specify which media files go to which feeds. Tools page also includes an option to add Edit Podcast Capability for User Role Management. Added Nonces support to all edit and delete transactions to admin pages. Added simple mode for podcast episode boxes in the edit post screen.
75
 
76
+ 0.7.0 released on 03/10/2009
77
+ Beta release only intended for a handfull of beta testers. For full list of changes, please refer to version 0.7.1
78
 
79
+ 0.6.5 released on 02/20/2009
80
+ Fixed warning from being printed when v0.6.3/v0.6.4 used with PHP4. Bug only affected users using PHP4.
81
 
82
+ 0.6.4 released on 02/16/2009
83
+ Fixed bug where post_password_required() function does not exist, bug only affects users using Wordpress blogs older than version 2.7.
84
 
85
+ 0.6.3 released on 02/16/2009
86
+ Added new options to load all javascript for players in the wp_footer() function. Options are available as defines to add to the wp-config.php and are documented near the top of the powerpress.php. Added option in settings to display player in excerpts. Added code to repair corrupted Podpress data for displaying previously created podpress episodes. Note: Podpress data corruption was originally caused by previous versions of Podpress. Added code to prevent Wordpress from auto adding enclosures created from links to media found in the blog post.
87
 
88
+ 0.6.2 released on 01/26/2009
89
+ Added option to reset rewrite rules when settings saved to fix problem with podcast feed returning 404, logic added to prevent FeedSmith plugin from redirecting podcast feed, and added support for the Kimili Flash Embed plugin
90
 
91
+ 0.6.1 released on 01/20/2009
92
+ Player now handles Windows Media (wmv) in Firefox, offering link to preferred Firefox plugin, now using the wp_specialchars() function for adding entities to feed values, fix problem with themes using excerpts not displaying the player correctly (Thanks @wayofthegeek for your help), and a number of other syntactical changes.
93
 
94
+ 0.6.0 released on 12/17/2008
95
+ Fixed bug with podcast feed in Wordpress 2.7, added defaults for file size and duration, and added iTunes New Feed URL option.
96
+
97
+ 0.5.2 released on 12/14/2008
98
+ Fixed bug with the feed channel itunes:summary being limited to 255 characters, the limit is now set to 4,000.
99
 
100
  0.5.1 released on 12/10/2008
101
  Added podcast to pages option (Thanks @Frumph), added code to make sure the itunes:subtitle, keywords and summary feed tags never exceed their size limits.
102
 
103
+ 0.5.0 released on 11/26/2008
104
+ Added options to report media duration and file size next to download links. Removed optional defines POWERPRESS _ PLUGIN _ PATH and POWERPRESS _ ITEM _ SUMMARY, defines no longer necessary. Added itunes:author and itunes:subtitle to header portion of podcast feeds and itunes:summary to post items. No longer removing quotes or extra spaces from itunes summary. Player auto-play bug fixed when quicktime files mixed with mp3s. Added new option to ping iTunes in a new browser window. Verify flash player check added, Wordpress auto plugin update will corrupt the flash player. This bug is fixed in Wordpress 2.7 beta 2 and newer. Media URL now displays a warning if the value contains characters which may cause problems.
105
 
106
+ 0.4.2 released on 11/02/2008
107
+ Fixed quicktime in-page player bug, fixed bug which caused itunes keywords and subtitle to be blank and incremented version number.
108
 
109
+ 0.4.1 released on 10/24/2008
110
+ Fixed auto-play bug found in last update, only affected quicktime files with the play on page option.
111
 
112
+ 0.4.0 released on 10/21/2008
113
+ Added two new play options adding 'play on page' links with and without play in new window links and now use a customizable play image for quicktime formatted media. Image may be customized by adding a define('POWERPRESS _ PLAY _ IMAGE', 'URL to image') to wp config file.
114
 
115
+ 0.3.2 released on 10/05/2008
116
+ Added alternative logic for those who host their blogs on servers with allow _ url _ fopen turned off.
117
 
118
+ 0.3.1 released on 10/02/2008
119
+ Fixed bug and added enhancements: iTunes subtitle, keywords and summary values now properly escape html special characters such as &nbsp; added define for adding itunes:new-feed-url tag, added define to display player for legacy Podpress episodes only.
120
 
121
+ 0.3.0 released on 09/24/2008
122
+ New features: Added important feeds list in feed settings, logic to prevent stats redirect duplication and added podcast only feed.
123
 
124
+ 0.2.1 released on 09/17/2008
125
+ Fixed bugs: itunes:subtitle bug, itunes:summary is now enabled by default, add ending trailing slash to media url if missing, and copy blubrry keyword from podpress fix.
126
+
127
+ 0.2 released on 08/11/2008
128
+ Initial release of Blubrry PowerPress
129
 
 
 
 
130
 
131
  == Contributors ==
132
  Angelo Mandato, CIO [RawVoice](http://www.rawvoice.com) - Plugin founder, architect and lead developer