PowerPress Podcasting plugin by Blubrry - Version 6.3.3

Version Description

  • Released on 4/2/2016
  • Improved feed import for PodBean users (they appear to be blocking user agents like SquareSpace)
  • Adding
    to new lines for iTunes summary so new lines appear on iTunes desktop app (Thanks Daniel for input!)
  • Added additional code to handle ajax verify media URL errors.
  • Added Feed setting option Do not allow other plugins to modify podcast feeds..
  • Added Feed setting option Include RSS Image in feeds., default is enabled. For themes that set their own site icon in the feeds.
  • Added logic to handle post type podcast only feeds. (Thanks Alan for helping us debug!)
  • Added logic to prevent featured episode from appearing on custom post type feeds.
  • Fixed bug with post type podcasting channel level feed settings not applying correctly when using slug podcast. (Thanks Joe for pointing out the issue)
  • Fixed bug with enhanced itunes summary not displaying in some circumstances. (Thanks Filip for bringing to our attention!)
  • Podcast Subscribe sidebar widget category podcasting option now accepts category slug values (in addition to the category numeric ID)
  • Added define option POWERPRESS_FEED_AUTH_PRINT_WP_ERRORS to print wp_authentication error message when password protected feed authentication fails. This is useful for debugging purposes.
  • Fixed typos in RSS import page. (Thanks Robin!)
Download this release

Release Info

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

Code changes from version 6.3.2 to 6.3.3

class.powerpress-subscribe-widget.php CHANGED
@@ -252,9 +252,21 @@ body .pp-ssb-widget a.pp-ssb-btn:hover {
252
  $ExtraData['taxonomy_term_id'] = $instance['subscribe_term_taxonomy_id'];
253
  }; break;
254
  case 'category': {
255
- if( empty($instance['subscribe_category_id']) || !is_numeric($instance['subscribe_category_id']) )
 
256
  return;
257
- $ExtraData['cat_id'] = $instance['subscribe_category_id'];
 
 
 
 
 
 
 
 
 
 
 
258
  }; break;
259
  default: {
260
  // Doesn't matter, we'r using the default podcast channel
252
  $ExtraData['taxonomy_term_id'] = $instance['subscribe_term_taxonomy_id'];
253
  }; break;
254
  case 'category': {
255
+
256
+ if( empty($instance['subscribe_category_id']) )
257
  return;
258
+
259
+ if( is_numeric($instance['subscribe_category_id']) )
260
+ {
261
+ $ExtraData['cat_id'] = $instance['subscribe_category_id'];
262
+ }
263
+ else
264
+ {
265
+ $catObj = get_category_by_slug($instance['subscribe_category_id']);
266
+ if( empty($catObj->term_id) )
267
+ return;
268
+ $ExtraData['cat_id'] = $catObj->term_id;
269
+ }
270
  }; break;
271
  default: {
272
  // Doesn't matter, we'r using the default podcast channel
feed-podcast.php CHANGED
@@ -22,21 +22,30 @@
22
  return apply_filters('the_excerpt_rss', $output);
23
  }
24
 
 
25
  $FeaturedPodcastID = 0;
26
  $iTunesFeatured = get_option('powerpress_itunes_featured');
27
  $feed_slug = get_query_var('feed');
28
  if( !empty($iTunesFeatured[ $feed_slug ]) )
29
  {
30
- $FeaturedPodcastID = $iTunesFeatured[ $feed_slug ];
31
- $GLOBALS['powerpress_feed']['itunes_feature'] = true; // So any custom order value is not used when looping through the feeds.
 
 
 
 
32
  }
33
- $iTunesOrderNumber = 2; // One reserved for featured episode
34
 
35
  header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
36
  $more = 1;
37
 
38
- echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
39
-
 
 
 
 
40
  <rss version="2.0"
41
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
42
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
@@ -44,7 +53,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
44
  xmlns:atom="http://www.w3.org/2005/Atom"
45
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
46
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
47
- <?php do_action('rss2_ns'); ?>
48
  >
49
  <channel>
50
  <title><?php if( version_compare($GLOBALS['wp_version'], 4.4, '<' ) ) { bloginfo_rss('name'); } wp_title_rss(); ?></title>
@@ -55,7 +64,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
55
  <language><?php bloginfo_rss( 'language' ); ?></language>
56
  <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
57
  <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
58
- <?php do_action('rss2_head'); ?>
59
  <?php
60
 
61
  $ItemCount = 0;
@@ -95,17 +104,17 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
95
  }
96
  ?>
97
  <?php rss_enclosure(); ?>
98
- <?php do_action('rss2_item'); ?>
99
  <?php
100
- if( !empty($iTunesFeatured[ $feed_slug ]) )
101
  {
102
  echo "\t<itunes:order>";
103
  if( $FeaturedPodcastID == get_the_ID() )
104
  {
105
- echo 1;
106
  $FeaturedPodcastID = 0;
107
  }
108
- else
109
  {
110
  echo $iTunesOrderNumber;
111
  $iTunesOrderNumber++;
@@ -141,7 +150,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
141
  <guid isPermaLink="false"><?php the_guid(); ?></guid>
142
  <description><?php echo powerpress_format_itunes_value( powerpress_get_the_excerpt_rss(), 'description' ); ?></description>
143
  <?php rss_enclosure(); ?>
144
- <?php do_action('rss2_item'); ?>
145
  <?php
146
  echo "\t<itunes:order>";
147
  echo 1;
22
  return apply_filters('the_excerpt_rss', $output);
23
  }
24
 
25
+ $iTunesOrderNumber = 0;
26
  $FeaturedPodcastID = 0;
27
  $iTunesFeatured = get_option('powerpress_itunes_featured');
28
  $feed_slug = get_query_var('feed');
29
  if( !empty($iTunesFeatured[ $feed_slug ]) )
30
  {
31
+ if( get_post_type() == 'post' )
32
+ {
33
+ $FeaturedPodcastID = $iTunesFeatured[ $feed_slug ];
34
+ $GLOBALS['powerpress_feed']['itunes_feature'] = true; // So any custom order value is not used when looping through the feeds.
35
+ $iTunesOrderNumber = 2; // One reserved for featured episode
36
+ }
37
  }
38
+
39
 
40
  header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
41
  $more = 1;
42
 
43
+ $GeneralSettings = get_option('powerpress_general');
44
+ $FeedActionHook = '';
45
+ if( !empty($GeneralSettings['feed_action_hook']) )
46
+ $FeedActionHook = '_powerpress';
47
+
48
+ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'."\n"; ?>
49
  <rss version="2.0"
50
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
51
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
53
  xmlns:atom="http://www.w3.org/2005/Atom"
54
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
55
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
56
+ <?php do_action('rss2_ns'.$FeedActionHook); ?>
57
  >
58
  <channel>
59
  <title><?php if( version_compare($GLOBALS['wp_version'], 4.4, '<' ) ) { bloginfo_rss('name'); } wp_title_rss(); ?></title>
64
  <language><?php bloginfo_rss( 'language' ); ?></language>
65
  <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
66
  <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
67
+ <?php do_action('rss2_head'.$FeedActionHook); ?>
68
  <?php
69
 
70
  $ItemCount = 0;
104
  }
105
  ?>
106
  <?php rss_enclosure(); ?>
107
+ <?php do_action('rss2_item'.$FeedActionHook); ?>
108
  <?php
109
+ if( $iTunesOrderNumber > 0 )
110
  {
111
  echo "\t<itunes:order>";
112
  if( $FeaturedPodcastID == get_the_ID() )
113
  {
114
+ echo '1';
115
  $FeaturedPodcastID = 0;
116
  }
117
+ else // Print of 2, 3, ...
118
  {
119
  echo $iTunesOrderNumber;
120
  $iTunesOrderNumber++;
150
  <guid isPermaLink="false"><?php the_guid(); ?></guid>
151
  <description><?php echo powerpress_format_itunes_value( powerpress_get_the_excerpt_rss(), 'description' ); ?></description>
152
  <?php rss_enclosure(); ?>
153
+ <?php do_action('rss2_item'.$FeedActionHook); ?>
154
  <?php
155
  echo "\t<itunes:order>";
156
  echo 1;
powerpress-feed-auth.php CHANGED
@@ -23,8 +23,10 @@
23
  unset($ha);
24
  }
25
 
26
- if( !isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) )
27
  powerpress_feed_auth_basic( $FeedSettings['title'] );
 
 
28
 
29
  $user = $_SERVER['PHP_AUTH_USER'];
30
  $password = $_SERVER['PHP_AUTH_PW'];
@@ -36,17 +38,29 @@
36
  // Check capability...
37
  if( $userObj->has_cap( $FeedSettings['premium'] ) )
38
  return; // Nice, let us continue...
39
-
40
  powerpress_feed_auth_basic( $FeedSettings['title'], __('Access Denied', 'powerpress') );
 
41
  }
42
 
43
- // user authenticated here
44
- powerpress_feed_auth_basic( $FeedSettings['title'], __('Authorization Failed', 'powerpress') );
 
45
  }
46
  }
47
 
48
  function powerpress_feed_auth_basic($realm_name, $error = false )
49
  {
 
 
 
 
 
 
 
 
 
 
 
50
  if( !$error )
51
  $error = __('Unauthorized', 'powerpress');
52
  header('HTTP/1.0 401 Unauthorized');
@@ -60,15 +74,14 @@
60
  <head>
61
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
62
  <meta name="robots" content="noindex" />
63
- <title><?php echo htmlspecialchars($error); ?></title>
64
  </head>
65
  <body>
66
- <p><?php echo htmlspecialchars($error); ?></p>
67
  </body>
68
  </html>
69
  <?php
70
  exit;
71
  }
72
 
73
-
74
-
23
  unset($ha);
24
  }
25
 
26
+ if( !isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ) {
27
  powerpress_feed_auth_basic( $FeedSettings['title'] );
28
+ exit;
29
+ }
30
 
31
  $user = $_SERVER['PHP_AUTH_USER'];
32
  $password = $_SERVER['PHP_AUTH_PW'];
38
  // Check capability...
39
  if( $userObj->has_cap( $FeedSettings['premium'] ) )
40
  return; // Nice, let us continue...
 
41
  powerpress_feed_auth_basic( $FeedSettings['title'], __('Access Denied', 'powerpress') );
42
+ exit;
43
  }
44
 
45
+ // If we made it this far, then there was a wp_authenticate error...
46
+ powerpress_feed_auth_basic( $FeedSettings['title'], $userObj );
47
+ exit;
48
  }
49
  }
50
 
51
  function powerpress_feed_auth_basic($realm_name, $error = false )
52
  {
53
+ if( !defined('POWERPRESS_FEED_AUTH_PRINT_WP_ERRORS') && is_wp_error($error) ) {
54
+ $error = __('Unauthorized', 'powerpress');
55
+ }
56
+
57
+ if( empty($error) ) {
58
+ $error = __('Unauthorized', 'powerpress');
59
+ }
60
+
61
+ $error_heading = (is_wp_error($error)? __('Unauthorized', 'powerpress') : $error);
62
+ $error_message = (is_wp_error($error)?$error->get_error_message(): htmlspecialchars($error) );
63
+
64
  if( !$error )
65
  $error = __('Unauthorized', 'powerpress');
66
  header('HTTP/1.0 401 Unauthorized');
74
  <head>
75
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
76
  <meta name="robots" content="noindex" />
77
+ <title><?php echo htmlspecialchars($error_heading); ?></title>
78
  </head>
79
  <body>
80
+ <p><?php echo $error_message; ?></p>
81
  </body>
82
  </html>
83
  <?php
84
  exit;
85
  }
86
 
87
+ // eof
 
powerpress.php CHANGED
@@ -3,11 +3,11 @@
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: 6.3.2
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
- Requires at least: 3.7
10
- Tested up to: 4.4.2
11
  Text Domain: powerpress
12
  Change Log:
13
  Please see readme.txt for detailed change log.
@@ -35,7 +35,7 @@ if( !function_exists('add_action') )
35
  die("access denied.");
36
 
37
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
38
- define('POWERPRESS_VERSION', '6.3.1' );
39
 
40
  // Translation support:
41
  if ( !defined('POWERPRESS_ABSPATH') )
@@ -477,6 +477,7 @@ function powerpress_rss2_ns()
477
  }
478
 
479
  add_action('rss2_ns', 'powerpress_rss2_ns');
 
480
 
481
  function powerpress_rss2_head()
482
  {
@@ -503,8 +504,15 @@ function powerpress_rss2_head()
503
  }
504
  else if( powerpress_is_custom_podcast_feed() ) // If we're handling a custom podcast feed...
505
  {
506
- $CustomFeed = get_option('powerpress_feed_'.$feed_slug); // Get the custom podcast feed settings saved in the database
507
- $Feed = powerpress_merge_empty_feed_settings($CustomFeed, $Feed, ($feed_slug == 'podcast') );
 
 
 
 
 
 
 
508
  }
509
 
510
  if( !isset($Feed['url']) || trim($Feed['url']) == '' )
@@ -610,29 +618,31 @@ function powerpress_rss2_head()
610
  $podcast_title_safe .= get_bloginfo_rss('name');
611
  }
612
  $podcast_title_safe .= get_wp_title_rss();
613
-
614
- if( !empty($Feed['rss2_image']) || !empty($Feed['itunes_image']) )
615
  {
616
- if( !empty($Feed['rss2_image']) ) // If the RSS image is set, use it, otherwise use the iTunes image...
617
- $rss_image = $Feed['rss2_image'];
618
- else
619
- $rss_image = $Feed['itunes_image'];
620
-
621
- echo "\t". '<image>' .PHP_EOL;
622
- echo "\t\t".'<title>' . $podcast_title_safe . '</title>'.PHP_EOL;
623
- echo "\t\t".'<url>' . esc_html( str_replace(' ', '+', $rss_image)) . '</url>'.PHP_EOL;
624
- echo "\t\t".'<link>'. $Feed['url'] . '</link>' . PHP_EOL;
625
- echo "\t".'</image>' . PHP_EOL;
626
- }
627
- else // Use the default image
628
- {
629
- echo "\t". '<image>' .PHP_EOL;
630
- echo "\t\t".'<title>' . $podcast_title_safe . '</title>'.PHP_EOL;
631
- echo "\t\t".'<url>' . powerpress_get_root_url() . 'rss_default.jpg</url>'.PHP_EOL;
632
- echo "\t\t".'<link>'. $Feed['url'] . '</link>' . PHP_EOL;
633
- echo "\t".'</image>' . PHP_EOL;
 
 
 
634
  }
635
-
636
  // Handle iTunes categories
637
  $Categories = powerpress_itunes_categories();
638
  $Cat1 = false; $Cat2 = false; $Cat3 = false;
@@ -773,6 +783,7 @@ function powerpress_rss2_head()
773
  }
774
 
775
  add_action('rss2_head', 'powerpress_rss2_head');
 
776
 
777
  function powerpress_rss2_item()
778
  {
@@ -856,9 +867,9 @@ function powerpress_rss2_item()
856
  PHP_EOL);
857
  }
858
 
859
- $excerpt_no_html = '';
860
- $content_no_html = '';
861
- $content_no_html_a = '';
862
  if( !$subtitle || !$summary )
863
  {
864
  $excerpt_no_html = strip_tags( get_the_excerpt() );
@@ -891,18 +902,18 @@ function powerpress_rss2_item()
891
  echo "\t\t<itunes:summary><![CDATA[". powerpress_format_itunes_value($summary, 'summary', true) .']]></itunes:summary>'.PHP_EOL;
892
  else if( $powerpress_feed['enhance_itunes_summary'] )
893
  echo "\t\t<itunes:summary><![CDATA[". powerpress_itunes_summary() .']]></itunes:summary>'.PHP_EOL;
894
- else if( $excerpt_no_html ) // $content_no_html_a
895
  echo "\t\t<itunes:summary><![CDATA[". powerpress_format_itunes_value($excerpt_no_html, 'summary', true) .']]></itunes:summary>'.PHP_EOL;
896
- else
897
  echo "\t\t<itunes:summary><![CDATA[". powerpress_format_itunes_value($content_no_html_a, 'summary', true) .']]></itunes:summary>'.PHP_EOL;
898
  } else {
899
  if( $summary )
900
  echo "\t\t<itunes:summary>". powerpress_format_itunes_value($summary, 'summary') .'</itunes:summary>'.PHP_EOL;
901
  else if( $powerpress_feed['enhance_itunes_summary'] )
902
- echo "\t\t<itunes:summary><![CDATA[". powerpress_itunes_summary($post->post_content) .']]></itunes:summary>'.PHP_EOL;
903
- else if( $excerpt_no_html ) // $content_no_html_a
904
  echo "\t\t<itunes:summary>". powerpress_format_itunes_value($excerpt_no_html, 'summary') .'</itunes:summary>'.PHP_EOL;
905
- else
906
  echo "\t\t<itunes:summary>". powerpress_format_itunes_value($content_no_html_a, 'summary') .'</itunes:summary>'.PHP_EOL;
907
  }
908
 
@@ -998,6 +1009,7 @@ function powerpress_rss2_item()
998
  }
999
 
1000
  add_action('rss2_item', 'powerpress_rss2_item');
 
1001
 
1002
  function powerpress_filter_rss_enclosure($content)
1003
  {
@@ -1475,6 +1487,11 @@ function powerpress_init()
1475
  if ( !in_array($feed_slug, $wp_rewrite->feeds) ) // we need to add this feed name
1476
  {
1477
  add_feed($feed_slug, 'powerpress_do_podcast_feed');
 
 
 
 
 
1478
  }
1479
  }
1480
  }
@@ -2417,13 +2434,19 @@ function powerpress_get_root_url()
2417
  function powerpress_itunes_summary()
2418
  {
2419
  $summary = apply_filters( 'the_content', get_the_content() );
2420
- $summary = str_replace(']]>', ']]&gt;', $content); // CDATA error prevention
2421
- $summary = strip_tags($summary, '<a>'); // We can leave a tags for itunes:summary
 
 
 
2422
  return powerpress_trim_itunes_value($summary, 'summary');
2423
  }
2424
 
2425
  function powerpress_format_itunes_value($value, $tag, $cdata=false)
2426
  {
 
 
 
2427
  if( $cdata ) {
2428
  $value = str_replace(']]>', ']]&gt;', $value);
2429
  return powerpress_trim_itunes_value($value, $tag);
@@ -2453,8 +2476,6 @@ function powerpress_format_itunes_value($value, $tag, $cdata=false)
2453
  $value = @html_entity_decode($value, ENT_COMPAT, 'UTF-8'); // Remove any additional entities such as &nbsp;
2454
  $value = preg_replace( '/&amp;/ui' , '&', $value); // Precaution in case it didn't get removed from function above.
2455
 
2456
- if( $tag == 'summary-enhanced' )
2457
- return powerpress_trim_itunes_value($value, $tag);
2458
  return esc_html( powerpress_trim_itunes_value($value, $tag) );
2459
  }
2460
 
@@ -2468,11 +2489,10 @@ function powerpress_trim_itunes_value($value, $tag = 'summary')
2468
  switch($tag)
2469
  {
2470
  case 'description':
2471
- case 'summary-enhanced':
2472
  case 'summary': {
2473
  // 4000 character limit
2474
  if( $length > 4000 )
2475
- $trim_at = 4000;
2476
  }; break;
2477
  case 'subtitle':
2478
  case 'author':
@@ -2515,9 +2535,6 @@ function powerpress_trim_itunes_value($value, $tag = 'summary')
2515
  if( $remove_new_lines )
2516
  $value = str_replace( array("\r\n\r\n", "\n", "\r", "\t","- "), array(' - ',' ', '', ' ', ''), $value );
2517
 
2518
- if( $tag == 'summary-enhanced' )
2519
- $value = str_replace(']]>', ']]&gt;', $value); // Make sure there's no ]]> in the value
2520
-
2521
  return $value;
2522
  }
2523
 
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: 6.3.3
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
+ Requires at least: 3.6
10
+ Tested up to: 4.5
11
  Text Domain: powerpress
12
  Change Log:
13
  Please see readme.txt for detailed change log.
35
  die("access denied.");
36
 
37
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
38
+ define('POWERPRESS_VERSION', '6.3.3' );
39
 
40
  // Translation support:
41
  if ( !defined('POWERPRESS_ABSPATH') )
477
  }
478
 
479
  add_action('rss2_ns', 'powerpress_rss2_ns');
480
+ add_action('rss2_ns_powerpress', 'powerpress_rss2_ns');
481
 
482
  function powerpress_rss2_head()
483
  {
504
  }
505
  else if( powerpress_is_custom_podcast_feed() ) // If we're handling a custom podcast feed...
506
  {
507
+ if( !empty($powerpress_feed['post_type']) ) {
508
+ $PostTypeSettingsArray = get_option('powerpress_posttype_'.$powerpress_feed['post_type']); // Get the post type podcast feed settings saved in the database
509
+ if( !empty($PostTypeSettingsArray[ $feed_slug ]) )
510
+ $Feed = $PostTypeSettingsArray[ $feed_slug ];
511
+ }
512
+ else {
513
+ $CustomFeed = get_option('powerpress_feed_'.$feed_slug); // Get the custom podcast feed settings saved in the database
514
+ }
515
+ $Feed = powerpress_merge_empty_feed_settings($CustomFeed, $Feed, ($feed_slug == 'podcast' && empty($powerpress_feed['post_type']) ) );
516
  }
517
 
518
  if( !isset($Feed['url']) || trim($Feed['url']) == '' )
618
  $podcast_title_safe .= get_bloginfo_rss('name');
619
  }
620
  $podcast_title_safe .= get_wp_title_rss();
621
+ if( empty($General['disable_rss_image']) )
 
622
  {
623
+ if( !empty($Feed['rss2_image']) || !empty($Feed['itunes_image']) )
624
+ {
625
+ if( !empty($Feed['rss2_image']) ) // If the RSS image is set, use it, otherwise use the iTunes image...
626
+ $rss_image = $Feed['rss2_image'];
627
+ else
628
+ $rss_image = $Feed['itunes_image'];
629
+
630
+ echo "\t". '<image>' .PHP_EOL;
631
+ echo "\t\t".'<title>' . $podcast_title_safe . '</title>'.PHP_EOL;
632
+ echo "\t\t".'<url>' . esc_html( str_replace(' ', '+', $rss_image)) . '</url>'.PHP_EOL;
633
+ echo "\t\t".'<link>'. $Feed['url'] . '</link>' . PHP_EOL;
634
+ echo "\t".'</image>' . PHP_EOL;
635
+ }
636
+ else // Use the default image
637
+ {
638
+ echo "\t". '<image>' .PHP_EOL;
639
+ echo "\t\t".'<title>' . $podcast_title_safe . '</title>'.PHP_EOL;
640
+ echo "\t\t".'<url>' . powerpress_get_root_url() . 'rss_default.jpg</url>'.PHP_EOL;
641
+ echo "\t\t".'<link>'. $Feed['url'] . '</link>' . PHP_EOL;
642
+ echo "\t".'</image>' . PHP_EOL;
643
+ }
644
  }
645
+
646
  // Handle iTunes categories
647
  $Categories = powerpress_itunes_categories();
648
  $Cat1 = false; $Cat2 = false; $Cat3 = false;
783
  }
784
 
785
  add_action('rss2_head', 'powerpress_rss2_head');
786
+ add_action('rss2_head_powerpress', 'powerpress_rss2_head');
787
 
788
  function powerpress_rss2_item()
789
  {
867
  PHP_EOL);
868
  }
869
 
870
+ $excerpt_no_html = ''; // for itunes:subtitle if subtitle is blank
871
+ $content_no_html = ''; // for itunes:subtitle if excerpt is blank
872
+ $content_no_html_a = ''; // for itunes:summary if excerpt is blank
873
  if( !$subtitle || !$summary )
874
  {
875
  $excerpt_no_html = strip_tags( get_the_excerpt() );
902
  echo "\t\t<itunes:summary><![CDATA[". powerpress_format_itunes_value($summary, 'summary', true) .']]></itunes:summary>'.PHP_EOL;
903
  else if( $powerpress_feed['enhance_itunes_summary'] )
904
  echo "\t\t<itunes:summary><![CDATA[". powerpress_itunes_summary() .']]></itunes:summary>'.PHP_EOL;
905
+ else if( $excerpt_no_html )
906
  echo "\t\t<itunes:summary><![CDATA[". powerpress_format_itunes_value($excerpt_no_html, 'summary', true) .']]></itunes:summary>'.PHP_EOL;
907
+ else // $content_no_html_a
908
  echo "\t\t<itunes:summary><![CDATA[". powerpress_format_itunes_value($content_no_html_a, 'summary', true) .']]></itunes:summary>'.PHP_EOL;
909
  } else {
910
  if( $summary )
911
  echo "\t\t<itunes:summary>". powerpress_format_itunes_value($summary, 'summary') .'</itunes:summary>'.PHP_EOL;
912
  else if( $powerpress_feed['enhance_itunes_summary'] )
913
+ echo "\t\t<itunes:summary><![CDATA[". powerpress_itunes_summary() .']]></itunes:summary>'.PHP_EOL;
914
+ else if( $excerpt_no_html )
915
  echo "\t\t<itunes:summary>". powerpress_format_itunes_value($excerpt_no_html, 'summary') .'</itunes:summary>'.PHP_EOL;
916
+ else // $content_no_html_a
917
  echo "\t\t<itunes:summary>". powerpress_format_itunes_value($content_no_html_a, 'summary') .'</itunes:summary>'.PHP_EOL;
918
  }
919
 
1009
  }
1010
 
1011
  add_action('rss2_item', 'powerpress_rss2_item');
1012
+ add_action('rss2_item_powerpress', 'powerpress_rss2_item');
1013
 
1014
  function powerpress_filter_rss_enclosure($content)
1015
  {
1487
  if ( !in_array($feed_slug, $wp_rewrite->feeds) ) // we need to add this feed name
1488
  {
1489
  add_feed($feed_slug, 'powerpress_do_podcast_feed');
1490
+ while( list($post_type_slug, $title) = each($FeedSlugPostTypes) )
1491
+ {
1492
+ add_rewrite_rule( '/'. $post_type_slug .'/feed/'. $feed_slug .'/?$', 'index.php?post_type='. $post_type_slug .'&feed='.$feed_slug, 'top' ); // capture the post type feeds
1493
+ add_rewrite_rule( '/'. $post_type_slug .'/feed/'. $feed_slug .'/?$', 'index.php?post_type='. $post_type_slug .'&feed='.$feed_slug, 'bottom' ); // capture the post type feeds
1494
+ }
1495
  }
1496
  }
1497
  }
2434
  function powerpress_itunes_summary()
2435
  {
2436
  $summary = apply_filters( 'the_content', get_the_content() );
2437
+ $summary = str_replace(']]>', ']]&gt;', $summary); // CDATA error prevention
2438
+ $summary = str_replace("<li>", '<li>* ', $summary);
2439
+ $summary = strip_tags($summary, '<a><br>'); // We can leave a tags for itunes:summary
2440
+ $summary = str_replace("\n", "<br />\n", $summary);
2441
+
2442
  return powerpress_trim_itunes_value($summary, 'summary');
2443
  }
2444
 
2445
  function powerpress_format_itunes_value($value, $tag, $cdata=false)
2446
  {
2447
+ if( $tag == 'summary' )
2448
+ $value = nl2br($value); // Does not remove existing br tags if present.
2449
+
2450
  if( $cdata ) {
2451
  $value = str_replace(']]>', ']]&gt;', $value);
2452
  return powerpress_trim_itunes_value($value, $tag);
2476
  $value = @html_entity_decode($value, ENT_COMPAT, 'UTF-8'); // Remove any additional entities such as &nbsp;
2477
  $value = preg_replace( '/&amp;/ui' , '&', $value); // Precaution in case it didn't get removed from function above.
2478
 
 
 
2479
  return esc_html( powerpress_trim_itunes_value($value, $tag) );
2480
  }
2481
 
2489
  switch($tag)
2490
  {
2491
  case 'description':
 
2492
  case 'summary': {
2493
  // 4000 character limit
2494
  if( $length > 4000 )
2495
+ $trim_at = 3997; // 3 less characters so we can add a dot dot dot
2496
  }; break;
2497
  case 'subtitle':
2498
  case 'author':
2535
  if( $remove_new_lines )
2536
  $value = str_replace( array("\r\n\r\n", "\n", "\r", "\t","- "), array(' - ',' ', '', ' ', ''), $value );
2537
 
 
 
 
2538
  return $value;
2539
  }
2540
 
powerpressadmin-editfeed.php CHANGED
@@ -419,6 +419,9 @@ function powerpressadmin_edit_feed_general($FeedSettings, $General)
419
  <p><?php echo __('These are podcast only feeds suitable for submission podcast directories such as iTunes.', 'powerpress'); ?></p>
420
  <p class="description"><?php echo __('Note: We do not recommend submitting your main site feed to podcast directories such as iTunes. iTunes and many other podcast directories work best with feeds that do not have regular blog posts mixed in.', 'powerpress'); ?></p>
421
 
 
 
 
422
  </td>
423
  </tr>
424
 
@@ -426,12 +429,20 @@ function powerpressadmin_edit_feed_general($FeedSettings, $General)
426
  <th scope="row">
427
  <?php echo __('Feed Discovery', 'powerpress'); ?></th>
428
  <td>
429
-
430
- <p><label><input type="checkbox" name="General[feed_links]" value="1" <?php if( !empty($General['feed_links']) && $General['feed_links'] == 1 ) echo 'checked '; ?>/> <?php echo __('Include podcast feed links in HTML headers.', 'powerpress'); ?></label></p>
431
  <p><?php echo __('Adds "feed discovery" links to your web site\'s headers allowing web browsers and feed readers to auto-detect your podcast feeds.', 'powerpress'); ?></p>
432
  </td>
433
  </tr>
434
 
 
 
 
 
 
 
 
 
 
435
 
436
  </table>
437
  <?php
419
  <p><?php echo __('These are podcast only feeds suitable for submission podcast directories such as iTunes.', 'powerpress'); ?></p>
420
  <p class="description"><?php echo __('Note: We do not recommend submitting your main site feed to podcast directories such as iTunes. iTunes and many other podcast directories work best with feeds that do not have regular blog posts mixed in.', 'powerpress'); ?></p>
421
 
422
+ <input type="hidden" name="General[feed_action_hook]" value="0" />
423
+ <p><label><input type="checkbox" name="General[feed_action_hook]" value="1" <?php if( !empty($General['feed_action_hook']) && $General['feed_action_hook'] == 1 ) echo 'checked '; ?>/> <?php echo __('Do not allow other plugins to modify podcast feeds.', 'powerpress'); ?></label></p>
424
+
425
  </td>
426
  </tr>
427
 
429
  <th scope="row">
430
  <?php echo __('Feed Discovery', 'powerpress'); ?></th>
431
  <td>
432
+ <p style="margin-top: 10px;"><label><input type="checkbox" name="General[feed_links]" value="1" <?php if( !empty($General['feed_links']) && $General['feed_links'] == 1 ) echo 'checked '; ?>/> <?php echo __('Include podcast feed links in HTML headers.', 'powerpress'); ?></label></p>
 
433
  <p><?php echo __('Adds "feed discovery" links to your web site\'s headers allowing web browsers and feed readers to auto-detect your podcast feeds.', 'powerpress'); ?></p>
434
  </td>
435
  </tr>
436
 
437
+ <tr valign="top">
438
+ <th scope="row">
439
+ <?php echo __('RSS2 Image', 'powerpress'); ?></th>
440
+ <td>
441
+ <input type="hidden" name="General[disable_rss_image]" value="1" />
442
+ <p><label><input type="checkbox" name="General[disable_rss_image]" value="0" <?php if( empty($General['disable_rss_image']) ) echo 'checked '; ?>/> <?php echo __('Include RSS Image in feeds.', 'powerpress'); ?></label></p>
443
+ </td>
444
+ </tr>
445
+
446
 
447
  </table>
448
  <?php
powerpressadmin-metabox.php CHANGED
@@ -191,7 +191,7 @@ function powerpress_meta_box($object, $box)
191
  }
192
  ?>
193
  <div id="powerpress_podcast_edit_<?php echo $FeedSlug; ?>">
194
- <div class="error below-h2" id="powerpress_warning_<?php echo $FeedSlug; ?>" style="display:none;"></div>
195
  <div class="success below-h2" id="powerpress_success_<?php echo $FeedSlug; ?>" style="display:none;"></div>
196
  <div class="powerpress_row">
197
  <label for="Powerpress[<?php echo $FeedSlug; ?>][url]"><?php echo __('Media URL', 'powerpress'); ?></label>
191
  }
192
  ?>
193
  <div id="powerpress_podcast_edit_<?php echo $FeedSlug; ?>">
194
+ <div class="warning error below-h2" id="powerpress_warning_<?php echo $FeedSlug; ?>" style="display:none;"></div>
195
  <div class="success below-h2" id="powerpress_success_<?php echo $FeedSlug; ?>" style="display:none;"></div>
196
  <div class="powerpress_row">
197
  <label for="Powerpress[<?php echo $FeedSlug; ?>][url]"><?php echo __('Media URL', 'powerpress'); ?></label>
powerpressadmin-rss-import.php CHANGED
@@ -107,7 +107,7 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
107
  ?>
108
  </div>
109
  <div id="powerpress-import-advanced-options-off">
110
- <p><a href="#" onclick="document.getElementById('powerpress-import-advanced-options-off').style.display='none'; document.getElementById('powerpress-import-advanced-options-on').style.display='block'; return false;"><?php echo __('Advanced options', 'powerprses'); ?></a>
111
  </p>
112
  </div>
113
  <div id="powerpress-import-advanced-options-on" style="display: none;">
@@ -879,6 +879,9 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
879
  $options['user-agent'] = 'Blubrry PowerPress/'.POWERPRESS_VERSION;
880
  if( !empty($_GET['import']) && $_GET['import'] == 'powerpress-squarespace-rss-podcast' )
881
  $options['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36';
 
 
 
882
  $options['timeout'] = 10;
883
 
884
  $response = wp_safe_remote_get($_POST['podcast_feed_url'], $options);
@@ -886,7 +889,7 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
886
  echo '<p>'. $response->get_error_message() .'<p>';
887
  return false;
888
  }
889
-
890
  $this->m_content = wp_remote_retrieve_body( $response );
891
  return true;
892
  }
@@ -904,11 +907,11 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
904
 
905
  $powerpress_rss_podcast_import = new PowerPress_RSS_Podcast_Import();
906
 
907
- register_importer('powerpress-soundcloud-rss-podcast', __('Podcast from SoundCloud', 'powerpress'), __('Import episdoes from a SoundCloud podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
908
- register_importer('powerpress-libsyn-rss-podcast', __('Podcast from LibSyn', 'powerpress'), __('Import episdoes from a LibSyn podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
909
- register_importer('powerpress-podbean-rss-podcast', __('Podcast from PodBean ', 'powerpress'), __('Import episdoes from a PodBean podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
910
- register_importer('powerpress-squarespace-rss-podcast', __('Podcast from Squarespace', 'powerpress'), __('Import episdoes from a Squarespace podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
911
- register_importer('powerpress-rss-podcast', __('Podcast RSS Feed', 'powerpress'), __('Import episdoes from a RSS podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
912
 
913
  }; // end if WP_Importer exists
914
 
107
  ?>
108
  </div>
109
  <div id="powerpress-import-advanced-options-off">
110
+ <p><a href="#" onclick="document.getElementById('powerpress-import-advanced-options-off').style.display='none'; document.getElementById('powerpress-import-advanced-options-on').style.display='block'; return false;"><?php echo __('Advanced options', 'powerpress'); ?></a>
111
  </p>
112
  </div>
113
  <div id="powerpress-import-advanced-options-on" style="display: none;">
879
  $options['user-agent'] = 'Blubrry PowerPress/'.POWERPRESS_VERSION;
880
  if( !empty($_GET['import']) && $_GET['import'] == 'powerpress-squarespace-rss-podcast' )
881
  $options['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36';
882
+ else if( !empty($_GET['import']) && $_GET['import'] == 'powerpress-podbean-rss-podcast' )
883
+ $options['user-agent'] = 'iTunes/12.2.2 (Macintosh; OS X 10.10.5) AppleWebKit/600.8.9'; // Common user agent
884
+ // 'gPodder/3.8.4 (+http://gpodder.org/)';
885
  $options['timeout'] = 10;
886
 
887
  $response = wp_safe_remote_get($_POST['podcast_feed_url'], $options);
889
  echo '<p>'. $response->get_error_message() .'<p>';
890
  return false;
891
  }
892
+
893
  $this->m_content = wp_remote_retrieve_body( $response );
894
  return true;
895
  }
907
 
908
  $powerpress_rss_podcast_import = new PowerPress_RSS_Podcast_Import();
909
 
910
+ register_importer('powerpress-soundcloud-rss-podcast', __('Podcast from SoundCloud', 'powerpress'), __('Import episodes from a SoundCloud podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
911
+ register_importer('powerpress-libsyn-rss-podcast', __('Podcast from LibSyn', 'powerpress'), __('Import episodes from a LibSyn podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
912
+ register_importer('powerpress-podbean-rss-podcast', __('Podcast from PodBean ', 'powerpress'), __('Import episodes from a PodBean podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
913
+ register_importer('powerpress-squarespace-rss-podcast', __('Podcast from Squarespace', 'powerpress'), __('Import episodes from a Squarespace podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
914
+ register_importer('powerpress-rss-podcast', __('Podcast RSS Feed', 'powerpress'), __('Import episodes from a RSS podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
915
 
916
  }; // end if WP_Importer exists
917
 
powerpressadmin-tools.php CHANGED
@@ -23,8 +23,8 @@
23
  <p style="margin-top: 5px;"><strong><a href="http://create.blubrry.com/support/"><?php echo __('Blubrry Support', 'powerpress'); ?></a></strong>
24
  - <?php echo __('Get support for your podcast!', 'powerpress'); ?></p>
25
 
26
- <p style="margin-top: 5px;"><strong><a href="http://forum.blubrry.com/"><?php echo __('Blubrry Forum', 'powerpress'); ?></a></strong>
27
- - <?php echo __('Interact with other podcasters, search the archive, or ask questions.', 'powerpress'); ?></p>
28
  </td>
29
  </tr>
30
 
23
  <p style="margin-top: 5px;"><strong><a href="http://create.blubrry.com/support/"><?php echo __('Blubrry Support', 'powerpress'); ?></a></strong>
24
  - <?php echo __('Get support for your podcast!', 'powerpress'); ?></p>
25
 
26
+ <p style="margin-top: 5px;"><strong><a href="https://wordpress.org/support/plugin/powerpress"><?php echo __('Blubrry PowerPress Forum', 'powerpress'); ?></a></strong>
27
+ - <?php echo __('PowerPress support forum on WordPress.org.', 'powerpress'); ?></p>
28
  </td>
29
  </tr>
30
 
powerpressadmin.php CHANGED
@@ -2304,35 +2304,38 @@ jQuery(document).ready(function($) {
2304
  .powerpress_podcast_box .powerpress_row_content {
2305
  margin-left: 120px;
2306
  }
2307
- .powerpress_podcast_box .error {
2308
- margin-top: 10px;
2309
- margin-bottom: 10px;
2310
- padding: 5px;
2311
- font-size: 12px;
2312
- border-width: 1px;
2313
- border-style: solid;
2314
- font-weight: bold;
2315
- text-align: center;
2316
- }
2317
  .powerpress_podcast_box .success {
2318
  margin-top: 10px;
2319
  margin-bottom: 10px;
2320
  padding: 5px;
 
2321
  border-width: 1px;
2322
  border-style: solid;
2323
  font-weight: bold;
2324
  text-align: center;
2325
- border-width: 1px;
2326
- border-style: solid;
2327
  -moz-border-radius: 3px;
2328
  -khtml-border-radius: 3px;
2329
  -webkit-border-radius: 3px;
2330
  border-radius: 3px;
2331
- border-color: #009900;
2332
- background-color: #CCFFCC;
2333
- font-size: 12px;
2334
  position: relative;
2335
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2336
  .powerpress_podcast_box .success a.close {
2337
  position: absolute;
2338
  top: 2px;
@@ -2451,12 +2454,8 @@ function powerpress_get_media_info(FeedSlug)
2451
  timeout: (30 * 1000),
2452
  success: function(response) {
2453
 
2454
- <?php
2455
- if( defined('POWERPRESS_AJAX_DEBUG') )
2456
- echo "\t\t\t\talert(response);\n";
2457
- ?>
2458
- // This logic will parse beyond warning messages generated by the server that we don't know about
2459
 
 
2460
  var foundAt = response.indexOf('VERIFY-OK');
2461
  if( foundAt > 0 )
2462
  {
@@ -2509,12 +2508,20 @@ function powerpress_get_media_info(FeedSlug)
2509
  jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
2510
  jQuery( '#powerpress_warning_'+FeedSlug ).addClass("updated");
2511
  jQuery( '#powerpress_warning_'+FeedSlug ).removeClass("error");
 
 
 
 
2512
  }
2513
  else
2514
  {
2515
  jQuery( '#powerpress_success_'+FeedSlug ).html( '<?php echo __('Media verified successfully.', 'powerpress'); ?> <a href="#" onclick="jQuery( \'#powerpress_success_'+ FeedSlug +'\' ).fadeOut(1000);return false;" title="Close" class="close">X<\/a>' );
2516
  jQuery( '#powerpress_success_'+FeedSlug ).css('display', 'block');
2517
  // setTimeout( function() { jQuery( '#powerpress_success_'+FeedSlug ).fadeOut(1000); }, 10000 );
 
 
 
 
2518
  }
2519
  }
2520
  else
@@ -2529,25 +2536,58 @@ function powerpress_get_media_info(FeedSlug)
2529
  jQuery( '#powerpress_warning_'+FeedSlug ).html( Parts[1] );
2530
  else
2531
  jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Unknown error occurred while checking Media URL.', 'powerpress'); ?>' );
 
 
 
 
 
2532
  jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
2533
  }
2534
  },
2535
- error: function(objAJAXRequest, strError) {
2536
 
2537
- var errorMsg = "HTTP " +objAJAXRequest.statusText;
 
 
2538
  if ( objAJAXRequest.responseText ) {
2539
- errorMsg += ', '+ objAJAXRequest.responseText.replace( /<.[^<>]*?>/g, '' );
2540
  }
2541
 
2542
  jQuery('#powerpress_check_'+FeedSlug).css("display", 'none');
2543
- if( strError == 'timeout' )
2544
  jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Operation timed out.', 'powerpress'); ?>' );
2545
- else if( errorMsg )
2546
- jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '; ?>'+errorMsg );
2547
- else if( strError != null )
2548
- jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '; ?>'+strError );
2549
- else
 
 
 
 
 
 
 
 
 
 
 
 
2550
  jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '. __('Unknown', 'powerpress'); ?>' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2551
  jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
2552
  }
2553
  });
@@ -2982,7 +3022,7 @@ function powerpress_admin_page_footer($SaveButton=true, $form=true)
2982
  <a href="http://create.blubrry.com/manual/" target="_blank" title="<?php echo __('Podcasting Manual', 'powerpress'); ?>"><?php echo __('Podcasting Manual', 'powerpress'); ?></a> |
2983
  <a href="http://create.blubrry.com/resources/" target="_blank" title="<?php echo __('Blubrry PowerPress and related Resources', 'powerpress'); ?>"><?php echo __('Resources', 'powerpress'); ?></a> |
2984
  <a href="http://create.blubrry.com/support/" target="_blank" title="<?php echo __('Blubrry Support', 'powerpress'); ?>"><?php echo __('Support', 'powerpress'); ?></a> |
2985
- <a href="http://forum.blubrry.com/" target="_blank" title="<?php echo __('Blubrry Forum', 'powerpress'); ?>"><?php echo __('Forum', 'powerpress'); ?></a> |
2986
  <a href="http://twitter.com/blubrry" target="_blank" title="<?php echo __('Follow Blubrry on Twitter', 'powerpress'); ?>"><?php echo __('Follow Blubrry on Twitter', 'powerpress'); ?></a>
2987
  </p>
2988
  <?php if( $form ) { ?>
2304
  .powerpress_podcast_box .powerpress_row_content {
2305
  margin-left: 120px;
2306
  }
2307
+ .powerpress_podcast_box .error,
2308
+ .powerpress_podcast_box .warning,
 
 
 
 
 
 
 
 
2309
  .powerpress_podcast_box .success {
2310
  margin-top: 10px;
2311
  margin-bottom: 10px;
2312
  padding: 5px;
2313
+ font-size: 12px;
2314
  border-width: 1px;
2315
  border-style: solid;
2316
  font-weight: bold;
2317
  text-align: center;
 
 
2318
  -moz-border-radius: 3px;
2319
  -khtml-border-radius: 3px;
2320
  -webkit-border-radius: 3px;
2321
  border-radius: 3px;
 
 
 
2322
  position: relative;
2323
  }
2324
+ .powerpress_podcast_box .warning {
2325
+ color: #8a6d3b;
2326
+ border-color: #faebcc;
2327
+ background-color: #fcf8e3;
2328
+ }
2329
+ .powerpress_podcast_box .error {
2330
+ color: #a94442;
2331
+ border-color: #ebccd1;
2332
+ background-color: #f2dede;
2333
+ }
2334
+ .powerpress_podcast_box .success {
2335
+ color: #3c763d;
2336
+ border-color: #d6e9c6;
2337
+ background-color: #dff0d8;
2338
+ }
2339
  .powerpress_podcast_box .success a.close {
2340
  position: absolute;
2341
  top: 2px;
2454
  timeout: (30 * 1000),
2455
  success: function(response) {
2456
 
 
 
 
 
 
2457
 
2458
+ // This logic will parse beyond warning messages generated by the server that we don't know about
2459
  var foundAt = response.indexOf('VERIFY-OK');
2460
  if( foundAt > 0 )
2461
  {
2508
  jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
2509
  jQuery( '#powerpress_warning_'+FeedSlug ).addClass("updated");
2510
  jQuery( '#powerpress_warning_'+FeedSlug ).removeClass("error");
2511
+ <?php
2512
+ if( defined('POWERPRESS_AJAX_DEBUG') )
2513
+ echo "\t\t\t\tjQuery( '#powerpress_warning_'+FeedSlug ).append( '<br/>Complete Response: '+ response);\n";
2514
+ ?>
2515
  }
2516
  else
2517
  {
2518
  jQuery( '#powerpress_success_'+FeedSlug ).html( '<?php echo __('Media verified successfully.', 'powerpress'); ?> <a href="#" onclick="jQuery( \'#powerpress_success_'+ FeedSlug +'\' ).fadeOut(1000);return false;" title="Close" class="close">X<\/a>' );
2519
  jQuery( '#powerpress_success_'+FeedSlug ).css('display', 'block');
2520
  // setTimeout( function() { jQuery( '#powerpress_success_'+FeedSlug ).fadeOut(1000); }, 10000 );
2521
+ <?php
2522
+ if( defined('POWERPRESS_AJAX_DEBUG') )
2523
+ echo "\t\t\t\tjQuery( '#powerpress_success_'+FeedSlug ).append( '<br/>Complete Response: '+ response);\n";
2524
+ ?>
2525
  }
2526
  }
2527
  else
2536
  jQuery( '#powerpress_warning_'+FeedSlug ).html( Parts[1] );
2537
  else
2538
  jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Unknown error occurred while checking Media URL.', 'powerpress'); ?>' );
2539
+
2540
+ <?php
2541
+ if( defined('POWERPRESS_AJAX_DEBUG') )
2542
+ echo "\t\t\t\tjQuery( '#powerpress_warning_'+FeedSlug ).append( '<br/>Complete Response: '+ response);\n";
2543
+ ?>
2544
  jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
2545
  }
2546
  },
2547
+ error: function(objAJAXRequest, textStatus, errorThrown) {
2548
 
2549
+ var errorCode = objAJAXRequest.status;
2550
+ var errorMsg = objAJAXRequest.statusText;
2551
+ var responseClean = '';
2552
  if ( objAJAXRequest.responseText ) {
2553
+ responseClean = objAJAXRequest.responseText.replace( /<.[^<>]*?>/g, '' );
2554
  }
2555
 
2556
  jQuery('#powerpress_check_'+FeedSlug).css("display", 'none');
2557
+ if( textStatus == 'timeout' ) {
2558
  jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Operation timed out.', 'powerpress'); ?>' );
2559
+ }
2560
+ else if( textStatus == 'error' ) {
2561
+ jQuery( '#powerpress_warning_'+FeedSlug ).html( errorCode +' - '+ errorThrown +'<br />');
2562
+ }
2563
+ else if( textStatus == 'abort' ) {
2564
+ jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Operation aborted.', 'powerpress'); ?>' );
2565
+ }
2566
+ else if( textStatus == 'parsererror' ) {
2567
+ jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Parse error occurred.', 'powerpress'); ?>' );
2568
+ }
2569
+ else if( textStatus != null ) {
2570
+ jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '; ?>'+textStatus );
2571
+ }
2572
+ else if( errorMsg ) {
2573
+ jQuery( '#powerpress_warning_'+FeedSlug ).text( +errorMsg );
2574
+ }
2575
+ else {
2576
  jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '. __('Unknown', 'powerpress'); ?>' );
2577
+ }
2578
+
2579
+ if( textStatus != 'error' && errorThrown ) { // If we have an error thrown, lets append it to the error message
2580
+ jQuery('#powerpress_warning_'+FeedSlug).append('<br/>'+errorThrown);
2581
+ }
2582
+
2583
+ <?php
2584
+ if( defined('POWERPRESS_AJAX_DEBUG') ) {
2585
+ echo "\t\t\tif( objAJAXRequest.responseText ) {\n";
2586
+ echo "\t\t\t\tjQuery('#powerpress_warning_'+FeedSlug).text( jQuery('#powerpress_warning_'+FeedSlug).text() +' - Response: '+ objAJAXRequest.responseText);\n";
2587
+ echo "\t\t\t}\n";
2588
+ }
2589
+ ?>
2590
+
2591
  jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
2592
  }
2593
  });
3022
  <a href="http://create.blubrry.com/manual/" target="_blank" title="<?php echo __('Podcasting Manual', 'powerpress'); ?>"><?php echo __('Podcasting Manual', 'powerpress'); ?></a> |
3023
  <a href="http://create.blubrry.com/resources/" target="_blank" title="<?php echo __('Blubrry PowerPress and related Resources', 'powerpress'); ?>"><?php echo __('Resources', 'powerpress'); ?></a> |
3024
  <a href="http://create.blubrry.com/support/" target="_blank" title="<?php echo __('Blubrry Support', 'powerpress'); ?>"><?php echo __('Support', 'powerpress'); ?></a> |
3025
+ <a href="https://wordpress.org/support/plugin/powerpress" target="_blank" title="<?php echo __('Blubrry PowerPress Forum', 'powerpress'); ?>"><?php echo __('Forum', 'powerpress'); ?></a> |
3026
  <a href="http://twitter.com/blubrry" target="_blank" title="<?php echo __('Follow Blubrry on Twitter', 'powerpress'); ?>"><?php echo __('Follow Blubrry on Twitter', 'powerpress'); ?></a>
3027
  </p>
3028
  <?php if( $form ) { ?>
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: amandato, blubrry
3
  Tags: powerpress, podcasting, podcast, podcaster, 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, 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.4.1
6
- Stable tag: 6.3.2
7
  Donate link: https://www.patreon.com/blubrry?ty=h
8
  License: GPLv2 or later
9
 
@@ -127,7 +127,7 @@ Interested translators please [contact us](https://www.blubrry.com/contact/#tran
127
  = Need Help? =
128
  . . . or have some ideas that could improve the plugin?
129
 
130
- * Visit the Blubrry [Community Forum](http://forum.blubrry.com/) and [Blubrry Resources](http://create.blubrry.com/resources/)
131
  * Use the Blubrry [Contact Us](http://www.blubrry.com/contact.php) form
132
  * Blubrry [PowerPress Documentation](http://create.blubrry.com/resources/powerpress/)
133
  * Check out [The Podcasting Manual](http://create.blubrry.com/manual/) - everything you need to know about podcasting
@@ -226,6 +226,22 @@ To install Blubrry PowerPress manually, follow these steps:
226
  = Become a PowerPress Patron! =
227
  Help support your favorite podcasting plugin via Patreon. [Visit Blubrry's Patreon page](https://www.patreon.com/blubrry?ty=h)
228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  = 6.3.2 =
230
  * Released on 2/21/2016
231
  * Added import podcast from Squarespace option (thanks Steve for bringing to our attention that importing from Squarespace requires added logic)
@@ -239,6 +255,7 @@ Help support your favorite podcasting plugin via Patreon. [Visit Blubrry's Patre
239
  * Added width and height attributes to img tag for the HTML5 audio player image. (Thanks Eduard for the patch and information about the Accelerated Mobile Pages Project!)
240
  * Fixed tab control styling when other themes or plugins use newer versions of jquery-ui.
241
  * Added dismissable notification message to alert PowerPress users of the latest iTunes changes.
 
242
 
243
 
244
  = 6.3.1 =
2
  Contributors: amandato, blubrry
3
  Tags: powerpress, podcasting, podcast, podcaster, 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, 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.5
6
+ Stable tag: 6.3.3
7
  Donate link: https://www.patreon.com/blubrry?ty=h
8
  License: GPLv2 or later
9
 
127
  = Need Help? =
128
  . . . or have some ideas that could improve the plugin?
129
 
130
+ * Visit the Blubrry [PowerPress Forum](https://wordpress.org/support/plugin/powerpress) and [Blubrry Resources](http://create.blubrry.com/resources/)
131
  * Use the Blubrry [Contact Us](http://www.blubrry.com/contact.php) form
132
  * Blubrry [PowerPress Documentation](http://create.blubrry.com/resources/powerpress/)
133
  * Check out [The Podcasting Manual](http://create.blubrry.com/manual/) - everything you need to know about podcasting
226
  = Become a PowerPress Patron! =
227
  Help support your favorite podcasting plugin via Patreon. [Visit Blubrry's Patreon page](https://www.patreon.com/blubrry?ty=h)
228
 
229
+ = 6.3.3 =
230
+ * Released on 4/2/2016
231
+ * Improved feed import for PodBean users (they appear to be blocking user agents like SquareSpace)
232
+ * Adding <br /> to new lines for iTunes summary so new lines appear on iTunes desktop app (Thanks Daniel for input!)
233
+ * Added additional code to handle ajax verify media URL errors.
234
+ * Added Feed setting option `Do not allow other plugins to modify podcast feeds.`.
235
+ * Added Feed setting option `Include RSS Image in feeds.`, default is enabled. For themes that set their own site icon in the feeds.
236
+ * Added logic to handle post type podcast only feeds. (Thanks Alan for helping us debug!)
237
+ * Added logic to prevent featured episode from appearing on custom post type feeds.
238
+ * Fixed bug with post type podcasting channel level feed settings not applying correctly when using slug `podcast`. (Thanks Joe for pointing out the issue)
239
+ * Fixed bug with enhanced itunes summary not displaying in some circumstances. (Thanks Filip for bringing to our attention!)
240
+ * Podcast Subscribe sidebar widget category podcasting option now accepts category slug values (in addition to the category numeric ID)
241
+ * Added define option `POWERPRESS_FEED_AUTH_PRINT_WP_ERRORS` to print `wp_authentication` error message when password protected feed authentication fails. This is useful for debugging purposes.
242
+ * Fixed typos in RSS import page. (Thanks Robin!)
243
+
244
+
245
  = 6.3.2 =
246
  * Released on 2/21/2016
247
  * Added import podcast from Squarespace option (thanks Steve for bringing to our attention that importing from Squarespace requires added logic)
255
  * Added width and height attributes to img tag for the HTML5 audio player image. (Thanks Eduard for the patch and information about the Accelerated Mobile Pages Project!)
256
  * Fixed tab control styling when other themes or plugins use newer versions of jquery-ui.
257
  * Added dismissable notification message to alert PowerPress users of the latest iTunes changes.
258
+ * Enhanced iTunes summary option now formats new lines with <br /> tag for use on iOS podcasts app.
259
 
260
 
261
  = 6.3.1 =