PowerPress Podcasting plugin by Blubrry - Version 7.1.1

Version Description

  • Released on 08/24/2017
  • NOTE: There is no urgency to update to this version unless you can benefit from bug fixes listed.
  • BETA COMING SOON: PowerPress 7.2 Beta will be available within 24-72 hours. Please visit https://create.blubrry.com/resources/powerpress/powerpress-beta/ for more details.
  • Added logic to prevent the W3 Total Cache plugin from minifying podcast feeds. (Thanks @allimaple for bringing to our attention)
  • Fixed warning messages in the getid3 library so they comply with PHP 7.1+. (Thanks @mahe for letting us know about the problem)
  • Fixed error verifying URLs for file formats not supported by iTunes.
  • Feed import now compatible with Spreaker podcast feeds.
  • Added code when including the subscribe CSS file to make sure it's always included with various WordPress updates (Thanks Tim for the code fix!)
  • Added checkbox in Blubrry Player configuration for making iTunes Episode image use optional with player. Unchecked by default.
Download this release

Release Info

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

Code changes from version 7.1 to 7.1.1

getid3/module.audio.mp3.php CHANGED
@@ -72,7 +72,8 @@ class getid3_mp3 extends getid3_handler
72
  }
73
 
74
  }
75
- $info['warning'][] = $synchoffsetwarning;
 
76
 
77
  }
78
 
@@ -134,7 +135,8 @@ class getid3_mp3 extends getid3_handler
134
  break;
135
 
136
  default:
137
- $info['warning'][] = 'Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat == mp3, [audio][dataformat] actually "'.$info['audio']['dataformat'].'"';
 
138
  break;
139
  }
140
  }
@@ -489,7 +491,8 @@ class getid3_mp3 extends getid3_handler
489
 
490
  if ($thisfile_mpeg_audio['raw']['bitrate'] == 15) {
491
  // http://www.hydrogenaudio.org/?act=ST&f=16&t=9682&st=0
492
- $info['warning'][] = 'Invalid bitrate index (15), this is a known bug in free-format MP3s encoded by LAME v3.90 - 3.93.1';
 
493
  $thisfile_mpeg_audio['raw']['bitrate'] = 0;
494
  }
495
  $thisfile_mpeg_audio['padding'] = (bool) $thisfile_mpeg_audio['raw']['padding'];
@@ -657,7 +660,8 @@ class getid3_mp3 extends getid3_handler
657
  $used_filesize -= intval(@$info['id3v2']['headerlength']);
658
  $used_filesize -= (isset($info['id3v1']) ? 128 : 0);
659
  $used_filesize -= (isset($info['tag_offset_end']) ? $info['tag_offset_end'] - $info['tag_offset_start'] : 0);
660
- $info['warning'][] = 'MP3.Xing header missing VBR_bytes, assuming MPEG audio portion of file is '.number_format($used_filesize).' bytes';
 
661
  }
662
 
663
  $framelengthfloat = $used_filesize / $thisfile_mpeg_audio['VBR_frames'];
@@ -847,7 +851,8 @@ class getid3_mp3 extends getid3_handler
847
  $thisfile_mpeg_audio_lame['preset_used_id'] = ($PresetSurroundBytes & 0x07FF);
848
  $thisfile_mpeg_audio_lame['preset_used'] = self::LAMEpresetUsedLookup($thisfile_mpeg_audio_lame);
849
  if (!empty($thisfile_mpeg_audio_lame['preset_used_id']) && empty($thisfile_mpeg_audio_lame['preset_used'])) {
850
- $info['warning'][] = 'Unknown LAME preset used ('.$thisfile_mpeg_audio_lame['preset_used_id'].') - please report to info@getid3.org';
 
851
  }
852
  if (($thisfile_mpeg_audio_lame['short_version'] == 'LAME3.90.') && !empty($thisfile_mpeg_audio_lame['preset_used_id'])) {
853
  // this may change if 3.90.4 ever comes out
@@ -891,7 +896,8 @@ class getid3_mp3 extends getid3_handler
891
  $thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
892
  }
893
  if ($thisfile_mpeg_audio['bitrate_mode'] == 'vbr') {
894
- $info['warning'][] = 'VBR file with no VBR header. Bitrate values calculated from actual frame bitrates.';
 
895
  }
896
  }
897
 
@@ -923,7 +929,8 @@ class getid3_mp3 extends getid3_handler
923
  // $info['warning'][] = 'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)';
924
  // }
925
  } else {
926
- $info['warning'][] = 'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)';
 
927
  }
928
  }
929
  }
@@ -1120,7 +1127,8 @@ class getid3_mp3 extends getid3_handler
1120
  } else {
1121
 
1122
  // next frame is not valid, note the error and fail, so scanning can contiue for a valid frame sequence
1123
- $info['warning'][] = 'Frame at offset ('.$offset.') is valid, but the next one at ('.$nextframetestoffset.') is not.';
 
1124
 
1125
  return false;
1126
  }
@@ -1166,7 +1174,8 @@ class getid3_mp3 extends getid3_handler
1166
  $info['error'][] = 'Cannot find next free-format synch pattern ('.getid3_lib::PrintHexBytes($SyncPattern1).' or '.getid3_lib::PrintHexBytes($SyncPattern2).') after offset '.$offset;
1167
  return false;
1168
  } else {
1169
- $info['warning'][] = 'ModeExtension varies between first frame and other frames (known free-format issue in LAME 3.88)';
 
1170
  $info['audio']['codec'] = 'LAME';
1171
  $info['audio']['encoder'] = 'LAME3.88';
1172
  $SyncPattern1 = substr($SyncPattern1, 0, 3);
@@ -1291,7 +1300,8 @@ class getid3_mp3 extends getid3_handler
1291
  getid3_lib::safe_inc($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]);
1292
  if ($max_frames_scan && (++$frames_scanned >= $max_frames_scan)) {
1293
  $pct_data_scanned = ($this->ftell() - $info['avdataoffset']) / ($info['avdataend'] - $info['avdataoffset']);
1294
- $info['warning'][] = 'too many MPEG audio frames to scan, only scanned first '.$max_frames_scan.' frames ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.';
 
1295
  foreach ($Distribution as $key1 => $value1) {
1296
  foreach ($value1 as $key2 => $value2) {
1297
  $Distribution[$key1][$key2] = round($value2 / $pct_data_scanned);
@@ -1454,9 +1464,11 @@ class getid3_mp3 extends getid3_handler
1454
  if ($this->decodeMPEGaudioHeader($GarbageOffsetEnd, $dummy, true, true)) {
1455
  $info = $dummy;
1456
  $info['avdataoffset'] = $GarbageOffsetEnd;
1457
- $info['warning'][] = 'apparently-valid VBR header not used because could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.'), but did find valid CBR stream starting at '.$GarbageOffsetEnd;
 
1458
  } else {
1459
- $info['warning'][] = 'using data from VBR header even though could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.')';
 
1460
  }
1461
  }
1462
  }
@@ -1549,7 +1561,8 @@ class getid3_mp3 extends getid3_handler
1549
  }
1550
  }
1551
  if ($pct_data_scanned > 0) {
1552
- $info['warning'][] = 'too many MPEG audio frames to scan, only scanned '.$frames_scanned.' frames in '.$max_scan_segments.' segments ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.';
 
1553
  foreach ($info['mpeg']['audio'] as $key1 => $value1) {
1554
  if (!preg_match('#_distribution$#i', $key1)) {
1555
  continue;
@@ -1561,7 +1574,8 @@ class getid3_mp3 extends getid3_handler
1561
  }
1562
 
1563
  if ($SynchErrorsFound > 0) {
1564
- $info['warning'][] = 'Found '.$SynchErrorsFound.' synch errors in histogram analysis';
 
1565
  //return false;
1566
  }
1567
 
72
  }
73
 
74
  }
75
+ //$info['warning'][] = $synchoffsetwarning;
76
+ $this->warning($synchoffsetwarning);
77
 
78
  }
79
 
135
  break;
136
 
137
  default:
138
+ //$info['warning'][] = 'Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat == mp3, [audio][dataformat] actually "'.$info['audio']['dataformat'].'"';
139
+ $this->warning('Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat == mp3, [audio][dataformat] actually "'.$info['audio']['dataformat'].'"');
140
  break;
141
  }
142
  }
491
 
492
  if ($thisfile_mpeg_audio['raw']['bitrate'] == 15) {
493
  // http://www.hydrogenaudio.org/?act=ST&f=16&t=9682&st=0
494
+ //$info['warning'][] = 'Invalid bitrate index (15), this is a known bug in free-format MP3s encoded by LAME v3.90 - 3.93.1';
495
+ $this->warning('Invalid bitrate index (15), this is a known bug in free-format MP3s encoded by LAME v3.90 - 3.93.1');
496
  $thisfile_mpeg_audio['raw']['bitrate'] = 0;
497
  }
498
  $thisfile_mpeg_audio['padding'] = (bool) $thisfile_mpeg_audio['raw']['padding'];
660
  $used_filesize -= intval(@$info['id3v2']['headerlength']);
661
  $used_filesize -= (isset($info['id3v1']) ? 128 : 0);
662
  $used_filesize -= (isset($info['tag_offset_end']) ? $info['tag_offset_end'] - $info['tag_offset_start'] : 0);
663
+ //$info['warning'][] = 'MP3.Xing header missing VBR_bytes, assuming MPEG audio portion of file is '.number_format($used_filesize).' bytes';
664
+ $this->warning('MP3.Xing header missing VBR_bytes, assuming MPEG audio portion of file is '.number_format($used_filesize).' bytes');
665
  }
666
 
667
  $framelengthfloat = $used_filesize / $thisfile_mpeg_audio['VBR_frames'];
851
  $thisfile_mpeg_audio_lame['preset_used_id'] = ($PresetSurroundBytes & 0x07FF);
852
  $thisfile_mpeg_audio_lame['preset_used'] = self::LAMEpresetUsedLookup($thisfile_mpeg_audio_lame);
853
  if (!empty($thisfile_mpeg_audio_lame['preset_used_id']) && empty($thisfile_mpeg_audio_lame['preset_used'])) {
854
+ //$info['warning'][] = 'Unknown LAME preset used ('.$thisfile_mpeg_audio_lame['preset_used_id'].') - please report to info@getid3.org';
855
+ $this->warning('Unknown LAME preset used ('.$thisfile_mpeg_audio_lame['preset_used_id'].') - please report to info@getid3.org');
856
  }
857
  if (($thisfile_mpeg_audio_lame['short_version'] == 'LAME3.90.') && !empty($thisfile_mpeg_audio_lame['preset_used_id'])) {
858
  // this may change if 3.90.4 ever comes out
896
  $thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
897
  }
898
  if ($thisfile_mpeg_audio['bitrate_mode'] == 'vbr') {
899
+ //$info['warning'][] = 'VBR file with no VBR header. Bitrate values calculated from actual frame bitrates.';
900
+ $this->warning('VBR file with no VBR header. Bitrate values calculated from actual frame bitrates.');
901
  }
902
  }
903
 
929
  // $info['warning'][] = 'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)';
930
  // }
931
  } else {
932
+ //$info['warning'][] = 'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)';
933
+ $this->warning('Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)');
934
  }
935
  }
936
  }
1127
  } else {
1128
 
1129
  // next frame is not valid, note the error and fail, so scanning can contiue for a valid frame sequence
1130
+ //$info['warning'][] = 'Frame at offset ('.$offset.') is valid, but the next one at ('.$nextframetestoffset.') is not.';
1131
+ $this->warning('Frame at offset ('.$offset.') is valid, but the next one at ('.$nextframetestoffset.') is not.');
1132
 
1133
  return false;
1134
  }
1174
  $info['error'][] = 'Cannot find next free-format synch pattern ('.getid3_lib::PrintHexBytes($SyncPattern1).' or '.getid3_lib::PrintHexBytes($SyncPattern2).') after offset '.$offset;
1175
  return false;
1176
  } else {
1177
+ //$info['warning'][] = 'ModeExtension varies between first frame and other frames (known free-format issue in LAME 3.88)';
1178
+ $this->warning('ModeExtension varies between first frame and other frames (known free-format issue in LAME 3.88)');
1179
  $info['audio']['codec'] = 'LAME';
1180
  $info['audio']['encoder'] = 'LAME3.88';
1181
  $SyncPattern1 = substr($SyncPattern1, 0, 3);
1300
  getid3_lib::safe_inc($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]);
1301
  if ($max_frames_scan && (++$frames_scanned >= $max_frames_scan)) {
1302
  $pct_data_scanned = ($this->ftell() - $info['avdataoffset']) / ($info['avdataend'] - $info['avdataoffset']);
1303
+ //$info['warning'][] = 'too many MPEG audio frames to scan, only scanned first '.$max_frames_scan.' frames ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.';
1304
+ $this->warning('too many MPEG audio frames to scan, only scanned first '.$max_frames_scan.' frames ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.');
1305
  foreach ($Distribution as $key1 => $value1) {
1306
  foreach ($value1 as $key2 => $value2) {
1307
  $Distribution[$key1][$key2] = round($value2 / $pct_data_scanned);
1464
  if ($this->decodeMPEGaudioHeader($GarbageOffsetEnd, $dummy, true, true)) {
1465
  $info = $dummy;
1466
  $info['avdataoffset'] = $GarbageOffsetEnd;
1467
+ //$info['warning'][] = 'apparently-valid VBR header not used because could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.'), but did find valid CBR stream starting at '.$GarbageOffsetEnd;
1468
+ $this->warning('apparently-valid VBR header not used because could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.'), but did find valid CBR stream starting at '.$GarbageOffsetEnd);
1469
  } else {
1470
+ //$info['warning'][] = 'using data from VBR header even though could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.')';
1471
+ $this->warning('using data from VBR header even though could not find '.GETID3_MP3_VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.')');
1472
  }
1473
  }
1474
  }
1561
  }
1562
  }
1563
  if ($pct_data_scanned > 0) {
1564
+ //$info['warning'][] = 'too many MPEG audio frames to scan, only scanned '.$frames_scanned.' frames in '.$max_scan_segments.' segments ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.';
1565
+ $this->warning('too many MPEG audio frames to scan, only scanned '.$frames_scanned.' frames in '.$max_scan_segments.' segments ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.');
1566
  foreach ($info['mpeg']['audio'] as $key1 => $value1) {
1567
  if (!preg_match('#_distribution$#i', $key1)) {
1568
  continue;
1574
  }
1575
 
1576
  if ($SynchErrorsFound > 0) {
1577
+ //$info['warning'][] = 'Found '.$SynchErrorsFound.' synch errors in histogram analysis';
1578
+ $this->warning('Found '.$SynchErrorsFound.' synch errors in histogram analysis');
1579
  //return false;
1580
  }
1581
 
mp3info.class.php CHANGED
@@ -362,7 +362,8 @@
362
  {
363
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2 );
364
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true );
365
- curl_setopt($curl, CURLOPT_CAINFO, ABSPATH . WPINC . '/certificates/ca-bundle.crt');
 
366
  }
367
 
368
  if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
@@ -472,7 +473,8 @@
472
  {
473
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2 );
474
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true );
475
- curl_setopt($curl, CURLOPT_CAINFO, ABSPATH . WPINC . '/certificates/ca-bundle.crt');
 
476
  }
477
 
478
  if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
@@ -558,7 +560,7 @@
558
  $LocalFile = false;
559
 
560
  // If the URL starts with a http:// or https:// and ends with an mp3, then lets try the smart id3 method...
561
- if( preg_match('/^https?:\/\/.*\.mp3$/i', $File) !== false )
562
  {
563
  $LocalFile = $this->DownloadID3Headers($File);
564
  if( $LocalFile === false )
@@ -767,8 +769,10 @@
767
 
768
  if( defined('POWERPRESS_GETID3_LIBRARY') && is_file(POWERPRESS_GETID3_LIBRARY) )
769
  require_once(POWERPRESS_GETID3_LIBRARY);
770
- else
771
  require_once(POWERPRESS_ABSPATH.'/getid3/getid3.php');
 
 
772
 
773
  define('POWERPRESS_GETID3_LOADED', true);
774
  return true;
@@ -788,7 +792,7 @@
788
  /*
789
  // Example usage:
790
  $Mp3Info = new Mp3Info();
791
- $file = 'http://www.podcampohio.com/podpress_trac/web/177/0/TS-107667.mp3';
792
  if( $Data = $Mp3Info->GetMp3Info($file) )
793
  {
794
  echo 'Success: ';
@@ -805,4 +809,4 @@
805
  }
806
  */
807
 
808
- ?>
362
  {
363
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2 );
364
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true );
365
+ if( defined('ABSPATH') && defined('WPINC') )
366
+ curl_setopt($curl, CURLOPT_CAINFO, ABSPATH . WPINC . '/certificates/ca-bundle.crt');
367
  }
368
 
369
  if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
473
  {
474
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2 );
475
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true );
476
+ if( defined('ABSPATH') && defined('WPINC') )
477
+ curl_setopt($curl, CURLOPT_CAINFO, ABSPATH . WPINC . '/certificates/ca-bundle.crt');
478
  }
479
 
480
  if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
560
  $LocalFile = false;
561
 
562
  // If the URL starts with a http:// or https:// and ends with an mp3, then lets try the smart id3 method...
563
+ if( preg_match('/^https?:\/\/.*\.mp3$/i', $File) != false )
564
  {
565
  $LocalFile = $this->DownloadID3Headers($File);
566
  if( $LocalFile === false )
769
 
770
  if( defined('POWERPRESS_GETID3_LIBRARY') && is_file(POWERPRESS_GETID3_LIBRARY) )
771
  require_once(POWERPRESS_GETID3_LIBRARY);
772
+ else if( defined('POWERPRESS_ABSPATH') )
773
  require_once(POWERPRESS_ABSPATH.'/getid3/getid3.php');
774
+ else if( file_exists( dirname(__FILE__) .'/getid3/getid3.php' ) )
775
+ require_once( dirname(__FILE__) .'/getid3/getid3.php');
776
 
777
  define('POWERPRESS_GETID3_LOADED', true);
778
  return true;
792
  /*
793
  // Example usage:
794
  $Mp3Info = new Mp3Info();
795
+ $file = 'http://content.blubrry.com/geeknewscentral/GNC-2017-07-06.mp3';
796
  if( $Data = $Mp3Info->GetMp3Info($file) )
797
  {
798
  echo 'Success: ';
809
  }
810
  */
811
 
812
+ // eof
powerpress-player.php CHANGED
@@ -1348,8 +1348,11 @@ function powerpressplayer_build_blubrryaudio($media_url, $EpisodeData=array(), $
1348
  $url.= '&podcast_link='. urlencode($permalink);
1349
  }
1350
  if( !empty($EpisodeData['itunes_image']) ) {
1351
- $url.= '&artwork_url='. urlencode($EpisodeData['itunes_image']);
 
 
1352
  }
 
1353
  }
1354
  return '<iframe src="'. $url .'" scrolling="no" width="100%" height="138px" frameborder="0"></iframe>';
1355
  }
1348
  $url.= '&amp;podcast_link='. urlencode($permalink);
1349
  }
1350
  if( !empty($EpisodeData['itunes_image']) ) {
1351
+ $GeneralSettings = get_option('powerpress_general');
1352
+ if(isset($GeneralSettings['bp_episode_image']) && $GeneralSettings['bp_episode_image'] != false)
1353
+ $url.= '&amp;artwork_url='. urlencode($EpisodeData['itunes_image']);
1354
  }
1355
+
1356
  }
1357
  return '<iframe src="'. $url .'" scrolling="no" width="100%" height="138px" frameborder="0"></iframe>';
1358
  }
powerpress-subscribe.php CHANGED
@@ -457,7 +457,7 @@ function powerpress_subscribe_shortcode( $attr ) {
457
  return '';
458
 
459
  $Settings['itunes_url'] = powerpresssubscribe_get_itunes_url($Settings);
460
- wp_enqueue_style( 'powerpress-subscribe-style' );
461
 
462
  if( !empty($attr['itunes_button']) && !empty($Settings['itunes_url']) )
463
  {
457
  return '';
458
 
459
  $Settings['itunes_url'] = powerpresssubscribe_get_itunes_url($Settings);
460
+ wp_enqueue_style( 'powerpress-subscribe-style', plugin_dir_url( __FILE__ ) . 'css/subscribe.css' );
461
 
462
  if( !empty($attr['itunes_button']) && !empty($Settings['itunes_url']) )
463
  {
powerpress.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://create.blubrry.com/resources/powerpress/
5
  Description: <a href="http://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports iTunes, Google Play, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
6
- Version: 7.1
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Requires at least: 3.6
@@ -32,7 +32,7 @@ if( !function_exists('add_action') )
32
  die("access denied.");
33
 
34
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
35
- define('POWERPRESS_VERSION', '7.1' );
36
 
37
  // Translation support:
38
  if ( !defined('POWERPRESS_ABSPATH') )
@@ -1647,6 +1647,14 @@ function powerpress_w3tc_can_print_comment($settings)
1647
  return false;
1648
  }
1649
 
 
 
 
 
 
 
 
 
1650
  // Load the general feed settings for feeds handled by powerpress
1651
  function powerpress_load_general_feed_settings()
1652
  {
@@ -1676,6 +1684,11 @@ function powerpress_load_general_feed_settings()
1676
  add_filter( 'w3tc_can_print_comment', 'powerpress_w3tc_can_print_comment', 10, 1 );
1677
  }
1678
 
 
 
 
 
 
1679
  // If we're in advanced mode and we're dealing with a category feed we're extending, lets work with it...
1680
  if( is_category() && isset($GeneralSettings['custom_cat_feeds']) && is_array($GeneralSettings['custom_cat_feeds']) && in_array( get_query_var('cat'), $GeneralSettings['custom_cat_feeds']) )
1681
  {
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://create.blubrry.com/resources/powerpress/
5
  Description: <a href="http://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports iTunes, Google Play, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
6
+ Version: 7.1.1
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Requires at least: 3.6
32
  die("access denied.");
33
 
34
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
35
+ define('POWERPRESS_VERSION', '7.1.1' );
36
 
37
  // Translation support:
38
  if ( !defined('POWERPRESS_ABSPATH') )
1647
  return false;
1648
  }
1649
 
1650
+ // Disable minifying if W3TC is enabled
1651
+ function powerpress_w3tc_minify_enable($enable)
1652
+ {
1653
+ if( is_feed() )
1654
+ return false;
1655
+ return $enable;
1656
+ }
1657
+
1658
  // Load the general feed settings for feeds handled by powerpress
1659
  function powerpress_load_general_feed_settings()
1660
  {
1684
  add_filter( 'w3tc_can_print_comment', 'powerpress_w3tc_can_print_comment', 10, 1 );
1685
  }
1686
 
1687
+ if( is_feed() && defined('W3TC') )
1688
+ {
1689
+ add_filter( 'w3tc_minify_enable', 'powerpress_w3tc_minify_enable');
1690
+ }
1691
+
1692
  // If we're in advanced mode and we're dealing with a category feed we're extending, lets work with it...
1693
  if( is_category() && isset($GeneralSettings['custom_cat_feeds']) && is_array($GeneralSettings['custom_cat_feeds']) && in_array( get_query_var('cat'), $GeneralSettings['custom_cat_feeds']) )
1694
  {
powerpressadmin-player-page.php CHANGED
@@ -978,14 +978,14 @@ function audio_player_defaults()
978
  <td>
979
  <?php print_blubrry_player_demo(); ?>
980
 
981
- <!-- <p><input name="General[itunes_image_audio]" type="hidden" value="0"/><input name="General[itunes_image_audio]" type="checkbox" value="1" <?php echo ($General['itunes_image_audio']?'checked':''); ?> /> <?php echo __('Use episode iTunes image if set', 'powerpress'); ?> </p> -->
982
 
983
  <p>
984
  <?php echo __('Episode level iTunes image if set will be displayed in the player. The URLs to the images must be https:// in order to appear on social networking sites.', 'powerpress'); ?>
985
  </p>
986
 
987
- <p><input name="General[episode_box_itunes_image]" type="hidden" value="0"/><input name="General[episode_box_itunes_image]" type="checkbox" value="1" <?php echo ($General['episode_box_itunes_image']?'checked':''); ?> /> <?php echo __('Display iTunes episode image field', 'powerpress'); ?> </p>
988
-
989
  </td>
990
  </tr>
991
 
978
  <td>
979
  <?php print_blubrry_player_demo(); ?>
980
 
981
+ <!-- <p><input name="General[itunes_image_audio]" type="hidden" value="0"/><input name="General[itunes_image_audio]" type="checkbox" value="1" <?php echo ( !empty($General['itunes_image_audio'])?'checked':''); ?> /> <?php echo __('Use episode iTunes image if set', 'powerpress'); ?> </p> -->
982
 
983
  <p>
984
  <?php echo __('Episode level iTunes image if set will be displayed in the player. The URLs to the images must be https:// in order to appear on social networking sites.', 'powerpress'); ?>
985
  </p>
986
 
987
+ <p><input name="General[episode_box_itunes_image]" type="hidden" value="0" /><input name="General[episode_box_itunes_image]" type="checkbox" value="1" <?php echo ( !empty($General['episode_box_itunes_image']) ?'checked':''); ?> /> <?php echo __('Display iTunes episode image field', 'powerpress'); ?> </p>
988
+ <p><input name="General[bp_episode_image]" type="hidden" value="0" /><input name="General[bp_episode_image]" type="checkbox" value="1" <?php echo ( !empty($General['bp_episode_image']) ?'checked':''); ?> /> <?php echo __('Use iTunes episode image with player', 'powerpress'); ?> </p>
989
  </td>
990
  </tr>
991
 
powerpressadmin-rss-import.php CHANGED
@@ -725,8 +725,9 @@ jQuery(document).ready( function() {
725
 
726
  // Look for an enclosure, if not found skip it...
727
  $enclosure_data = false;
728
- if( !preg_match('|<enclosure(.*?)/>|is', $post, $enclosure_data) ) {
729
  echo sprintf(__('No Media found for item %d', 'powerpress'), $this->m_item_pos);
 
730
  if( empty($import_blog_posts) ) {
731
  $this->m_item_skipped_count++;
732
  return false;
725
 
726
  // Look for an enclosure, if not found skip it...
727
  $enclosure_data = false;
728
+ if( !preg_match('#<enclosure(.*?)(/>|</enclosure>)#is', $post, $enclosure_data) ) {
729
  echo sprintf(__('No Media found for item %d', 'powerpress'), $this->m_item_pos);
730
+ //echo '<pre>'.htmlspecialchars($post).'</pre>'; // Uncomment for debugging
731
  if( empty($import_blog_posts) ) {
732
  $this->m_item_skipped_count++;
733
  return false;
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: amandato, blubrry
3
  Tags: podcasting, podcast, podcaster, powerpress, itunes, google play music, google play, enclosure, professional, apple, apple tv, ipad, iphone, soundcloud, squarespace, youtube, viddler, ustream, podcasting, audio, video, rss2, feed, player, media, rss, mp3, music, embed, feedburner, statistics, stats, flv, flash, id3, episodes, blubrry, mp4, m4v, wordpressmu, mu, wordpress mu, multisite, multi site, mediacaster, post, plugin, posts, simple, social, dashboard, TSG, Buzzsprout, MTR, WP-boxCast, CastMyBlog, tgs podcasting, simple podcasting, seriously simple podcasting, seriously-simple-podcasting, serious, seriously, ssp, podlove, podcast.de, clammr, clammr radio, audio player, stitcher, tunein, show, shows, series, docs, documentation, support, free, add-ons, extensions, addons, libsyn, libsyn-podcasting, podbean, podomatic, spreaker
4
  Requires at least: 3.6
5
  Tested up to: 4.8.1
6
- Stable tag: 7.1
7
  Donate link: https://www.patreon.com/blubrry?ty=h
8
  License: GPLv2 or later
9
 
@@ -228,11 +228,22 @@ To install Blubrry PowerPress manually, follow these steps:
228
 
229
  = Next Major Release Announcements =
230
  * Facebook Instant Articles for podcasting coming in next release!
231
- * We are looking for beta testers! If you would like to beta test future versions of PowerPress, please [contact us](http://www.blubrry.com/contact.php) with your name and email.
232
 
233
  = Fan of PowerPress and want to show your support? =
234
  If you are a fan of PowerPress, we would greatly appreciate it if you could take a moment and [leave us a review on WordPress.org](https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post). Your support is greatly appreciated!
235
 
 
 
 
 
 
 
 
 
 
 
 
236
 
237
  = 7.1 =
238
  * Released on 7/11/2017
@@ -584,7 +595,7 @@ Nicolas Bouliane, [Personal Blog](http://nicolasbouliane.com/) - contributed cod
584
 
585
  == Translators ==
586
  * Danish translation for v1.0.11+ by [Team Blogos](http://wordpress.blogos.dk/s%C3%B8g-efter-downloads/?did=280) - Latest translation available [here](http://wordpress.blogos.dk/s%C3%B8g-efter-downloads/?did=280)
587
- * French translation for v1.0.11+ by [Aureien Denis](http://wpchannel.com/) - Aur�lien is looking for assistance maintaining the French translation, email wpchannel [at] gmail.com if interested.
588
  * Simplified Chinese for v1.0.12+ by [webmote](http://codeex.cn) - From webmote: Welcome to use the plugin. Very good! and then hope you to access my site.
589
  * Italian translation for v2.0.4+ by [Umberto Sartori](http://veneziadoc.net/)
590
  * Romanian translation for v2.0.4+ by Alexander Ovsov (Web Geek Sciense: http://webhostinggeeks.com/science/)
3
  Tags: podcasting, podcast, podcaster, powerpress, itunes, google play music, google play, enclosure, professional, apple, apple tv, ipad, iphone, soundcloud, squarespace, youtube, viddler, ustream, podcasting, audio, video, rss2, feed, player, media, rss, mp3, music, embed, feedburner, statistics, stats, flv, flash, id3, episodes, blubrry, mp4, m4v, wordpressmu, mu, wordpress mu, multisite, multi site, mediacaster, post, plugin, posts, simple, social, dashboard, TSG, Buzzsprout, MTR, WP-boxCast, CastMyBlog, tgs podcasting, simple podcasting, seriously simple podcasting, seriously-simple-podcasting, serious, seriously, ssp, podlove, podcast.de, clammr, clammr radio, audio player, stitcher, tunein, show, shows, series, docs, documentation, support, free, add-ons, extensions, addons, libsyn, libsyn-podcasting, podbean, podomatic, spreaker
4
  Requires at least: 3.6
5
  Tested up to: 4.8.1
6
+ Stable tag: 7.1.1
7
  Donate link: https://www.patreon.com/blubrry?ty=h
8
  License: GPLv2 or later
9
 
228
 
229
  = Next Major Release Announcements =
230
  * Facebook Instant Articles for podcasting coming in next release!
231
+ * We are looking for beta testers! If you would like to beta test future versions of PowerPress, please [contact us](http://www.blubrry.com/contact.php#feedback) with your name and email.
232
 
233
  = Fan of PowerPress and want to show your support? =
234
  If you are a fan of PowerPress, we would greatly appreciate it if you could take a moment and [leave us a review on WordPress.org](https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post). Your support is greatly appreciated!
235
 
236
+ = 7.1.1 =
237
+ * Released on 08/24/2017
238
+ * NOTE: There is no urgency to update to this version unless you can benefit from bug fixes listed.
239
+ * BETA COMING SOON: PowerPress 7.2 Beta will be available within 24-72 hours. Please visit https://create.blubrry.com/resources/powerpress/powerpress-beta/ for more details.
240
+ * Added logic to prevent the W3 Total Cache plugin from minifying podcast feeds. (Thanks @allimaple for bringing to our attention)
241
+ * Fixed warning messages in the getid3 library so they comply with PHP 7.1+. (Thanks @mahe for letting us know about the problem)
242
+ * Fixed error verifying URLs for file formats not supported by iTunes.
243
+ * Feed import now compatible with Spreaker podcast feeds.
244
+ * Added code when including the subscribe CSS file to make sure it's always included with various WordPress updates (Thanks Tim for the code fix!)
245
+ * Added checkbox in Blubrry Player configuration for making iTunes Episode image use optional with player. Unchecked by default.
246
+
247
 
248
  = 7.1 =
249
  * Released on 7/11/2017
595
 
596
  == Translators ==
597
  * Danish translation for v1.0.11+ by [Team Blogos](http://wordpress.blogos.dk/s%C3%B8g-efter-downloads/?did=280) - Latest translation available [here](http://wordpress.blogos.dk/s%C3%B8g-efter-downloads/?did=280)
598
+ * French translation for v1.0.11+ by [Aureien Denis](http://wpchannel.com/) - Aur�lien is looking for assistance maintaining the French translation, email wpchannel [at] gmail.com if interested.
599
  * Simplified Chinese for v1.0.12+ by [webmote](http://codeex.cn) - From webmote: Welcome to use the plugin. Very good! and then hope you to access my site.
600
  * Italian translation for v2.0.4+ by [Umberto Sartori](http://veneziadoc.net/)
601
  * Romanian translation for v2.0.4+ by Alexander Ovsov (Web Geek Sciense: http://webhostinggeeks.com/science/)
views/settings_tab_destinations.php CHANGED
@@ -92,7 +92,7 @@
92
  <p>
93
  <?php echo __('The largest podcast directory in the World!', 'powerpress'); ?>
94
  </p><p>
95
- <?php echo sprintf(__('Once listed, %s to expand your podcast distribution to Blubrry\'s SmartTV Apps (e.g. Roku) and apply to be on Spotify.', 'powerpress'), '<a href="http://create.blubrry.com/resources/blubrry-podcast-directory/get-featured-on-blubrry/" target="_blank">'. __('Get Featured', 'powerpress').'</a>' ); ?>
96
  </p>
97
  <label for="blubrry_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Blubrry Listing URL', 'powerpress'); ?></label>
98
  <input type="text" class="bpp-input-normal" id="blubrry_url" name="Feed[blubrry_url]" value="<?php echo esc_attr($FeedSettings['blubrry_url']); ?>" maxlength="255" />
92
  <p>
93
  <?php echo __('The largest podcast directory in the World!', 'powerpress'); ?>
94
  </p><p>
95
+ <?php echo sprintf(__('Once listed, %s to expand your podcast distribution to Blubrry\'s SmartTV Apps (e.g. Roku) and apply to be on Spotify.', 'powerpress'), '<a href="http://create.blubrry.com/resources/blubrry-podcast-directory/" target="_blank">'. __('Get Featured', 'powerpress').'</a>' ); ?>
96
  </p>
97
  <label for="blubrry_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Blubrry Listing URL', 'powerpress'); ?></label>
98
  <input type="text" class="bpp-input-normal" id="blubrry_url" name="Feed[blubrry_url]" value="<?php echo esc_attr($FeedSettings['blubrry_url']); ?>" maxlength="255" />