PowerPress Podcasting plugin by Blubrry - Version 6.3.2

Version Description

  • Released on 2/21/2016
  • Added import podcast from Squarespace option (thanks Steve for bringing to our attention that importing from Squarespace requires added logic)
  • The itunes:summary tag values can now use CDATA encapsulation. Note updated that <itunes:summary> may not contain HTML, except for hyperlinks. (Thanks Apple iTunes team!)
  • Added checkbox to enable wrapping iTunes summary values with <![CDATA[ ... ]]> tags. This may become a permanent feature.
  • Added new define option POWERPRESS_FEED_TEMPLATE. (Thanks Ron for the suggestion!)
  • Added new define option POWERPRESS_PREMIUM_GROUPS_PLUGIN, for premium podcasting with Groups plugin commonly paired with WooCommerce.
  • Removed iTunes explicit 'no' value from <itunes:explicit> tag. (iTunes change - February, 2016)
  • Updated iTunes recommended image size to 3000 x 3000 saved in a compressed format such as JPG. (iTunes change - February, 2016)
  • Fixed notice message from appearing when using the playlist player (Thanks chefjoef for bringing to our attention).
  • 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!)
  • Fixed tab control styling when other themes or plugins use newer versions of jquery-ui.
  • Added dismissable notification message to alert PowerPress users of the latest iTunes changes.
Download this release

Release Info

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

Code changes from version 6.3.1 to 6.3.2

css/admin.css CHANGED
@@ -1,15 +1,12 @@
1
  /* admin.css */
 
2
  .powerpress-notice,
3
  div.powerpress-notice,
4
  .wrap div.powerpress-notice {
 
5
  margin: 20px 0 10px;
6
  padding: 0 5px;
7
  line-height: 29px;
8
- font-size: 12px;
9
- border-width: 1px;
10
- border-style: solid;
11
- font-weight: bold;
12
- /* background-color: #FFFFE0; /* yellow */
13
  }
14
  .powerpress-error,
15
  div.powerpress-error,
@@ -213,10 +210,23 @@ padding-bottom: 15px;
213
  font-size: 15px;
214
  font-weight: bold;
215
  }
 
 
 
216
 
217
- #powerpress_steps {
218
- margin: 60px 0 40px;
 
 
 
219
  }
 
 
 
 
 
 
 
220
  .powerpress-required {
221
  font-size: 85%;
222
  color: #CC0000;
@@ -228,79 +238,12 @@ padding-bottom: 15px;
228
  display: inline-block;
229
  float: left;
230
  width: 200px;
231
- height: 170px;
232
- border-right: 1px solid #ECECEC;
233
- margin-left: 10px;
234
  margin-right: 0;
235
  text-align: top;
236
  position: relative;
237
- padding-top: 10px;
238
- }
239
- #powerpress_steps h3 {
240
- color: #CCCCCC;
241
- margin: 0;
242
- font-size: 24px;
243
- top: -16px;
244
- left: 0;
245
- position: absolute;
246
- }
247
- #powerpress_single_step h3 {
248
- color: #337EC9;
249
- font-size: 24px;
250
- }
251
- #powerpress_steps p {
252
- font-size: 20px;
253
- margin: 20px 4px;
254
- color: #CCCCCC;
255
- line-height:120%;
256
- }
257
- #powerpress_steps p.normal {
258
- font-size: 14px;
259
- margin: 8px 0 8px 8px;
260
- color: #CCCCCC;
261
- line-height: normal;
262
- }
263
- #powerpress_steps a {
264
- color: #CCCCCC;
265
- }
266
- #powerpreess_step_1 {
267
- background-image: url('../images/DownArrow.png');
268
- background-repeat:no-repeat;
269
- background-position: 6px bottom;
270
- }
271
-
272
- #powerpress_steps .active-step h3 {
273
- color: #337EC9;
274
- }
275
- #powerpress_steps .active-step p,
276
- #powerpress_steps .active-step a {
277
- color: #787878;
278
-
279
- }
280
-
281
- #powerpress_steps>:first-child {
282
- margin-left: 0;
283
- }
284
- .powerpress-step-complete {
285
- position: absolute;
286
- bottom: 0;
287
- right: 0;
288
- height: 46px;
289
- width: 150px;
290
- }
291
- .powerpress-step-complete-box {
292
- border: 1px solid #CCCCCC;
293
- width: 24px;
294
- height: 24px;
295
- display: inline-block;
296
- position: absolute;
297
- bottom: -2px;
298
- right: 20px;
299
- }
300
- .powerpress-step-completed {
301
- background-image: url('../images/Check.png');
302
- background-repeat:no-repeat;
303
- background-position: right 2px;
304
  }
305
 
306
  .blubrry-services {
@@ -355,34 +298,84 @@ padding-bottom: 15px;
355
  font-size: 16px;
356
  margin: 20px 4px;
357
  }
358
- .powerpress-step-complete {
359
- width: 125px;
360
- }
361
- .powerpress-step-complete p {
362
- padding-top: 5px;
363
- }
364
  .blubrry-services .blubrry-hosting {
365
  margin-right: 20px;
366
  }
367
  }
368
  @media screen and (min-width: 1px) and (max-width: 729px) {
369
- .powerpress-step {
370
- width: 130px;
371
- }
372
  #powerpreess_step_1 {
373
  background-position: 1px bottom;
374
  }
375
  #powerpress_steps p {
376
  margin: 10px 4px;
377
  }
378
- .powerpress-step-complete {
379
- width: 110px;
380
- }
381
- #powerpress_steps .powerpress-step-complete p {
382
- padding-top: 20px;
383
- font-size: 12px;
384
- }
385
  .blubrry-services .blubrry-hosting {
386
  margin-right: 10px;
387
  }
388
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /* admin.css */
2
+
3
  .powerpress-notice,
4
  div.powerpress-notice,
5
  .wrap div.powerpress-notice {
6
+
7
  margin: 20px 0 10px;
8
  padding: 0 5px;
9
  line-height: 29px;
 
 
 
 
 
10
  }
11
  .powerpress-error,
12
  div.powerpress-error,
210
  font-size: 15px;
211
  font-weight: bold;
212
  }
213
+ #pp-getting-started-box {
214
+ max-width: 1200px;
215
+ }
216
 
217
+ #pp-getting-started-box h2 {
218
+ font-size: 200%;
219
+ margin-bottom: 20px;
220
+ font-style: oblique;
221
+ line-height: 1.2em;
222
  }
223
+ #pp-getting-started-box > p {
224
+ font-size: 125%;
225
+ }
226
+
227
+
228
+
229
+
230
  .powerpress-required {
231
  font-size: 85%;
232
  color: #CC0000;
238
  display: inline-block;
239
  float: left;
240
  width: 200px;
241
+ width: 24%;
242
+ margin-left: 60px;
 
243
  margin-right: 0;
244
  text-align: top;
245
  position: relative;
246
+ padding: 8px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  }
248
 
249
  .blubrry-services {
298
  font-size: 16px;
299
  margin: 20px 4px;
300
  }
 
 
 
 
 
 
301
  .blubrry-services .blubrry-hosting {
302
  margin-right: 20px;
303
  }
304
  }
305
  @media screen and (min-width: 1px) and (max-width: 729px) {
306
+
 
 
307
  #powerpreess_step_1 {
308
  background-position: 1px bottom;
309
  }
310
  #powerpress_steps p {
311
  margin: 10px 4px;
312
  }
 
 
 
 
 
 
 
313
  .blubrry-services .blubrry-hosting {
314
  margin-right: 10px;
315
  }
316
  }
317
+
318
+ @media screen and (min-width: 1px) and (max-width: 729px) {
319
+
320
+ .powerpress-step {
321
+ width: 24%;
322
+ margin-left: 30px;
323
+ }
324
+ }
325
+
326
+ .numberCircle {
327
+ border-radius: 50%;
328
+ behavior: url(PIE.htc); /* remove if you don't care about IE8 */
329
+
330
+ width: 36px;
331
+ height: 36px;
332
+ padding: 8px;
333
+
334
+ background: #fff;
335
+ border: 2px solid #666;
336
+ color: #666;
337
+ text-align: center;
338
+
339
+ font: 32px Arial, sans-serif;
340
+ }
341
+
342
+ #powerpress_settings_page {
343
+ background: none;
344
+ background-color: inherit;
345
+ border: none;
346
+ }
347
+ #powerpress_settings_page .ui-widget-header {
348
+ background: none;
349
+ border: none;
350
+ }
351
+ #powerpress_settings_page .ui-state-default,
352
+ #powerpress_settings_page .ui-widget-content .ui-state-default,
353
+ #powerpress_settings_page .ui-widget-header .ui-state-default {
354
+ background: none;
355
+ border: none;
356
+ }
357
+ #powerpress_settings_page .ui-tabs-nav li {
358
+ margin-bottom: 0px;
359
+ border-bottom: none;
360
+ }
361
+
362
+ #powerpress_settings_page .ui-tabs-nav li.ui-tabs-active {
363
+ margin-bottom: -1px;
364
+ padding-bottom: 1px;
365
+ }
366
+ #powerpress_settings_page .ui-tabs-nav li a {
367
+ padding: 4px 5px 2px;
368
+ }
369
+ #powerpress_settings_page .ui-tabs-nav li.ui-tabs-active a {
370
+ padding: 4px 5px 3px;
371
+ }
372
+
373
+
374
+ #powerpress_settings_page .powerpress_tab {
375
+ background-color: #FFFFFF;
376
+ border-collapse: separate;
377
+ border-style: solid;
378
+ border-width: 1px;
379
+ border-color: #DFDFDF;
380
+ border-color: #B3B3B3;
381
+ }
css/steps.css ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ #powerpress-steps {
3
+ margin: 20px 0 30px 0;
4
+ overflow: hidden;
5
+ /*CSS counters to number the steps*/
6
+ counter-reset: step;
7
+ text-align: center;
8
+ }
9
+ #powerpress-steps li {
10
+ list-style-type: none;
11
+ color: white;
12
+ color: #999999;
13
+ text-transform: uppercase;
14
+ font-size: 18px;
15
+ width: 33.33%;
16
+ float: left;
17
+ position: relative;
18
+ }
19
+ #powerpress-steps li.pp-step-1:before {
20
+ content: '1';
21
+ }
22
+ #powerpress-steps li.pp-step-2:before {
23
+ content: '2';
24
+ }
25
+ #powerpress-steps li.pp-step-3:before {
26
+ content: '3';
27
+ }
28
+ #powerpress-steps li:before {
29
+ width: 30px;
30
+ line-height: 30px;
31
+ display: block;
32
+ font-size: 18px;
33
+ color: #333;
34
+ background: white;
35
+ background: #999999;
36
+ color: white;
37
+ border-radius: 3px;
38
+ margin: 0 auto 5px auto;
39
+ font-family: arial, verdana;
40
+ }
41
+ #powerpress-steps li:after {
42
+ content: '';
43
+ width: 100%;
44
+ height: 2px;
45
+ background: #999999;
46
+ position: absolute;
47
+ left: -50%;
48
+ top: 14px;
49
+ z-index: -1; /*put it behind the numbers*/
50
+ }
51
+ #powerpress-steps li:first-child:after {
52
+ /*connector not needed before the first step*/
53
+ content: none;
54
+ }
55
+ #powerpress-steps li.pp-step-active:before, #powerpress-steps li.pp-step-active:after{
56
+ background: #0D87E9;
57
+ color: white;
58
+ }
59
+ #powerpress-steps li.pp-step-active {
60
+ color: #0D87E9;
61
+ }
62
+ #powerpress-steps li.pp-step-active p,
63
+ #powerpress-steps li.pp-step-active h3 {
64
+ color: #0D87E9;
65
+ }
66
+ #powerpress-steps p {
67
+ text-transform: none;
68
+ margin: 10px 40px;
69
+ line-height: 1.3em;
70
+ }
71
+ #powerpress-steps h3 {
72
+ text-transform: none;
73
+ margin: 10px 40px;
74
+ font-size: 100%;
75
+ line-height: 1.3em;
76
+ position: relative;
77
+ display: inline-block;
78
+ }
79
+ #powerpress-steps a {
80
+ color: #999999;
81
+ }
82
+ #powerpress-steps li.pp-step-active a {
83
+ color: #003366;
84
+ color: #0D87E9;
85
+ }
86
+ #powerpress-steps li.pp-step-active a:hover {
87
+ color: #003366;
88
+ }
89
+ #powerpress-steps h3.pp-step-h-completed:before
90
+ {
91
+ content: '\2713';
92
+ font-weight: 400;
93
+ font-size: 32px;
94
+ position: absolute;
95
+ left: -25px;
96
+ top: -5px;
97
+ }
98
+
99
+ @media screen and (max-width: 400px) {
100
+ #powerpress-steps p,
101
+ #powerpress-steps h3 {
102
+ margin: 10px 10px;
103
+ }
104
+ #powerpress-steps h3.pp-step-h-completed:before {
105
+ left: -15px;
106
+ }
107
+ }
feed-podcast.php CHANGED
@@ -88,7 +88,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
88
  <?php
89
  }
90
  else // If feed maximizer on
91
- { // itunes does not like CDATA, so we're changing it to the other method...
92
  ?>
93
  <description><?php echo powerpress_format_itunes_value( powerpress_get_the_excerpt_rss(), 'description' ); ?></description>
94
  <?php
88
  <?php
89
  }
90
  else // If feed maximizer on
91
+ {
92
  ?>
93
  <description><?php echo powerpress_format_itunes_value( powerpress_get_the_excerpt_rss(), 'description' ); ?></description>
94
  <?php
powerpress-feed-auth.php CHANGED
@@ -9,18 +9,28 @@
9
  {
10
  $FeedSettings = get_option('powerpress_feed_'.$feed_slug);
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  if( !isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) )
13
  powerpress_feed_auth_basic( $FeedSettings['title'] );
14
 
15
  $user = $_SERVER['PHP_AUTH_USER'];
16
  $password = $_SERVER['PHP_AUTH_PW'];
17
 
18
-
19
-
20
  $userObj = wp_authenticate($user, $password);
21
 
22
-
23
-
24
  if( !is_wp_error($userObj) )
25
  {
26
  // Check capability...
@@ -40,6 +50,7 @@
40
  if( !$error )
41
  $error = __('Unauthorized', 'powerpress');
42
  header('HTTP/1.0 401 Unauthorized');
 
43
  header('WWW-Authenticate: Basic realm="'. str_replace('"', '', $realm_name).'"');
44
 
45
  echo '<!DOCTYPE html>'; // HTML5!
@@ -58,5 +69,6 @@
58
  <?php
59
  exit;
60
  }
 
 
61
 
62
- ?>
9
  {
10
  $FeedSettings = get_option('powerpress_feed_'.$feed_slug);
11
 
12
+ /*
13
+ * php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default
14
+ * For this workaround to work, add this line to your .htaccess file:
15
+ * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
16
+ */
17
+ // Workaround for HTTP Authentication with PHP running as CGI
18
+ if ( !isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['HTTP_AUTHORIZATION'])) {
19
+ $ha = base64_decode( substr($_SERVER['HTTP_AUTHORIZATION'],6) ); // Chop off 'basic ' from the beginning of the value
20
+ if( strstr($ha, ':') ) { // Colon found, lets split it for user:password
21
+ list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', $ha);
22
+ }
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'];
31
 
 
 
32
  $userObj = wp_authenticate($user, $password);
33
 
 
 
34
  if( !is_wp_error($userObj) )
35
  {
36
  // Check capability...
50
  if( !$error )
51
  $error = __('Unauthorized', 'powerpress');
52
  header('HTTP/1.0 401 Unauthorized');
53
+ header('Content-Type: text/html');
54
  header('WWW-Authenticate: Basic realm="'. str_replace('"', '', $realm_name).'"');
55
 
56
  echo '<!DOCTYPE html>'; // HTML5!
69
  <?php
70
  exit;
71
  }
72
+
73
+
74
 
 
powerpress-player.php CHANGED
@@ -1449,6 +1449,7 @@ function powerpressplayer_build_html5audio($media_url, $EpisodeData=array(), $em
1449
  {
1450
  $GeneralSettings = get_option('powerpress_general');
1451
  $cover_image = powerpress_get_root_url() . 'play_audio.png';
 
1452
  if( !empty($EpisodeData['custom_play_button']) )
1453
  {
1454
  $cover_image = $EpisodeData['custom_play_button'];
@@ -1460,7 +1461,10 @@ function powerpressplayer_build_html5audio($media_url, $EpisodeData=array(), $em
1460
 
1461
  $content .= '<div class="powerpress_player" id="powerpress_player_'. $player_id .'">';
1462
  $content .= '<a href="'. $media_url .'" title="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" onclick="return powerpress_embed_html5a(\''.$player_id.'\',\''.$media_url.'\');" target="_blank">';
1463
- $content .= '<img src="'. $cover_image .'" title="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" alt="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" style="border:0;" />';
 
 
 
1464
  $content .= '</a>';
1465
  $content .= "</div>\n";
1466
 
1449
  {
1450
  $GeneralSettings = get_option('powerpress_general');
1451
  $cover_image = powerpress_get_root_url() . 'play_audio.png';
1452
+ $cover_image_default = $cover_image;
1453
  if( !empty($EpisodeData['custom_play_button']) )
1454
  {
1455
  $cover_image = $EpisodeData['custom_play_button'];
1461
 
1462
  $content .= '<div class="powerpress_player" id="powerpress_player_'. $player_id .'">';
1463
  $content .= '<a href="'. $media_url .'" title="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" onclick="return powerpress_embed_html5a(\''.$player_id.'\',\''.$media_url.'\');" target="_blank">';
1464
+ if( $cover_image_default == $cover_image )
1465
+ $content .= '<img src="'. $cover_image .'" title="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" alt="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" style="border:0;" width="23px" height="24px" />';
1466
+ else
1467
+ $content .= '<img src="'. $cover_image .'" title="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" alt="'. htmlspecialchars(POWERPRESS_PLAY_TEXT) .'" style="border:0;" />';
1468
  $content .= '</a>';
1469
  $content .= "</div>\n";
1470
 
powerpress-playlist.php CHANGED
@@ -339,7 +339,7 @@ function powerpress_playlist_shortcode( $attr ) {
339
  if( !empty($post_type) )
340
  {
341
  $PostTypeSettingsArray = get_option('powerpress_posttype_'.$post_type);
342
- if( is_array($PostTypeSettingsArray[ $slug ] ) )
343
  {
344
  $ProgramSettings = $PostTypeSettingsArray[ $slug ];
345
  }
339
  if( !empty($post_type) )
340
  {
341
  $PostTypeSettingsArray = get_option('powerpress_posttype_'.$post_type);
342
+ if( isset($PostTypeSettingsArray[ $slug ]) && is_array($PostTypeSettingsArray[ $slug ] ) )
343
  {
344
  $ProgramSettings = $PostTypeSettingsArray[ $slug ];
345
  }
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.1
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Requires at least: 3.7
10
- Tested up to: 4.4
11
  Text Domain: powerpress
12
  Change Log:
13
  Please see readme.txt for detailed change log.
@@ -552,15 +552,22 @@ function powerpress_rss2_head()
552
  echo "\t<itunes:new-feed-url>". htmlspecialchars(trim($Feed['itunes_new_feed_url'])) .'</itunes:new-feed-url>'.PHP_EOL;
553
  }
554
 
555
- if( !empty($Feed['itunes_summary']) )
556
- echo "\t".'<itunes:summary>'. powerpress_format_itunes_value( $Feed['itunes_summary'], 'summary' ) .'</itunes:summary>'.PHP_EOL;
557
- else
558
- echo "\t".'<itunes:summary>'. powerpress_format_itunes_value( get_bloginfo('description'), 'summary' ) .'</itunes:summary>'.PHP_EOL;
559
-
 
 
 
 
 
 
 
560
  if( !empty($powerpress_feed['itunes_talent_name']) )
561
  echo "\t<itunes:author>" . esc_html($powerpress_feed['itunes_talent_name']) . '</itunes:author>'.PHP_EOL;
562
 
563
- if( !empty($powerpress_feed['explicit']) )
564
  echo "\t".'<itunes:explicit>' . $powerpress_feed['explicit'] . '</itunes:explicit>'.PHP_EOL;
565
 
566
  if( !empty($Feed['itunes_block']) )
@@ -854,16 +861,15 @@ function powerpress_rss2_item()
854
  $content_no_html_a = '';
855
  if( !$subtitle || !$summary )
856
  {
857
- $excerpt_no_html_a = strip_tags($post->post_excerpt , '<a>');
858
- $excerpt_no_html = strip_tags($post->post_excerpt);
859
  }
860
 
861
  if( (!$subtitle && !$excerpt_no_html) || (!$summary && !$powerpress_feed['enhance_itunes_summary'] && !$excerpt_no_html ) )
862
  {
863
  // Strip and format the wordpress way, but don't apply any other filters for these itunes tags
864
- $content_no_html = $post->post_content;
865
  $content_no_html = strip_shortcodes( $content_no_html );
866
- $content_no_html = str_replace(']]>', ']]&gt;', $content_no_html);
867
  $content_no_html_a = strip_tags($content_no_html, '<a>');
868
  $content_no_html = strip_tags($content_no_html);
869
  }
@@ -877,14 +883,28 @@ function powerpress_rss2_item()
877
 
878
  if( empty($powerpress_feed['feed_maximizer_on']) )
879
  {
880
- if( $summary )
881
- echo "\t\t<itunes:summary>". powerpress_format_itunes_value($summary, 'summary') .'</itunes:summary>'.PHP_EOL;
882
- else if( $powerpress_feed['enhance_itunes_summary'] )
883
- echo "\t\t<itunes:summary><![CDATA[". powerpress_itunes_summary($post->post_content) .']]></itunes:summary>'.PHP_EOL;
884
- else if( $excerpt_no_html ) // $content_no_html_a
885
- echo "\t\t<itunes:summary>". powerpress_format_itunes_value($excerpt_no_html, 'summary') .'</itunes:summary>'.PHP_EOL;
886
- else
887
- echo "\t\t<itunes:summary>". powerpress_format_itunes_value($content_no_html_a, 'summary') .'</itunes:summary>'.PHP_EOL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
888
 
889
  if( $author )
890
  echo "\t\t<itunes:author>" . esc_html($author) . '</itunes:author>'.PHP_EOL;
@@ -898,7 +918,7 @@ function powerpress_rss2_item()
898
  echo "\t\t".'<itunes:image href="' . esc_html( str_replace(' ', '+', $powerpress_feed['itunes_image']), 'double') . '" />'.PHP_EOL;
899
  }
900
 
901
- if( $explicit )
902
  echo "\t\t<itunes:explicit>" . $explicit . '</itunes:explicit>'.PHP_EOL;
903
 
904
  if( $EpisodeData['duration'] && preg_match('/^(\d{1,2}:){0,2}\d{1,2}$/i', ltrim($EpisodeData['duration'], '0:') ) ) // Include duration if it is valid
@@ -1273,7 +1293,11 @@ function powerpress_do_podcast_feed($for_comments=false)
1273
  }
1274
 
1275
  // Use the template to gurantee future WordPress behavior
1276
- load_template( POWERPRESS_ABSPATH . '/feed-podcast.php' );
 
 
 
 
1277
  }
1278
 
1279
  function powerpress_template_redirect()
@@ -2247,40 +2271,6 @@ function powerpress_get_contenttype($file, $use_wp_check_filetype = true)
2247
  return '';
2248
  }
2249
 
2250
- function powerpress_itunes_summary($html)
2251
- {
2252
- // Do some smart conversion of the post html to readable text without HTML.
2253
- /*
2254
- // First, convert: <a href="link"...>label</a>
2255
- // to: label (link)
2256
- $html = preg_replace_callback('/(\<a[^\>]*href="([^"]*)"[^\>]*>([^\<]*)<\/a\>)/i',
2257
- create_function(
2258
- '$matches',
2259
- 'return "{$matches[3]} ({$matches[2]})";'
2260
- ),
2261
- $html);
2262
-
2263
- // Second, convert: <img src="link" title="title" />
2264
- // to: if no title (image: link) or (image title: link)
2265
- $html = preg_replace_callback('/(\<img[^\>]*src="([^"]*)"[^\>]*[^\>]*\>)/i',
2266
- create_function(
2267
- '$matches',
2268
- 'return "({$matches[2]})";'
2269
- ),
2270
- $html);
2271
- */
2272
-
2273
- // For now make them bullet points...
2274
- $html = str_replace('<li>', '<li>* ', $html);
2275
-
2276
- // Now do all the other regular conversions...
2277
- $html = strip_shortcodes( $html );
2278
- $html = str_replace(']]>', ']]&gt;', $html);
2279
- $content_no_html = strip_tags($html, '<a>'); // We can leave a tags
2280
- $content_no_html = powerpress_format_itunes_value($content_no_html, 'summary-enhanced');
2281
- //$content_no_html = preg_replace('/(\(http:\/\/[^\)\s]*)$/i', '', $content_no_html);
2282
- return $content_no_html;
2283
- }
2284
 
2285
  function powerpress_itunes_categories($PrefixSubCategories = false)
2286
  {
@@ -2424,8 +2414,21 @@ function powerpress_get_root_url()
2424
  return $plugin_url . '/';
2425
  }
2426
 
2427
- function powerpress_format_itunes_value($value, $tag)
2428
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
2429
  if( !defined('POWERPRESS_DISABLE_ITUNES_UTF8') || POWERPRESS_DISABLE_ITUNES_UTF8 == false ) // If not defined or it is false
2430
  {
2431
  global $wpdb;
@@ -2435,10 +2438,6 @@ function powerpress_format_itunes_value($value, $tag)
2435
  case 'utf8mb3': break;
2436
  case 'utf8mb4': break;
2437
  default: {
2438
- //if( defined('DB_CHARSET') && DB_CHARSET == 'utf8' ) {
2439
- // break; }
2440
- //if( defined('DB_CHARSET') && DB_CHARSET == 'utf8mb4' ) {
2441
- // break; }
2442
 
2443
  // preg_match fails when it encounters invalid UTF8 in $string
2444
  if ( 1 !== @preg_match( '/^./us', $value ) ) {
@@ -3196,3 +3195,29 @@ if( defined('POWERPRESS_NEW_CODE') && POWERPRESS_NEW_CODE && file_exists(POWERPR
3196
  require_once(POWERPRESS_ABSPATH.'/powerpress-new-code.php');
3197
  }
3198
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.
552
  echo "\t<itunes:new-feed-url>". htmlspecialchars(trim($Feed['itunes_new_feed_url'])) .'</itunes:new-feed-url>'.PHP_EOL;
553
  }
554
 
555
+ if( !empty($General['itunes_cdata']) ) {
556
+ if( !empty($Feed['itunes_summary']) )
557
+ echo "\t".'<itunes:summary><![CDATA['. powerpress_format_itunes_value( $Feed['itunes_summary'], 'summary', true ) .']]></itunes:summary>'.PHP_EOL;
558
+ else
559
+ echo "\t".'<itunes:summary><![CDATA['. powerpress_format_itunes_value( get_bloginfo('description'), 'summary', true ) .']]></itunes:summary>'.PHP_EOL;
560
+ } else {
561
+ if( !empty($Feed['itunes_summary']) )
562
+ echo "\t".'<itunes:summary>'. powerpress_format_itunes_value( $Feed['itunes_summary'], 'summary' ) .'</itunes:summary>'.PHP_EOL;
563
+ else
564
+ echo "\t".'<itunes:summary>'. powerpress_format_itunes_value( get_bloginfo('description'), 'summary' ) .'</itunes:summary>'.PHP_EOL;
565
+ }
566
+
567
  if( !empty($powerpress_feed['itunes_talent_name']) )
568
  echo "\t<itunes:author>" . esc_html($powerpress_feed['itunes_talent_name']) . '</itunes:author>'.PHP_EOL;
569
 
570
+ if( !empty($powerpress_feed['explicit']) && $powerpress_feed['explicit'] != 'no' )
571
  echo "\t".'<itunes:explicit>' . $powerpress_feed['explicit'] . '</itunes:explicit>'.PHP_EOL;
572
 
573
  if( !empty($Feed['itunes_block']) )
861
  $content_no_html_a = '';
862
  if( !$subtitle || !$summary )
863
  {
864
+ $excerpt_no_html = strip_tags( get_the_excerpt() );
 
865
  }
866
 
867
  if( (!$subtitle && !$excerpt_no_html) || (!$summary && !$powerpress_feed['enhance_itunes_summary'] && !$excerpt_no_html ) )
868
  {
869
  // Strip and format the wordpress way, but don't apply any other filters for these itunes tags
870
+ $content_no_html = get_the_content();
871
  $content_no_html = strip_shortcodes( $content_no_html );
872
+ //$content_no_html = str_replace(']]>', ']]&gt;', $content_no_html);
873
  $content_no_html_a = strip_tags($content_no_html, '<a>');
874
  $content_no_html = strip_tags($content_no_html);
875
  }
883
 
884
  if( empty($powerpress_feed['feed_maximizer_on']) )
885
  {
886
+ $General = get_option('powerpress_general');
887
+
888
+ if( !empty($General['itunes_cdata']) )
889
+ {
890
+ if( $summary )
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
 
909
  if( $author )
910
  echo "\t\t<itunes:author>" . esc_html($author) . '</itunes:author>'.PHP_EOL;
918
  echo "\t\t".'<itunes:image href="' . esc_html( str_replace(' ', '+', $powerpress_feed['itunes_image']), 'double') . '" />'.PHP_EOL;
919
  }
920
 
921
+ if( !empty($explicit) && $explicit != 'no' )
922
  echo "\t\t<itunes:explicit>" . $explicit . '</itunes:explicit>'.PHP_EOL;
923
 
924
  if( $EpisodeData['duration'] && preg_match('/^(\d{1,2}:){0,2}\d{1,2}$/i', ltrim($EpisodeData['duration'], '0:') ) ) // Include duration if it is valid
1293
  }
1294
 
1295
  // Use the template to gurantee future WordPress behavior
1296
+ if( defined('POWERPRESS_FEED_TEMPLATE') ) {
1297
+ load_template( POWERPRESS_FEED_TEMPLATE );
1298
+ } else {
1299
+ load_template( POWERPRESS_ABSPATH . '/feed-podcast.php' );
1300
+ }
1301
  }
1302
 
1303
  function powerpress_template_redirect()
2271
  return '';
2272
  }
2273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2274
 
2275
  function powerpress_itunes_categories($PrefixSubCategories = false)
2276
  {
2414
  return $plugin_url . '/';
2415
  }
2416
 
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);
2430
+ }
2431
+
2432
  if( !defined('POWERPRESS_DISABLE_ITUNES_UTF8') || POWERPRESS_DISABLE_ITUNES_UTF8 == false ) // If not defined or it is false
2433
  {
2434
  global $wpdb;
2438
  case 'utf8mb3': break;
2439
  case 'utf8mb4': break;
2440
  default: {
 
 
 
 
2441
 
2442
  // preg_match fails when it encounters invalid UTF8 in $string
2443
  if ( 1 !== @preg_match( '/^./us', $value ) ) {
3195
  require_once(POWERPRESS_ABSPATH.'/powerpress-new-code.php');
3196
  }
3197
  */
3198
+
3199
+
3200
+ if( defined('POWERPRESS_PREMIUM_GROUPS_PLUGIN') ) {
3201
+
3202
+ function powerpress_pre_get_posts($query) {
3203
+ if( is_feed() && powerpress_is_custom_podcast_feed() && method_exists('Groups_Post_Access', 'posts_where') )
3204
+ {
3205
+ $feed_slug = get_query_var('feed');
3206
+
3207
+ if( $feed_slug != 'podcast' )
3208
+ {
3209
+ $FeedSettings = get_option('powerpress_feed_'.$feed_slug);
3210
+ if( !empty($FeedSettings['premium']) )
3211
+ {
3212
+ if( has_filter('posts_where', 'Groups_Post_Access::posts_where') )
3213
+ {
3214
+ remove_filter('posts_where', 'Groups_Post_Access::posts_where');
3215
+ }
3216
+ }
3217
+ }
3218
+ }
3219
+ }
3220
+ add_filter('pre_get_posts', 'powerpress_pre_get_posts');
3221
+ }
3222
+
3223
+ // eof
powerpressadmin-basic.php CHANGED
@@ -1659,6 +1659,7 @@ function powerpressadmin_edit_artwork($FeedSettings, $General)
1659
  <th scope="row">
1660
  <?php echo __('iTunes Image', 'powerpress'); ?>
1661
  <span class="powerpress-required"><?php echo __('Required', 'powerpress'); ?></span>
 
1662
  </th>
1663
  <td>
1664
  <input type="text" id="itunes_image" name="Feed[itunes_image]" style="width: 60%; margin-top: 10px;" value="<?php echo esc_attr( !empty($FeedSettings['itunes_image'])? $FeedSettings['itunes_image']:''); ?>" maxlength="255" />
@@ -1667,7 +1668,7 @@ function powerpressadmin_edit_artwork($FeedSettings, $General)
1667
  <p><?php echo __('iTunes image must be at least 1400 x 1400 pixels in .jpg or .png format. iTunes image must not exceed 3000 x 3000 pixels and must use RGB color space.', 'powerpress'); ?> <?php echo __('Example', 'powerpress'); ?>: http://example.com/images/itunes.jpg
1668
  </p>
1669
 
1670
- <p><strong><?php echo __('A square 1400 x 1400 pixel image in .jpg format is recommended.', 'powerpress'); ?></strong></p>
1671
 
1672
  <p>
1673
  <?php echo __('This image is for your listing on the iTunes podcast directory and may also be used by other directories like Blubrry. It is not the artwork that is displayed during episode playback. That artwork needs to be saved into the media file in the form of tags (ID3 tags for mp3) following the production of the media file.', 'powerpress'); ?>
1659
  <th scope="row">
1660
  <?php echo __('iTunes Image', 'powerpress'); ?>
1661
  <span class="powerpress-required"><?php echo __('Required', 'powerpress'); ?></span>
1662
+ <?php echo powerpressadmin_updated( __('recommended size changed February, 2016', 'powerpress') ); ?>
1663
  </th>
1664
  <td>
1665
  <input type="text" id="itunes_image" name="Feed[itunes_image]" style="width: 60%; margin-top: 10px;" value="<?php echo esc_attr( !empty($FeedSettings['itunes_image'])? $FeedSettings['itunes_image']:''); ?>" maxlength="255" />
1668
  <p><?php echo __('iTunes image must be at least 1400 x 1400 pixels in .jpg or .png format. iTunes image must not exceed 3000 x 3000 pixels and must use RGB color space.', 'powerpress'); ?> <?php echo __('Example', 'powerpress'); ?>: http://example.com/images/itunes.jpg
1669
  </p>
1670
 
1671
+ <p><strong><?php echo __('A square 3000 x 3000 pixel image in .jpg format is recommended.', 'powerpress'); ?></strong></p>
1672
 
1673
  <p>
1674
  <?php echo __('This image is for your listing on the iTunes podcast directory and may also be used by other directories like Blubrry. It is not the artwork that is displayed during episode playback. That artwork needs to be saved into the media file in the form of tags (ID3 tags for mp3) following the production of the media file.', 'powerpress'); ?>
powerpressadmin-defaults.php CHANGED
@@ -1,47 +1,23 @@
1
  <?php
2
 
3
 
4
- function powerpressadmin_default_steps($FeedSettings, $General, $Step = 0)
5
  {
 
 
6
  ?>
7
- <div id="powerpress_steps">
8
- <div class="powerpress-step active-step" id="powerpreess_step_1">
9
- <h3><?php echo __('Step 1', 'powerpress'); ?></h3>
10
- <p>
11
- <?php echo __('Fill out the settings on this page', 'powerpress'); ?>
12
- </p>
13
- <?php powerpressadmin_complete_check($Step >= 1); ?>
14
- </div>
15
- <div class="powerpress-step<?php echo ($Step >= 1? ' active-step':''); ?>">
16
- <h3><?php echo __('Step 2', 'powerpress'); ?></h3>
17
- <p>
18
- <a href="http://create.blubrry.com/resources/powerpress/using-powerpress/creating-your-first-episode-with-powerpress/" target="_blank"><?php echo __('Create a blog post with an episode', 'powerpress'); ?></a>
19
- </p>
20
- <p><a href="http://create.blubrry.com/resources/" target="_blank"><?php echo __('Need Help?', 'powerpress'); ?></a>
21
- </p>
22
- <?php powerpressadmin_complete_check($Step >= 2); ?>
23
- </div>
24
- <div class="powerpress-step<?php echo ($Step >= 2? ' active-step':''); ?>">
25
- <h3><?php echo __('Step 3', 'powerpress'); ?></h3>
26
- <p>
27
- <a href="http://create.blubrry.com/manual/podcast-promotion/submit-podcast-to-itunes/?podcast-feed=<?php echo urlencode(get_feed_link('podcast')); ?>" target="_blank"><?php echo __('Submit your feed to iTunes and other podcast directories', 'powerpress'); ?></a>
28
- </p>
29
- <?php powerpressadmin_complete_check($Step == 3); ?>
30
- </div>
31
- <div class="clear"></div>
32
- </div>
33
- <?php
34
-
35
- }
36
-
37
- function powerpressadmin_complete_check($checked=false)
38
- {
39
- ?>
40
- <div class="powerpress-step-complete<?php echo ($checked?' powerpress-step-completed':''); ?>">
41
- <p>complete
42
- <span class="powerpress-step-complete-box">&nbsp;</span>
43
- </p>
44
- </div>
45
  <?php
46
  }
47
 
@@ -108,8 +84,8 @@ jQuery(document).ready(function($) {
108
  </div>
109
 
110
  <?php
111
-
112
- powerpressadmin_default_steps($FeedSettings, $General, $Step);
113
 
114
  if( $MultiSiteServiceSettings && defined('POWERPRESS_MULTISITE_VERSION') )
115
  {
1
  <?php
2
 
3
 
4
+ function powerpressadmin_default_steps($Step = 0, $Heading = true)
5
  {
6
+ if( isset($_GET['pp-step']) )
7
+ $Step = $_GET['pp-step'];
8
  ?>
9
+ <div id="pp-getting-started-box">
10
+ <?php echo ($Heading?'<h2>'. __('Start your podcast in 3 easy steps...', 'powerpress') .'</h2>':''); ?>
11
+ <link rel="stylesheet" type="text/css" href="<?php echo powerpress_get_root_url(); ?>css/steps.css">
12
+ <ul id="powerpress-steps">
13
+ <li class="pp-step-1<?php echo ($Step >= 0? ' pp-step-active':''); ?>"><h3 class="<?php echo ($Step >= 1? 'pp-step-h-completed':''); ?>"><?php echo __('Fill out the settings on this page', 'powerpress'); ?></h3></li>
14
+ <li class="pp-step-2<?php echo ($Step >= 1? ' pp-step-active':''); ?>">
15
+ <h3 class="<?php echo ($Step >= 2? 'pp-step-h-completed':''); ?>"><a href="<?php echo admin_url( 'post-new.php' ); ?>"><?php echo __('Create a blog post with an episode', 'powerpress'); ?></a></h3>
16
+ <p><a href="http://create.blubrry.com/resources/powerpress/using-powerpress/creating-your-first-episode-with-powerpress/" target="_blank"><?php echo __('Need help?', 'powerpress'); ?></a>
17
+ </li>
18
+ <li class="pp-step-3<?php echo ($Step >= 2? ' pp-step-active':''); ?>"><h3 class="<?php echo ($Step >= 3? 'pp-step-h-completed':''); ?>"><a href="http://create.blubrry.com/manual/podcast-promotion/submit-podcast-to-itunes/?podcast-feed=<?php echo urlencode(get_feed_link('podcast')); ?>" target="_blank"><?php echo __('Submit your podcast to iTunes and other podcast directories', 'powerpress'); ?></a></h3></li>
19
+ </ul>
20
+ </div><!-- end pp-getting-started-box -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  <?php
22
  }
23
 
84
  </div>
85
 
86
  <?php
87
+
88
+ powerpressadmin_default_steps($Step);
89
 
90
  if( $MultiSiteServiceSettings && defined('POWERPRESS_MULTISITE_VERSION') )
91
  {
powerpressadmin-editfeed.php CHANGED
@@ -1014,9 +1014,13 @@ function powerpressadmin_edit_itunes_feed($FeedSettings, $General, $FeedAttribs
1014
 
1015
  <?php echo __('iTunes Program Summary', 'powerpress'); ?></th>
1016
  <td>
1017
- <p style="margin-top: 5px;"><?php echo __('Your summary may not contain HTML and cannot exceed 4,000 characters in length.', 'powerpress'); ?></p>
1018
 
1019
  <textarea name="Feed[itunes_summary]" rows="5" style="width:80%;" ><?php echo esc_textarea($FeedSettings['itunes_summary']); ?></textarea>
 
 
 
 
1020
  </td>
1021
  </tr>
1022
 
@@ -1029,7 +1033,7 @@ function powerpressadmin_edit_itunes_feed($FeedSettings, $General, $FeedAttribs
1029
 
1030
  <?php echo __('iTunes Episode Summary', 'powerpress'); ?></th>
1031
  <td>
1032
- <div><input type="checkbox" name="Feed[enhance_itunes_summary]" value="1" <?php echo ( !empty($FeedSettings['enhance_itunes_summary'])?'checked ':''); ?>/> <?php echo __('Optimize iTunes Summary from Blog Posts', 'powerpress'); ?>
1033
  </div>
1034
  <p>
1035
  <?php echo __('Creates a friendlier view of your post/episode content.', 'powerpress'); ?>
@@ -1158,17 +1162,21 @@ reset($Categories);
1158
  <tr valign="top">
1159
  <th scope="row">
1160
  <?php echo __('iTunes Explicit', 'powerpress'); ?>
 
1161
  </th>
1162
  <td>
1163
- <select name="Feed[itunes_explicit]" class="bpp_input_med">
1164
  <?php
1165
- $explicit = array(0=> __('No - display nothing', 'powerpress'), 1=>__('Yes - explicit content', 'powerpress'), 2=>__('Clean - no explicit content', 'powerpress'));
1166
 
1167
  while( list($value,$desc) = each($explicit) )
1168
- echo "\t<option value=\"$value\"". ($FeedSettings['itunes_explicit']==$value?' selected':''). ">$desc</option>\n";
1169
 
1170
  ?>
1171
  </select>
 
 
 
1172
  </td>
1173
  </tr>
1174
  <?php if( !empty($General['advanced_mode_2']) ) { ?>
1014
 
1015
  <?php echo __('iTunes Program Summary', 'powerpress'); ?></th>
1016
  <td>
1017
+ <p style="margin-top: 5px;"><?php echo __('Your summary cannot exceed 4,000 characters in length and should not include HTML, except for hyperlinks', 'powerpress'); ?></p>
1018
 
1019
  <textarea name="Feed[itunes_summary]" rows="5" style="width:80%;" ><?php echo esc_textarea($FeedSettings['itunes_summary']); ?></textarea>
1020
+ <div>
1021
+ <input type="hidden" name="General[itunes_cdata]" value="0" />
1022
+ <input type="checkbox" name="General[itunes_cdata]" value="1" <?php echo ( !empty($General['itunes_cdata'])?'checked ':''); ?>/> <?php echo __('Wrap summary values with &lt;![CDATA[ ... ]]&gt; tags', 'powerpress'); ?>
1023
+ </div>
1024
  </td>
1025
  </tr>
1026
 
1033
 
1034
  <?php echo __('iTunes Episode Summary', 'powerpress'); ?></th>
1035
  <td>
1036
+ <div style="margin-top: 15px;"><input type="checkbox" name="Feed[enhance_itunes_summary]" value="1" <?php echo ( !empty($FeedSettings['enhance_itunes_summary'])?'checked ':''); ?>/> <?php echo __('Optimize iTunes Summary from Blog Posts', 'powerpress'); ?>
1037
  </div>
1038
  <p>
1039
  <?php echo __('Creates a friendlier view of your post/episode content.', 'powerpress'); ?>
1162
  <tr valign="top">
1163
  <th scope="row">
1164
  <?php echo __('iTunes Explicit', 'powerpress'); ?>
1165
+ <span class="powerpress-required"><?php echo __('Required', 'powerpress'); ?></span>
1166
  </th>
1167
  <td>
1168
+ <select name="Feed[itunes_explicit]" style="width: 70%;">
1169
  <?php
1170
+ $explicit = array(0=> __('No option selected', 'powerpress'), 1=>__('Yes - explicit content', 'powerpress'), 2=>__('Clean - no explicit content', 'powerpress'));
1171
 
1172
  while( list($value,$desc) = each($explicit) )
1173
+ echo "\t<option value=\"$value\"". ($FeedSettings['itunes_explicit']==$value?' selected':''). (($FeedSettings['itunes_explicit']!=0&&$value==0)?'disabled':''). ">$desc</option>\n";
1174
 
1175
  ?>
1176
  </select>
1177
+ <p>
1178
+ <em><?php echo __('Note: As of February, 2016, you must select either Yes or Clean.', 'powerpress'); ?></em>
1179
+ </p>
1180
  </td>
1181
  </tr>
1182
  <?php if( !empty($General['advanced_mode_2']) ) { ?>
powerpressadmin-import-feed.php CHANGED
@@ -9,10 +9,15 @@ function powerpress_admin_import_feed()
9
  <p><?php echo __('The following tool will import your podcast episodes to this website.', 'powerpress'); ?></p>
10
 
11
  <ul><li>
 
12
  <ul>
13
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-soundcloud-rss-podcast"); ?>"><?php echo __('Podcast from SoundCloud', 'powerpress'); ?></a></strong></li>
14
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-libsyn-rss-podcast"); ?>"><?php echo __('Podcast from LibSyn', 'powerpress'); ?></a></strong></li>
15
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-podbean-rss-podcast"); ?>"><?php echo __('Podcast from PodBean', 'powerpress'); ?></a></strong></li>
 
 
 
 
16
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-rss-podcast"); ?>"><?php echo __('Podcast RSS Feed', 'powerpress'); ?></a></strong></li>
17
  </ul>
18
  </li></ul>
9
  <p><?php echo __('The following tool will import your podcast episodes to this website.', 'powerpress'); ?></p>
10
 
11
  <ul><li>
12
+ <h3><?php echo __('Import from specific service', 'powerpress'); ?></h3>
13
  <ul>
14
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-soundcloud-rss-podcast"); ?>"><?php echo __('Podcast from SoundCloud', 'powerpress'); ?></a></strong></li>
15
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-libsyn-rss-podcast"); ?>"><?php echo __('Podcast from LibSyn', 'powerpress'); ?></a></strong></li>
16
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-podbean-rss-podcast"); ?>"><?php echo __('Podcast from PodBean', 'powerpress'); ?></a></strong></li>
17
+ <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-squarespace-rss-podcast"); ?>"><?php echo __('Podcast from Squarespace', 'powerpress'); ?></a></strong></li>
18
+ </ul>
19
+ <h3><?php echo __('Import from anywhere else', 'powerpress'); ?></h3>
20
+ <ul>
21
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-rss-podcast"); ?>"><?php echo __('Podcast RSS Feed', 'powerpress'); ?></a></strong></li>
22
  </ul>
23
  </li></ul>
powerpressadmin-metabox.php CHANGED
@@ -413,7 +413,7 @@ function powerpress_meta_box($object, $box)
413
  <textarea id="powerpress_summary_<?php echo $FeedSlug; ?>" name="Powerpress[<?php echo $FeedSlug; ?>][summary]" style="width: 90%; height: 80px; font-size: 90%;"><?php echo esc_textarea($iTunesSummary); ?></textarea>
414
  </div>
415
  <div class="powerpress_row_content">
416
- <em><?php echo __('Your summary may not contain HTML and cannot exceed 4,000 characters in length. Leave blank to use your blog post.', 'powerpress'); ?></em>
417
  </div>
418
  </div>
419
  <?php
413
  <textarea id="powerpress_summary_<?php echo $FeedSlug; ?>" name="Powerpress[<?php echo $FeedSlug; ?>][summary]" style="width: 90%; height: 80px; font-size: 90%;"><?php echo esc_textarea($iTunesSummary); ?></textarea>
414
  </div>
415
  <div class="powerpress_row_content">
416
+ <em><?php echo __('Your summary cannot exceed 4,000 characters in length and should not include HTML, except for hyperlinks. Leave blank to use your blog post.', 'powerpress'); ?></em>
417
  </div>
418
  </div>
419
  <?php
powerpressadmin-notifications.php ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // powerpressadmin-notifications.php
3
+
4
+ // Notice message manager for PowerPress
5
+
6
+ // Inspired by the notifications in Yoast's SEO
7
+ // Also inspired from https://premium.wpmudev.org/blog/adding-admin-notices/
8
+ // For the sake of keeping things simple, we will only include this class when we need to display notifications
9
+
10
+ class PowerPress_Notification {
11
+
12
+ private $settings = array();
13
+
14
+ public function __construct($content, $settings = array() )
15
+ {
16
+ $defaults = array();
17
+ $defaults['content'] = '';
18
+ $defaults['type'] = 'updated';
19
+ $defaults['id'] = '';
20
+ $this->settings = wp_parse_args( $settings, $defaults );
21
+ if( !empty($content) )
22
+ $this->settings['content'] = $content;
23
+ if( empty($this->settings['content']) )
24
+ $this->settings['id'] = crc32($this->settings['content']); // Not ideal, but with no ID we need some unique value
25
+ }
26
+
27
+ public function get_notification_as_string()
28
+ {
29
+ $html = '<div class="powerpress-notice notice is-dismissible ' . esc_attr( $this->settings['type'] ) . '" id="powerpress-notice-'. esc_attr( $this->settings['id'] ) .'">';
30
+ $html .= wpautop( $this->settings['content'] );
31
+
32
+ if( version_compare($GLOBALS['wp_version'], 4.2, '<' ) ) {
33
+ $html .= '<p>&nbsp; <a style="float:right;" href="#" class="notice-dismiss-link">'. __('Dismiss', 'powerpress') .'</a></p>';
34
+ }
35
+ $html .= '</div>' . PHP_EOL;
36
+ return $html;
37
+ }
38
+
39
+ };
40
+
41
+ class PowerPress_Notification_Manager {
42
+
43
+ private $notifications = array();
44
+ private $dismissedNotifications = array();
45
+
46
+ public function __construct()
47
+ {
48
+ $this->dismissedNotifications = get_option('powerpress_dismissed_notices');
49
+ add_action( 'all_admin_notices', array( $this, 'all_admin_notices' ) );
50
+ add_action('wp_ajax_powerpress_notice_dismiss', array($this, 'wp_ajax_powerpress_notice_dismiss') );
51
+ add_action('admin_head', array($this, 'admin_head') );
52
+ }
53
+
54
+ public function all_admin_notices()
55
+ {
56
+ while( list($key, $notification) = each($this->notifications) )
57
+ {
58
+ echo $notification->get_notification_as_string();
59
+ }
60
+ }
61
+
62
+ public function wp_ajax_powerpress_notice_dismiss()
63
+ {
64
+ $dismiss_notice_id = $_POST['dismiss_notice_id'];
65
+ preg_match('/^powerpress-notice-(.*)$/i', $dismiss_notice_id, $match );
66
+ if( empty($match[1]) )
67
+ die('-1');
68
+
69
+ $DismissedNotifications = get_option('powerpress_dismissed_notices');
70
+ if( !is_array($DismissedNotifications) )
71
+ $DismissedNotifications = array();
72
+ $DismissedNotifications[ $match[1] ] = 1;
73
+ update_option('powerpress_dismissed_notices', $DismissedNotifications);
74
+ die('1');
75
+ }
76
+
77
+ function admin_head()
78
+ {
79
+ if( count($this->notifications) > 0 ) // If there are notices to print, then lets also put in the ajax to clear them
80
+ {
81
+ if( version_compare($GLOBALS['wp_version'], 4.2, '>=' ) ) {
82
+ ?>
83
+ <script type="text/javascript"><!--
84
+
85
+ jQuery(document).ready( function() {
86
+
87
+ jQuery(document).on( 'click', '.powerpress-notice .notice-dismiss', function() {
88
+
89
+ var dismissId = jQuery(this).closest('.powerpress-notice').attr('id');
90
+ jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', {action:"powerpress_notice_dismiss", dismiss_notice_id: dismissId });
91
+ });
92
+ });
93
+
94
+ --></script>
95
+ <?php
96
+ }
97
+ else
98
+ {
99
+ ?>
100
+ <script type="text/javascript"><!--
101
+
102
+ jQuery(document).ready( function() {
103
+
104
+ jQuery(document).on( 'click', '.powerpress-notice .notice-dismiss-link', function(e) {
105
+ e.preventDefault();
106
+ var dismissId = jQuery(this).closest('.powerpress-notice').attr('id');
107
+ jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', {action:"powerpress_notice_dismiss", dismiss_notice_id: dismissId });
108
+ jQuery(this).closest('.powerpress-notice').hide(); // Hide the div now we dismissed it
109
+ });
110
+ });
111
+
112
+ --></script>
113
+ <?php
114
+ }
115
+ ?>
116
+ <style>
117
+ .powerpress-notice a {
118
+ text-decoration: underline;
119
+ }
120
+ </style>
121
+ <?php
122
+ }
123
+ }
124
+
125
+ public function dismissed_status($notification_id)
126
+ {
127
+ if( !empty($this->dismissedNotifications[ $notification_id ]) )
128
+ return true;
129
+ return false;
130
+ }
131
+
132
+ public function add($notification_id, $notification_content)
133
+ {
134
+ if( !$this->dismissed_status($notification_id) ) {
135
+ $this->notifications[$notification_id] = new PowerPress_Notification($notification_content, array('id'=>$notification_id) );
136
+ }
137
+ }
138
+
139
+ };
140
+
141
+ function powerpressadmin_notifications_appropriate()
142
+ {
143
+ // Any powerpress page
144
+ if( preg_match('/wp-admin\/.*powerpress/', $_SERVER['REQUEST_URI']) )
145
+ return true;
146
+
147
+ // Dashboard is acceptable:
148
+ if( preg_match('/wp-admin\/(index\.php)?$/', $_SERVER['REQUEST_URI']) )
149
+ return true;
150
+
151
+ // edit posts (pages, post types, etc...)
152
+ if( preg_match('/wp-admin\/edit\.php/', $_SERVER['REQUEST_URI']) )
153
+ return true;
154
+
155
+ // managing plugins
156
+ if( preg_match('/wp-admin\/plugins\.php/', $_SERVER['REQUEST_URI']) )
157
+ return true;
158
+
159
+ // Required so we can dismiss notices
160
+ if( preg_match('/wp-admin\/admin-ajax\.php/', $_SERVER['REQUEST_URI']) )
161
+ return true;
162
+
163
+ return false;
164
+ }
165
+
166
+ if( powerpressadmin_notifications_appropriate() ) {
167
+ $PowerPressNotificationManager = new PowerPress_Notification_Manager();
168
+
169
+ // e.g. usage
170
+ if( !$PowerPressNotificationManager->dismissed_status('apple-201602') ) {
171
+
172
+ $message = '';
173
+ $message .= '<h3 style="margin: 5px 0;">';
174
+ $message .= __('iTunes Update, February, 2016 - Blubrry PowerPress', 'powerpress');
175
+ $message .= '</h3>';
176
+ $message .= __('Apple now recommends using a 3000 x 3000 pixel JPG or PNG in the RGB color space in a compressed format. Saving your image as a JPG with your favorite image editing software should automatically compress your image to optimize for mobile devices.', 'powerpress');
177
+ $message .= ' &mdash; <a href="'. admin_url("admin.php?page=powerpress/powerpressadmin_basic.php#tab7") .'">'. __('Update Now', 'powerpress') .'</a>';
178
+ $message .= ' | <a href="http://www.powerpresspodcast.com/2016/02/19/new-itunes-podcast-directory-recommendations-february-2016/" target="_blank">'. __('Learn More', 'powerpress') .'</a>';
179
+ $message .= "\n\n";
180
+ $message .= __('Apple has changed the iTunes explicit setting. <strong>You <i>must</i> now select "clean" or "explicit"</strong> - the \'no\' option is no longer available', 'powerpress');
181
+ $message .= ' &mdash; <a href="'. admin_url("admin.php?page=powerpress/powerpressadmin_basic.php#tab5") .'">'. __('Update Now', 'powerpress') .'</a>';
182
+ $message .= ' | <a href="http://www.powerpresspodcast.com/2016/02/19/new-itunes-podcast-directory-recommendations-february-2016/" target="_blank">'. __('Learn More', 'powerpress') .'</a>';
183
+ $message .= "\n\n";
184
+ $message .= __('Podcast submissions to the iTunes podcast directory are now managed by the new <a href="https://podcastsconnect.apple.com/" target="_blank">Podcast Connect</a> website. The new website allows you to submit new podcasts, as well as refresh, hide and delete your current podcast listings.', 'powerpress');
185
+ $message .= ' &mdash; <a href="http://www.powerpresspodcast.com/2016/02/19/new-itunes-podcast-directory-recommendations-february-2016/" target="_blank">'. __('Learn More', 'powerpress') .'</a>';
186
+ $message .= "\n\n";
187
+ $message .= '<div style="text-align: center; margin: 5px 0; font-weight: bold;"><i>'. powerpress_review_message() .'</i></div>';
188
+
189
+ // http://www.apple.com/customer-letter/
190
+ // if you love PowerPress, Please rate and review PowerPress here:
191
+
192
+ $PowerPressNotificationManager->add('apple-201602', $message);
193
+ }
194
+ }
195
+
196
+ // eof
powerpressadmin-rss-import.php CHANGED
@@ -39,6 +39,7 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
39
  case 'powerpress-soundcloud-rss-podcast': echo '<h2>'.__('Import Podcast from SoundCloud', 'powerpress').'</h2>'; break;
40
  case 'powerpress-libsyn-rss-podcast': echo '<h2>'.__('Import Podcast from LibSyn', 'powerpress').'</h2>'; break;
41
  case 'powerpress-podbean-rss-podcast': echo '<h2>'.__('Import Podcast from PodBean', 'powerpress').'</h2>'; break;
 
42
  case 'powerpress-rss-podcast':
43
  default: echo '<h2>'.__('Import Podcast RSS Feed', 'powerpress').'</h2>'; break;
44
  }
@@ -73,6 +74,7 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
73
  case 'powerpress-soundcloud-rss-podcast': $placeholder = 'http://feeds.soundcloud.com/users/soundcloud:users:00000000/sounds.rss'; break;
74
  case 'powerpress-libsyn-rss-podcast': $placeholder = 'http://yourshow.libsyn.com/rss'; break;
75
  case 'powerpress-podbean-rss-podcast': $placeholder = 'http://yourshow.podbean.com/feed/'; break;
 
76
  }
77
  ?>
78
  <input type="text" name="podcast_feed_url" id="podcast_feed_url" size="50" class="code" style="width: 90%;" placeholder="<?php echo esc_attr($placeholder); ?>" />
@@ -260,9 +262,19 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
260
  }
261
  }
262
 
263
- $image_data = wp_remote_fopen($itunes_image);
264
- if( !empty($image_data) )
265
- {
 
 
 
 
 
 
 
 
 
 
266
  file_put_contents($upload_path.$filename, $image_data);
267
  $NewSettings['itunes_image'] = $upload_url . $filename;
268
  $NewSettings['rss2_image'] = $itunes_image;
@@ -863,12 +875,19 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
863
  return false;
864
  }
865
 
866
- $content = wp_remote_fopen($_POST['podcast_feed_url']);
867
- if( is_wp_error($content) ) {
868
- echo '<p>'. $content->get_error_message() .'<p>';
 
 
 
 
 
 
869
  return false;
870
  }
871
- $this->m_content = $content;
 
872
  return true;
873
  }
874
 
@@ -888,6 +907,7 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
888
  register_importer('powerpress-soundcloud-rss-podcast', __('Podcast from SoundCloud', 'powerpress'), __('Import episdoes from a SoundCloud podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
889
  register_importer('powerpress-libsyn-rss-podcast', __('Podcast from LibSyn', 'powerpress'), __('Import episdoes from a LibSyn podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
890
  register_importer('powerpress-podbean-rss-podcast', __('Podcast from PodBean ', 'powerpress'), __('Import episdoes from a PodBean podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
 
891
  register_importer('powerpress-rss-podcast', __('Podcast RSS Feed', 'powerpress'), __('Import episdoes from a RSS podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
892
 
893
  }; // end if WP_Importer exists
39
  case 'powerpress-soundcloud-rss-podcast': echo '<h2>'.__('Import Podcast from SoundCloud', 'powerpress').'</h2>'; break;
40
  case 'powerpress-libsyn-rss-podcast': echo '<h2>'.__('Import Podcast from LibSyn', 'powerpress').'</h2>'; break;
41
  case 'powerpress-podbean-rss-podcast': echo '<h2>'.__('Import Podcast from PodBean', 'powerpress').'</h2>'; break;
42
+ case 'powerpress-squarespace-rss-podcast': echo '<h2>'.__('Import Podcast from Squarespace', 'powerpress').'</h2>'; break;
43
  case 'powerpress-rss-podcast':
44
  default: echo '<h2>'.__('Import Podcast RSS Feed', 'powerpress').'</h2>'; break;
45
  }
74
  case 'powerpress-soundcloud-rss-podcast': $placeholder = 'http://feeds.soundcloud.com/users/soundcloud:users:00000000/sounds.rss'; break;
75
  case 'powerpress-libsyn-rss-podcast': $placeholder = 'http://yourshow.libsyn.com/rss'; break;
76
  case 'powerpress-podbean-rss-podcast': $placeholder = 'http://yourshow.podbean.com/feed/'; break;
77
+ case 'powerpress-squarespace-rss-podcast': $placeholder = 'http://example.com/podcast/?format=rss'; break;
78
  }
79
  ?>
80
  <input type="text" name="podcast_feed_url" id="podcast_feed_url" size="50" class="code" style="width: 90%;" placeholder="<?php echo esc_attr($placeholder); ?>" />
262
  }
263
  }
264
 
265
+ $options = array();
266
+ $options['user-agent'] = 'Blubrry PowerPress/'.POWERPRESS_VERSION;
267
+ if( !empty($_GET['import']) && $_GET['import'] == 'powerpress-squarespace-rss-podcast' )
268
+ $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';
269
+ $options['timeout'] = 10;
270
+
271
+ $image_data = '';
272
+ $response = wp_safe_remote_get($itunes_image, $options);
273
+ if ( !is_wp_error( $response ) ) {
274
+ $image_data = wp_remote_retrieve_body( $response );
275
+ }
276
+
277
+ if( !empty($image_data) ) {
278
  file_put_contents($upload_path.$filename, $image_data);
279
  $NewSettings['itunes_image'] = $upload_url . $filename;
280
  $NewSettings['rss2_image'] = $itunes_image;
875
  return false;
876
  }
877
 
878
+ $options = array();
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);
885
+ if ( is_wp_error( $response ) ) {
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
  }
893
 
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
powerpressadmin.php CHANGED
@@ -564,7 +564,7 @@ function powerpress_admin_init()
564
  $General['episode_box_feature_in_itunes'] = 0;
565
  else
566
  $General['episode_box_order'] = 0;
567
-
568
  if( !isset($General['episode_box_block'] ) )
569
  $General['episode_box_block'] = 0;
570
  if( !isset($General['episode_box_gp_block'] ) )
@@ -1344,9 +1344,14 @@ function powerpress_admin_init()
1344
  exit;
1345
  }
1346
 
 
 
1347
  // Hnadle player settings
1348
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-player.php');
1349
  powerpress_admin_players_init();
 
 
 
1350
  }
1351
 
1352
  add_action('admin_init', 'powerpress_admin_init');
@@ -2968,6 +2973,8 @@ function powerpress_admin_page_footer($SaveButton=true, $form=true)
2968
  if( $SaveButton ) { ?>
2969
  <p class="submit">
2970
  <input type="submit" name="Submit" id="powerpress_save_button" class="button-primary" value="<?php echo __('Save Changes', 'powerpress') ?>" />
 
 
2971
  </p>
2972
  <?php } ?>
2973
  <p style="font-size: 85%; text-align: center; padding-bottom: 35px;">
@@ -4303,6 +4310,11 @@ function powerpressadmin_new($style='')
4303
  return '<sup style="'.$style.'">'. __('new!', 'powerpress') .'</sup>';
4304
  }
4305
 
 
 
 
 
 
4306
  function powerpressadmin_notice($updated_message)
4307
  {
4308
  return '<sup style="color: #CC0000; font-weight: bold; font-size: 105%;">'. htmlspecialchars($updated_message) .'</sup>';
@@ -4477,6 +4489,39 @@ $PowerPressClammr = get_option('powerpress_clammr');
4477
  }
4478
  }
4479
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4480
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-jquery.php');
4481
  // Only include the dashboard when appropriate.
4482
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-dashboard.php');
@@ -4485,3 +4530,4 @@ if( defined('WP_LOAD_IMPORTERS') ) {
4485
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-rss-import.php');
4486
  }
4487
 
 
564
  $General['episode_box_feature_in_itunes'] = 0;
565
  else
566
  $General['episode_box_order'] = 0;
567
+
568
  if( !isset($General['episode_box_block'] ) )
569
  $General['episode_box_block'] = 0;
570
  if( !isset($General['episode_box_gp_block'] ) )
1344
  exit;
1345
  }
1346
 
1347
+ add_filter( 'plugin_row_meta', 'powerpress_plugin_row_meta', 10, 2);
1348
+
1349
  // Hnadle player settings
1350
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-player.php');
1351
  powerpress_admin_players_init();
1352
+
1353
+ // Handle notices
1354
+ require_once( POWERPRESS_ABSPATH .'/powerpressadmin-notifications.php');
1355
  }
1356
 
1357
  add_action('admin_init', 'powerpress_admin_init');
2973
  if( $SaveButton ) { ?>
2974
  <p class="submit">
2975
  <input type="submit" name="Submit" id="powerpress_save_button" class="button-primary" value="<?php echo __('Save Changes', 'powerpress') ?>" />
2976
+ &nbsp; &mdash;
2977
+ <strong><i><?php echo powerpress_review_message(); ?></i></strong>
2978
  </p>
2979
  <?php } ?>
2980
  <p style="font-size: 85%; text-align: center; padding-bottom: 35px;">
4310
  return '<sup style="'.$style.'">'. __('new!', 'powerpress') .'</sup>';
4311
  }
4312
 
4313
+ function powerpressadmin_updated($updated_message)
4314
+ {
4315
+ return '<div style="margin: 5px;"><sup style="color: #CC0000; font-weight: bold; font-size: 85%;">'. $updated_message .'</sup></div>';
4316
+ }
4317
+
4318
  function powerpressadmin_notice($updated_message)
4319
  {
4320
  return '<sup style="color: #CC0000; font-weight: bold; font-size: 105%;">'. htmlspecialchars($updated_message) .'</sup>';
4489
  }
4490
  }
4491
 
4492
+ function powerpress_plugin_row_meta( $links, $file ) {
4493
+
4494
+ if ( strpos( $file, 'powerpress.php' ) !== false ) {
4495
+
4496
+ $new_links = array();
4497
+ $new_links[] = powerpress_get_documentation_link();
4498
+ //$new_links[] = '<a href="http://create.blubrry.com/resources/powerpress/powerpress-documentation/" target="_blank">' . __( 'Support', 'powerpress' ) . '</a>';
4499
+ $new_links[] = powerpress_get_review_link();
4500
+
4501
+
4502
+ $links = array_merge( $links, $new_links );
4503
+ }
4504
+
4505
+ return $links;
4506
+ }
4507
+
4508
+ function powerpress_review_message()
4509
+ {
4510
+ return sprintf(__('Fan of PowerPress? Please show your appreciation by <a href="%s" target="_blank">leaving a review</a>.', 'powerpress'), 'https://wordpress.org/support/view/plugin-reviews/powerpress?rate=5#postform');
4511
+ }
4512
+
4513
+ function powerpress_get_review_link()
4514
+ {
4515
+ return '<a href="https://wordpress.org/support/view/plugin-reviews/powerpress?rate=5#postform" target="_blank">' . __( 'Write a review', 'powerpress' ) . '</a>';
4516
+ }
4517
+
4518
+ function powerpress_get_documentation_link()
4519
+ {
4520
+ return '<a href="http://create.blubrry.com/resources/powerpress/powerpress-documentation/" target="_blank">' . __( 'Documentation', 'powerpress' ) . '</a>';
4521
+ }
4522
+
4523
+
4524
+
4525
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-jquery.php');
4526
  // Only include the dashboard when appropriate.
4527
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-dashboard.php');
4530
  require_once( POWERPRESS_ABSPATH .'/powerpressadmin-rss-import.php');
4531
  }
4532
 
4533
+
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === Blubrry PowerPress Podcasting plugin ===
2
  Contributors: amandato, blubrry
3
- Tags: powerpress, podcasting, podcast, podcaster, itunes, google play music, google play, enclosure, professional, apple, apple tv, ipad, iphone, soundcloud, 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.1
7
  Donate link: https://www.patreon.com/blubrry?ty=h
8
  License: GPLv2 or later
9
 
@@ -28,7 +28,7 @@ When you're ready you can switch to Advanced mode to tap into all the options pr
28
  - Integrated HTML5 Media Players: Audio/video Web players with embed support from sites such as YouTube.
29
  - Subscribe tools: Create subscribe page with our exclusive subscribe shortcode embed and subscribe sidebar widget optimized for responsive websites, high-resolution screens and Apple Retina displays.
30
  - Podcasting SEO: Improve discovery of your podcast on search engines such as Google, and with the iTunes podcast directory.
31
- - Podcast Importing: Import your podcast from SoundCloud, LibSyn, PodBean, or other podcast RSS feed.
32
  - Migration tools: Quickly migrate from PodPress, TGS Podcasting, Seriously Simple Podcasting, Blogger, or Movable Type without losing episodes.
33
  - Multi-podcast support: Create separate podcasts by category (Category Podcasting) or by media format (Podcast Channels).
34
  - Post type and taxonomy podcasting: Create podcasts from custom post types and taxonomies.
@@ -226,6 +226,20 @@ 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
 
230
  = 6.3.1 =
231
  * Released on 1/6/2016
1
  === Blubrry PowerPress Podcasting plugin ===
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
 
28
  - Integrated HTML5 Media Players: Audio/video Web players with embed support from sites such as YouTube.
29
  - Subscribe tools: Create subscribe page with our exclusive subscribe shortcode embed and subscribe sidebar widget optimized for responsive websites, high-resolution screens and Apple Retina displays.
30
  - Podcasting SEO: Improve discovery of your podcast on search engines such as Google, and with the iTunes podcast directory.
31
+ - Podcast Importing: Import your podcast from SoundCloud, LibSyn, PodBean, Squarespace, or other podcast RSS feed.
32
  - Migration tools: Quickly migrate from PodPress, TGS Podcasting, Seriously Simple Podcasting, Blogger, or Movable Type without losing episodes.
33
  - Multi-podcast support: Create separate podcasts by category (Category Podcasting) or by media format (Podcast Channels).
34
  - Post type and taxonomy podcasting: Create podcasts from custom post types and taxonomies.
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)
232
+ * The itunes:summary tag values can now use CDATA encapsulation. Note updated that `<itunes:summary>` may not contain HTML, except for hyperlinks. (Thanks Apple iTunes team!)
233
+ * Added checkbox to enable wrapping iTunes summary values with `<![CDATA[ ... ]]>` tags. This may become a permanent feature.
234
+ * Added new define option `POWERPRESS_FEED_TEMPLATE`. (Thanks Ron for the suggestion!)
235
+ * Added new define option `POWERPRESS_PREMIUM_GROUPS_PLUGIN`, for premium podcasting with Groups plugin commonly paired with WooCommerce.
236
+ * Removed iTunes explicit 'no' value from `<itunes:explicit>` tag. (iTunes change - February, 2016)
237
+ * Updated iTunes recommended image size to 3000 x 3000 saved in a compressed format such as JPG. (iTunes change - February, 2016)
238
+ * Fixed notice message from appearing when using the playlist player (Thanks chefjoef for bringing to our attention).
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 =
245
  * Released on 1/6/2016