Version Description
- Released on 2/18/2017
- NOTE: There is no urgency to update to this version unless you can benefit from the new import options, top level iTunes category options, or bug fixes listed.
- Playlist player bug fix: When ids="" are specified, episodes are now listed in the order entered rather than by date. (Thanks Zach Herbert for bringing to our attention!)
- Updated the
powerpress_subscribe
shortcode to include the latest iTunes button in svg format and added the iTunes small badge. Use attribute itunes_badge="true" to display iTunes badge. - Changed import feed code to use the current author ID rather than hard coded to 1. (Thanks @tund3r for the bug fix!)
- Import feed for libsyn updated. (Thanks @tund3r for the code fix!)
- Import feed advanced option "Remove query strings from media URLs" added. (Thanks @tund3r!)
- Fixed rare PHP Notice unserialize() on line 3094 error that may happen if the podcast episode serialized data is not present. (Thanks @hmseb for pointing out the notice to us!)
- Added colon ":" to list of characters that can be in a valid media URL. (Thanks AfterBuzzTV.com! for the heads up!)
- Fixed notice message that can appear when using the media objects with the powerpress shortcode. (Thanks @srumery for reporting the problem!)
- Fixed issue with dashboard failing to load in some cases due to news feed being blocked by web server. (Thanks Jacob K. for helping us debug the problem!)
- iTunes categories with subcategories are no longer strictly enforced. If you want to select "Art" without selecting a sub category you now can. Selecting a category with a sub category is still optimal.
- Added ability to import a podcast feed to a post type podcast feed or to a podcast channel.
- Added ability to set the post status when importing a podcast feed. (Thanks @hgetrost for the feature suggestion!)
- Added compatibility with the Custom Post Widget plugin. (Thanks @aparentdesign for letting us know about the problem)
- Fixed bug where ogg audio was not using the correct audio player. (Thanks @joeress for letting us know about the bug)
- Fixed bug with import not matching episode media URLs correctly. (Thanks @hgetrost for bringing to our attention)
Download this release
Release Info
Developer | amandato |
Plugin | PowerPress Podcasting plugin by Blubrry |
Version | 7.0.4 |
Comparing to | |
See all releases |
Code changes from version 7.0.3 to 7.0.4
- feed-podcast.php +1 -1
- powerpress-player.php +10 -56
- powerpress-playlist.php +6 -2
- powerpress-subscribe.php +12 -1
- powerpress.php +78 -8
- powerpressadmin-dashboard.php +2 -2
- powerpressadmin-editfeed.php +3 -19
- powerpressadmin-rss-import.php +329 -57
- powerpressadmin-taxonomyfeeds.php +6 -0
- powerpressadmin.php +6 -3
- readme.txt +51 -25
feed-podcast.php
CHANGED
@@ -150,7 +150,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'."\n";
|
|
150 |
<?php } // end else strlen( $post->post_content ) <= 0 ?>
|
151 |
<?php } // end else no rss_use_excerpt ?>
|
152 |
<?php
|
153 |
-
}
|
154 |
else // If feed maximizer on
|
155 |
{
|
156 |
?>
|
150 |
<?php } // end else strlen( $post->post_content ) <= 0 ?>
|
151 |
<?php } // end else no rss_use_excerpt ?>
|
152 |
<?php
|
153 |
+
} // feed maximizer off
|
154 |
else // If feed maximizer on
|
155 |
{
|
156 |
?>
|
powerpress-player.php
CHANGED
@@ -519,6 +519,8 @@ function powerpressplayer_player_audio($content, $media_url, $EpisodeData = arra
|
|
519 |
return $content; // Ogg is handled as video
|
520 |
}
|
521 |
case 'oga': {
|
|
|
|
|
522 |
if( !isset($Settings['player']) )
|
523 |
$Settings['player'] = 'mediaelement-audio';
|
524 |
|
@@ -790,12 +792,16 @@ function powerpressplayer_mediaobjects($type, $content, $media_url, $EpisodeData
|
|
790 |
|
791 |
//var_dump($EpisodeData);
|
792 |
$post_title = get_the_title();
|
793 |
-
if( !empty($post_title) )
|
794 |
$addhtml .= '<meta itemprop="name" content="'. htmlspecialchars($post_title) .'" />'.PHP_EOL_WEB;
|
|
|
|
|
795 |
$addhtml .= '<meta itemprop="encodingFormat" content="'. powerpress_get_contenttype($media_url) .'" />'.PHP_EOL_WEB;
|
796 |
-
|
797 |
-
|
798 |
-
|
|
|
|
|
799 |
$addhtml .= '<meta itemprop="description" content="'. htmlspecialchars($EpisodeData['subtitle']) .'" />'.PHP_EOL_WEB;
|
800 |
}
|
801 |
else
|
@@ -1463,58 +1469,6 @@ function powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData=array
|
|
1463 |
return $content;
|
1464 |
}
|
1465 |
|
1466 |
-
/*
|
1467 |
-
HTTML 5 Mobile Player
|
1468 |
-
*/
|
1469 |
-
function powerpressplayer_build_html5mobile($media_url, $EpisodeData)
|
1470 |
-
{
|
1471 |
-
$content = '';
|
1472 |
-
$html5 = true;
|
1473 |
-
// Special logic, we need to check if we're dealing with Android 2.2 or older, in which case we don't want to use HTML5 audio/video due to controls bug
|
1474 |
-
if( preg_match('/android ([\d\.]+)/i', $_SERVER['HTTP_USER_AGENT'], $matches) )
|
1475 |
-
{
|
1476 |
-
if( !empty($matches[1]) && version_compare($matches[1], "2.3") < 0 )
|
1477 |
-
$html5 = false;
|
1478 |
-
}
|
1479 |
-
|
1480 |
-
$extension = powerpressplayer_get_extension($media_url);
|
1481 |
-
switch( $extension )
|
1482 |
-
{
|
1483 |
-
case 'mp4':
|
1484 |
-
case 'webm':
|
1485 |
-
case 'm4v':
|
1486 |
-
case 'ogg':
|
1487 |
-
case 'ogv': {
|
1488 |
-
// Video
|
1489 |
-
$Settings = get_option('powerpress_general');
|
1490 |
-
|
1491 |
-
// MEJS is not ready for mobile, using native HTML5 performs more efficiently at this point. Someday though we will be able to use MEJS for mobile.
|
1492 |
-
if( $html5 && !empty($Settings['video_player']) && $Settings['video_player'] == 'mediaelement-video' )
|
1493 |
-
$content .= powerpressplayer_build_mediaelementvideo($media_url, $EpisodeData);
|
1494 |
-
else if( $html5 )
|
1495 |
-
$content .= powerpressplayer_build_html5video($media_url, $EpisodeData);
|
1496 |
-
else
|
1497 |
-
$content .= powerpressplayer_build_playimage($media_url, $EpisodeData, true);
|
1498 |
-
}; break;
|
1499 |
-
case 'mp3':
|
1500 |
-
case 'm4a':
|
1501 |
-
case 'oga': {
|
1502 |
-
// Audio
|
1503 |
-
$Settings = get_option('powerpress_general');
|
1504 |
-
|
1505 |
-
// MEJS is not ready for mobile, using native HTML5 performs more efficiently at this point. Someday though we will be able to use MEJS for mobile.
|
1506 |
-
if( $html5 && !empty($Settings['player']) && $Settings['player'] == 'mediaelement-audio' )
|
1507 |
-
$content .= powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData);
|
1508 |
-
else if( $html5 )
|
1509 |
-
$content .= powerpressplayer_build_html5audio($media_url, $EpisodeData);
|
1510 |
-
else
|
1511 |
-
$content .= powerpressplayer_build_playimageaudio($media_url, true);
|
1512 |
-
}; break;
|
1513 |
-
}
|
1514 |
-
|
1515 |
-
return $content;
|
1516 |
-
}
|
1517 |
-
|
1518 |
|
1519 |
function powerpressplayer_build_playimage($media_url, $EpisodeData = array(), $include_div = false)
|
1520 |
{
|
519 |
return $content; // Ogg is handled as video
|
520 |
}
|
521 |
case 'oga': {
|
522 |
+
|
523 |
+
$Settings = get_option('powerpress_general');
|
524 |
if( !isset($Settings['player']) )
|
525 |
$Settings['player'] = 'mediaelement-audio';
|
526 |
|
792 |
|
793 |
//var_dump($EpisodeData);
|
794 |
$post_title = get_the_title();
|
795 |
+
if( !empty($post_title) ) {
|
796 |
$addhtml .= '<meta itemprop="name" content="'. htmlspecialchars($post_title) .'" />'.PHP_EOL_WEB;
|
797 |
+
}
|
798 |
+
|
799 |
$addhtml .= '<meta itemprop="encodingFormat" content="'. powerpress_get_contenttype($media_url) .'" />'.PHP_EOL_WEB;
|
800 |
+
if( !empty($EpisodeData['duration']) ) {
|
801 |
+
$addhtml .= '<meta itemprop="duration" content="'. powerpress_iso8601_duration($EpisodeData['duration']) .'" />'.PHP_EOL_WEB; // http://en.wikipedia.org/wiki/ISO_8601#Durations
|
802 |
+
}
|
803 |
+
|
804 |
+
if( !empty($EpisodeData['subtitle']) ) {
|
805 |
$addhtml .= '<meta itemprop="description" content="'. htmlspecialchars($EpisodeData['subtitle']) .'" />'.PHP_EOL_WEB;
|
806 |
}
|
807 |
else
|
1469 |
return $content;
|
1470 |
}
|
1471 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1472 |
|
1473 |
function powerpressplayer_build_playimage($media_url, $EpisodeData = array(), $include_div = false)
|
1474 |
{
|
powerpress-playlist.php
CHANGED
@@ -160,11 +160,11 @@ function powerpress_playlist_episodes($args)
|
|
160 |
$query .= "AND tr.term_taxonomy_id = '". $TaxonomyObj->term_taxonomy_id ."' ";
|
161 |
}
|
162 |
|
|
|
163 |
if( !empty( $args['ids'] ) ) {
|
164 |
// First santity check make sure we are only working with numbers....
|
165 |
if( preg_match('/^[0-9,\s]*$/', $args['ids']) ) {
|
166 |
$ids = explode(',', preg_replace('/(\s)/', '', $args['ids']) );
|
167 |
-
$for_query = '';
|
168 |
while( list($index,$id) = each($ids) ) {
|
169 |
if( empty($id) )
|
170 |
continue;
|
@@ -180,7 +180,11 @@ function powerpress_playlist_episodes($args)
|
|
180 |
}
|
181 |
|
182 |
$query .= "GROUP BY p.ID ";
|
183 |
-
$
|
|
|
|
|
|
|
|
|
184 |
$query .= "LIMIT 0, %d";
|
185 |
|
186 |
$query = $wpdb->prepare($query, ($args['slug'] == 'podcast'?'enclosure': '_'.$args['slug'].':enclosure'), $args['post_type'], $args['limit'] );
|
160 |
$query .= "AND tr.term_taxonomy_id = '". $TaxonomyObj->term_taxonomy_id ."' ";
|
161 |
}
|
162 |
|
163 |
+
$for_query = '';
|
164 |
if( !empty( $args['ids'] ) ) {
|
165 |
// First santity check make sure we are only working with numbers....
|
166 |
if( preg_match('/^[0-9,\s]*$/', $args['ids']) ) {
|
167 |
$ids = explode(',', preg_replace('/(\s)/', '', $args['ids']) );
|
|
|
168 |
while( list($index,$id) = each($ids) ) {
|
169 |
if( empty($id) )
|
170 |
continue;
|
180 |
}
|
181 |
|
182 |
$query .= "GROUP BY p.ID ";
|
183 |
+
if( !empty($for_query) ) {
|
184 |
+
$query .= "ORDER BY FIELD('id', $for_query) ";
|
185 |
+
} else {
|
186 |
+
$query .= "ORDER BY p.post_date DESC ";
|
187 |
+
}
|
188 |
$query .= "LIMIT 0, %d";
|
189 |
|
190 |
$query = $wpdb->prepare($query, ($args['slug'] == 'podcast'?'enclosure': '_'.$args['slug'].':enclosure'), $args['post_type'], $args['limit'] );
|
powerpress-subscribe.php
CHANGED
@@ -455,7 +455,18 @@ function powerpress_subscribe_shortcode( $attr ) {
|
|
455 |
$html .= '';
|
456 |
$html .='<a href="';
|
457 |
$html .= esc_url($Settings['itunes_url']);
|
458 |
-
$html .= '"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
459 |
$html .= '</div>';
|
460 |
return $html;
|
461 |
}
|
455 |
$html .= '';
|
456 |
$html .='<a href="';
|
457 |
$html .= esc_url($Settings['itunes_url']);
|
458 |
+
$html .= '" style="display:inline-block;overflow:hidden;background:url(https://linkmaker.itunes.apple.com/images/badges/en-us/badge_itunes-lrg.svg) no-repeat;width:165px;height:40px;"></a>';
|
459 |
+
$html .= '</div>';
|
460 |
+
return $html;
|
461 |
+
}
|
462 |
+
|
463 |
+
if( !empty($attr['itunes_badge']) && !empty($Settings['itunes_url']) )
|
464 |
+
{
|
465 |
+
$html = '<div>';
|
466 |
+
$html .= '';
|
467 |
+
$html .='<a href="';
|
468 |
+
$html .= esc_url($Settings['itunes_url']);
|
469 |
+
$html .= '" style="display:inline-block;overflow:hidden;background:url(https://linkmaker.itunes.apple.com/images/badges/en-us/badge_itunes-sm.svg) no-repeat;width:80px;height:15px;"></a>';
|
470 |
$html .= '</div>';
|
471 |
return $html;
|
472 |
}
|
powerpress.php
CHANGED
@@ -3,24 +3,24 @@
|
|
3 |
Plugin Name: Blubrry PowerPress
|
4 |
Plugin URI: http://create.blubrry.com/resources/powerpress/
|
5 |
Description: <a href="http://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports iTunes, Google Play, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
|
6 |
-
Version: 7.0.
|
7 |
Author: Blubrry
|
8 |
Author URI: http://www.blubrry.com/
|
9 |
Requires at least: 3.6
|
10 |
-
Tested up to: 4.
|
11 |
Text Domain: powerpress
|
12 |
Change Log:
|
13 |
Please see readme.txt for detailed change log.
|
14 |
|
15 |
Contributors:
|
16 |
-
Angelo Mandato, CIO
|
17 |
See readme.txt for full list of contributors.
|
18 |
|
19 |
Credits:
|
20 |
getID3(), License: GPL 2.0+ by James Heinrich <info [at] getid3.org> http://www.getid3.org
|
21 |
Note: getid3.php analyze() function modified to prevent redundant filesize() function call.
|
22 |
|
23 |
-
Copyright 2008-
|
24 |
|
25 |
License: GPL (http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt)
|
26 |
|
@@ -32,7 +32,7 @@ if( !function_exists('add_action') )
|
|
32 |
die("access denied.");
|
33 |
|
34 |
// WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
|
35 |
-
define('POWERPRESS_VERSION', '7.0.
|
36 |
|
37 |
// Translation support:
|
38 |
if ( !defined('POWERPRESS_ABSPATH') )
|
@@ -174,6 +174,10 @@ function powerpress_content($content)
|
|
174 |
{
|
175 |
return $content; // We don't want to do anything to this excerpt content in this call either...
|
176 |
}
|
|
|
|
|
|
|
|
|
177 |
|
178 |
|
179 |
if( !isset($GeneralSettings['custom_feeds']) )
|
@@ -906,7 +910,7 @@ function powerpress_rss2_item()
|
|
906 |
}
|
907 |
}
|
908 |
|
909 |
-
if( empty($summary) ) { // Backwards
|
910 |
$summary = powerpress_get_the_exerpt( true, !empty($General['feed_action_hook']) ); // Will call powerpress_get_the_content(true) if the excerpt does not exist
|
911 |
}
|
912 |
|
@@ -2827,6 +2831,40 @@ function powerpress_add_redirect_url($MediaURL, $EpisodeData = false) // $channe
|
|
2827 |
}
|
2828 |
}
|
2829 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2830 |
// Allow other apps to update the redirects
|
2831 |
$Redirects = apply_filters('powerpress_redirects', $Redirects, $EpisodeData);
|
2832 |
|
@@ -2864,7 +2902,17 @@ function powerpress_add_redirect_url($MediaURL, $EpisodeData = false) // $channe
|
|
2864 |
//if( !in_array($RedirectDomain, $ValidRedirectDomains) )
|
2865 |
// continue; // Not a valid domain so lets not add it
|
2866 |
|
2867 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2868 |
$NewURL = $URLScheme. $RedirectClean . str_replace($URLScheme, '', $NewURL);
|
2869 |
}
|
2870 |
}
|
@@ -3091,7 +3139,7 @@ function powerpress_get_enclosure_data($post_id, $feed_slug = 'podcast', $raw_da
|
|
3091 |
|
3092 |
if( $Serialized )
|
3093 |
{
|
3094 |
-
$ExtraData = unserialize($Serialized);
|
3095 |
if( $ExtraData && is_array($ExtraData) )
|
3096 |
{
|
3097 |
while( list($key,$value) = each($ExtraData) ) {
|
@@ -3442,6 +3490,28 @@ function powerpress_in_wp_head()
|
|
3442 |
}
|
3443 |
return false;
|
3444 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3445 |
/*
|
3446 |
End Helper Functions
|
3447 |
*/
|
3 |
Plugin Name: Blubrry PowerPress
|
4 |
Plugin URI: http://create.blubrry.com/resources/powerpress/
|
5 |
Description: <a href="http://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports iTunes, Google Play, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
|
6 |
+
Version: 7.0.4
|
7 |
Author: Blubrry
|
8 |
Author URI: http://www.blubrry.com/
|
9 |
Requires at least: 3.6
|
10 |
+
Tested up to: 4.7.3
|
11 |
Text Domain: powerpress
|
12 |
Change Log:
|
13 |
Please see readme.txt for detailed change log.
|
14 |
|
15 |
Contributors:
|
16 |
+
Angelo Mandato, CIO Blubrry - Plugin founder, architect and lead developer
|
17 |
See readme.txt for full list of contributors.
|
18 |
|
19 |
Credits:
|
20 |
getID3(), License: GPL 2.0+ by James Heinrich <info [at] getid3.org> http://www.getid3.org
|
21 |
Note: getid3.php analyze() function modified to prevent redundant filesize() function call.
|
22 |
|
23 |
+
Copyright 2008-2017 Blubrry (http://www.blubrry.com)
|
24 |
|
25 |
License: GPL (http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt)
|
26 |
|
32 |
die("access denied.");
|
33 |
|
34 |
// WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
|
35 |
+
define('POWERPRESS_VERSION', '7.0.4 beta' );
|
36 |
|
37 |
// Translation support:
|
38 |
if ( !defined('POWERPRESS_ABSPATH') )
|
174 |
{
|
175 |
return $content; // We don't want to do anything to this excerpt content in this call either...
|
176 |
}
|
177 |
+
else if( class_exists('custom_post_widget') && powerpress_in_custom_post_widget() )
|
178 |
+
{
|
179 |
+
return $content; // Custom Post Widget compatibility
|
180 |
+
}
|
181 |
|
182 |
|
183 |
if( !isset($GeneralSettings['custom_feeds']) )
|
910 |
}
|
911 |
}
|
912 |
|
913 |
+
if( empty($summary) ) { // Backwards compatibility with PodPress, the excerpt is used as the itunes summary if set
|
914 |
$summary = powerpress_get_the_exerpt( true, !empty($General['feed_action_hook']) ); // Will call powerpress_get_the_content(true) if the excerpt does not exist
|
915 |
}
|
916 |
|
2831 |
}
|
2832 |
}
|
2833 |
|
2834 |
+
if( !empty($GeneralSettings['taxonomy_podcasting']) ) // Taxonomy Podcasting
|
2835 |
+
{
|
2836 |
+
$PowerPressTaxonomies = get_option('powerpress_taxonomy_podcasting');
|
2837 |
+
if( !empty($PowerPressTaxonomies) )
|
2838 |
+
{
|
2839 |
+
$terms = get_terms();
|
2840 |
+
$ttid_found = 0;
|
2841 |
+
$TaxonomySettings = false;
|
2842 |
+
|
2843 |
+
while( list($index,$termObj) = each($terms) )
|
2844 |
+
{
|
2845 |
+
// Skip the default taxonomies
|
2846 |
+
if( $termObj->taxonomy == 'category' || $termObj->taxonomy == 'link_category' || $termObj->taxonomy == 'post_tag' || $termObj->taxonomy == 'nav_menu' )
|
2847 |
+
continue;
|
2848 |
+
|
2849 |
+
if( !empty($PowerPressTaxonomies[ $termObj->term_taxonomy_id ]) )
|
2850 |
+
{
|
2851 |
+
$ttid_found = $termObj->term_taxonomy_id;
|
2852 |
+
|
2853 |
+
$TaxonomySettings = get_option('powerpress_taxonomy_'.$ttid_found);
|
2854 |
+
// Found it???
|
2855 |
+
if( !empty($TaxonomySettings['redirect']) )
|
2856 |
+
{
|
2857 |
+
$Redirects['redirect0'] = $TaxonomySettings['redirect'];
|
2858 |
+
$Redirects['redirect1'] = '';
|
2859 |
+
$Redirects['redirect2'] = '';
|
2860 |
+
$Redirects['redirect3'] = '';
|
2861 |
+
break;
|
2862 |
+
}
|
2863 |
+
}
|
2864 |
+
}
|
2865 |
+
}
|
2866 |
+
}
|
2867 |
+
|
2868 |
// Allow other apps to update the redirects
|
2869 |
$Redirects = apply_filters('powerpress_redirects', $Redirects, $EpisodeData);
|
2870 |
|
2902 |
//if( !in_array($RedirectDomain, $ValidRedirectDomains) )
|
2903 |
// continue; // Not a valid domain so lets not add it
|
2904 |
|
2905 |
+
// Make sure we are no longer doubling up on media.blubrry.com or media.rawvoice.com redirects
|
2906 |
+
//if( ($RedirectDomain == 'media.blubrry.com'||$RedirectDomain == 'media.rawvoice.com') && strstr($NewURL, '/'.$RedirectDomain.'/') )
|
2907 |
+
//{
|
2908 |
+
// // Strip the media.blubrry.com/XXX/x/ or media.blubrry.com/xxx/ from the URL since we will be replacing it
|
2909 |
+
// if( preg_match('/^(.*\/)media\.(?:blubrry|rawvoice)\.com\/[a-zA-Z0-9_-]{2,60}\/([a-zA-Z0-9]\/)?(.*)$/', $NewURL, $matches) )
|
2910 |
+
// {
|
2911 |
+
// $NewURL = $matches[1].$matches[3];
|
2912 |
+
// }
|
2913 |
+
//}
|
2914 |
+
|
2915 |
+
if( !strstr($NewURL, $RedirectClean) ) // If the redirect is not already added...
|
2916 |
$NewURL = $URLScheme. $RedirectClean . str_replace($URLScheme, '', $NewURL);
|
2917 |
}
|
2918 |
}
|
3139 |
|
3140 |
if( $Serialized )
|
3141 |
{
|
3142 |
+
$ExtraData = @unserialize($Serialized);
|
3143 |
if( $ExtraData && is_array($ExtraData) )
|
3144 |
{
|
3145 |
while( list($key,$value) = each($ExtraData) ) {
|
3490 |
}
|
3491 |
return false;
|
3492 |
}
|
3493 |
+
|
3494 |
+
function powerpress_in_custom_post_widget()
|
3495 |
+
{
|
3496 |
+
if( !class_exists('custom_post_widget') )
|
3497 |
+
return false;
|
3498 |
+
|
3499 |
+
$e = new Exception();
|
3500 |
+
$trace = $e->getTrace();
|
3501 |
+
|
3502 |
+
if( !empty($trace) ) {
|
3503 |
+
//var_dump($trace);
|
3504 |
+
while( list($index,$call) = each($trace) ) {
|
3505 |
+
if( isset($call['function']) ) {
|
3506 |
+
// Which calls should we not add the player and links...
|
3507 |
+
switch( $call['function'] ) {
|
3508 |
+
case 'custom_post_widget_shortcode': return true; break;
|
3509 |
+
}
|
3510 |
+
}
|
3511 |
+
}
|
3512 |
+
}
|
3513 |
+
return false;
|
3514 |
+
}
|
3515 |
/*
|
3516 |
End Helper Functions
|
3517 |
*/
|
powerpressadmin-dashboard.php
CHANGED
@@ -45,12 +45,12 @@ function powerpress_get_news($feed_url, $limit=10)
|
|
45 |
|
46 |
// If the feed was erroneously
|
47 |
if ( !$rss_items ) {
|
48 |
-
$md5 = md5( $
|
49 |
delete_transient( 'feed_' . $md5 );
|
50 |
delete_transient( 'feed_mod_' . $md5 );
|
51 |
$rss->__destruct();
|
52 |
unset($rss);
|
53 |
-
$rss = fetch_feed( $
|
54 |
$rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
|
55 |
$rss->__destruct();
|
56 |
unset($rss);
|
45 |
|
46 |
// If the feed was erroneously
|
47 |
if ( !$rss_items ) {
|
48 |
+
$md5 = md5( $feed_url ); // This is from simple-pie, look at member variable ->cache_name_function
|
49 |
delete_transient( 'feed_' . $md5 );
|
50 |
delete_transient( 'feed_mod_' . $md5 );
|
51 |
$rss->__destruct();
|
52 |
unset($rss);
|
53 |
+
$rss = fetch_feed( $feed_url );
|
54 |
$rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
|
55 |
$rss->__destruct();
|
56 |
unset($rss);
|
powerpressadmin-editfeed.php
CHANGED
@@ -3,19 +3,6 @@
|
|
3 |
if( !function_exists('add_action') )
|
4 |
die("access denied.");
|
5 |
|
6 |
-
function powerpress_categories_strict($Categories, $Selected)
|
7 |
-
{
|
8 |
-
$Return = $Categories;
|
9 |
-
$StrictArray = array('01-00', '02-00', '04-00', '05-00', '06-00', '07-00', '11-00', '12-00', '13-00', '14-00', '15-00');
|
10 |
-
while( list($index,$remove) = each($StrictArray) )
|
11 |
-
{
|
12 |
-
if( $Selected == $remove )
|
13 |
-
continue;
|
14 |
-
unset($Return[ $remove ]);
|
15 |
-
}
|
16 |
-
return $Return;
|
17 |
-
}
|
18 |
-
|
19 |
function powerpress_languages()
|
20 |
{
|
21 |
// List copied from PodPress:
|
@@ -863,8 +850,7 @@ $Categories = powerpress_itunes_categories(true);
|
|
863 |
|
864 |
echo '<option value="">'. __('Select Category', 'powerpress') .'</option>';
|
865 |
|
866 |
-
$
|
867 |
-
while( list($value,$desc) = each($UseCategories) )
|
868 |
echo "\t<option value=\"$value\"". ($FeedSettings['itunes_cat_1']==$value?' selected':''). ">".htmlspecialchars($desc)."</option>\n";
|
869 |
|
870 |
reset($Categories);
|
@@ -895,8 +881,7 @@ reset($Categories);
|
|
895 |
|
896 |
|
897 |
echo '<option value="">'. __('Select Category', 'powerpress') .'</option>';
|
898 |
-
$
|
899 |
-
while( list($value,$desc) = each($UseCategories) )
|
900 |
echo "\t<option value=\"$value\"". ($FeedSettings['itunes_cat_2']==$value?' selected':''). ">".htmlspecialchars($desc)."</option>\n";
|
901 |
|
902 |
reset($Categories);
|
@@ -921,8 +906,7 @@ reset($Categories);
|
|
921 |
<?php
|
922 |
|
923 |
echo '<option value="">'. __('Select Category', 'powerpress') .'</option>';
|
924 |
-
$
|
925 |
-
while( list($value,$desc) = each($UseCategories) )
|
926 |
echo "\t<option value=\"$value\"". ($FeedSettings['itunes_cat_3']==$value?' selected':''). ">".htmlspecialchars($desc)."</option>\n";
|
927 |
|
928 |
reset($Categories);
|
3 |
if( !function_exists('add_action') )
|
4 |
die("access denied.");
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
function powerpress_languages()
|
7 |
{
|
8 |
// List copied from PodPress:
|
850 |
|
851 |
echo '<option value="">'. __('Select Category', 'powerpress') .'</option>';
|
852 |
|
853 |
+
while( list($value,$desc) = each($Categories) )
|
|
|
854 |
echo "\t<option value=\"$value\"". ($FeedSettings['itunes_cat_1']==$value?' selected':''). ">".htmlspecialchars($desc)."</option>\n";
|
855 |
|
856 |
reset($Categories);
|
881 |
|
882 |
|
883 |
echo '<option value="">'. __('Select Category', 'powerpress') .'</option>';
|
884 |
+
while( list($value,$desc) = each($Categories) )
|
|
|
885 |
echo "\t<option value=\"$value\"". ($FeedSettings['itunes_cat_2']==$value?' selected':''). ">".htmlspecialchars($desc)."</option>\n";
|
886 |
|
887 |
reset($Categories);
|
906 |
<?php
|
907 |
|
908 |
echo '<option value="">'. __('Select Category', 'powerpress') .'</option>';
|
909 |
+
while( list($value,$desc) = each($Categories) )
|
|
|
910 |
echo "\t<option value=\"$value\"". ($FeedSettings['itunes_cat_3']==$value?' selected':''). ">".htmlspecialchars($desc)."</option>\n";
|
911 |
|
912 |
reset($Categories);
|
powerpressadmin-rss-import.php
CHANGED
@@ -89,11 +89,12 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
|
|
89 |
|
90 |
<p><?php echo __('The following tool will import your podcast episodes to this website.', 'powerpress'); ?></p>
|
91 |
|
92 |
-
<form enctype="multipart/form-data" action="" method="post" name="
|
93 |
<?php wp_nonce_field('import-powerpress-rss') ?>
|
94 |
|
95 |
<div style="width: 70%; margin: auto; height: 8em;">
|
96 |
<input type="hidden" name="step" value="1" />
|
|
|
97 |
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo wp_max_upload_size(); ?>" />
|
98 |
<div style="width: 48%;" class="alignleft">
|
99 |
<h3><label for="podcast_feed_url"><?php _e('Podcast Feed URL:', 'powerpress'); ?></label></h3>
|
@@ -163,36 +164,129 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
|
|
163 |
</div>
|
164 |
</div>
|
165 |
</div>
|
166 |
-
|
167 |
-
|
168 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
169 |
<div class="ppi-option">
|
170 |
-
<label><input type="radio" name="import_to" id="import_to_channel" value="channel" /> <?php echo __('Podcast Channel feed', 'powerpress'); ?></label
|
171 |
-
<div style="
|
172 |
-
<
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
</div>
|
179 |
-
|
180 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
</div>
|
182 |
</div>
|
183 |
-
|
184 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
196 |
?>
|
197 |
</div>
|
198 |
<div class="ppi-option">
|
@@ -235,13 +329,7 @@ jQuery(document).ready( function() {
|
|
235 |
|
236 |
//-->
|
237 |
</script>
|
238 |
-
|
239 |
-
<div class="ppi-option">
|
240 |
-
|
241 |
-
</div>
|
242 |
-
|
243 |
<h3><a href="#" class="pp-expand-section"><?php echo __('Advanced Options', 'powerpress'); ?></a></h3>
|
244 |
-
|
245 |
<div style="margin-left: 24px; display: none;">
|
246 |
<div class="ppi-option">
|
247 |
<label><input type="checkbox" name="NULL" value="1" checked disabled> <?php echo __('Match episode by GUID (required)', 'powerpress'); ?></label>
|
@@ -258,12 +346,27 @@ jQuery(document).ready( function() {
|
|
258 |
<div class="ppi-option">
|
259 |
<label><input type="checkbox" name="import_blog_posts" value="1" > <?php echo __('Include blog posts', 'powerpress'); ?></label>
|
260 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
<div class="ppi-option">
|
262 |
<label for="import_item_limit"><?php echo __('Item limit', 'powerpress'); ?></label>
|
263 |
<input type="text" name="import_item_limit" id="import_item_limit" class="small-text" value="" /> (<?php echo __('leave blank for no limit', 'powerpress'); ?>)
|
264 |
</div>
|
265 |
-
|
266 |
-
|
267 |
</div>
|
268 |
<?php submit_button( __('Import Podcast', 'powerpress' ), 'button-blubrry'); ?>
|
269 |
</div>
|
@@ -274,7 +377,6 @@ jQuery(document).ready( function() {
|
|
274 |
|
275 |
var import_type = jQuery("input[name='import_to']:checked").val()
|
276 |
jQuery('#import-to-'+import_type).show();
|
277 |
-
//alert(import_type);
|
278 |
jQuery("input[name='import_to']").change( function(e) {
|
279 |
jQuery('.import-to').hide(400);
|
280 |
jQuery('#import-to-'+jQuery(this).val() ).show(400);
|
@@ -294,11 +396,24 @@ jQuery(document).ready( function() {
|
|
294 |
return '<' . strtolower( $matches[1] );
|
295 |
}
|
296 |
|
297 |
-
function import_program_info($channel, $overwrite=false, $download_itunes_image=false, $category_id = '', $feed_slug ='') {
|
298 |
$Feed = get_option('powerpress_feed_podcast' );
|
299 |
if( empty($Feed) )
|
300 |
$Feed = get_option('powerpress_feed');
|
301 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
302 |
$NewSettings = array();
|
303 |
|
304 |
$matches = array();
|
@@ -504,7 +619,7 @@ jQuery(document).ready( function() {
|
|
504 |
|
505 |
if( !empty($NewSettings) )
|
506 |
{
|
507 |
-
if( empty($category_id) && empty($feed_slug) ) {
|
508 |
// Save here..
|
509 |
if( get_option('powerpress_feed_podcast') ) { // If the settings were moved to the podcast channels feature...
|
510 |
powerpress_save_settings($NewSettings, 'powerpress_feed_podcast' ); // save a copy here if that is the case.
|
@@ -530,9 +645,12 @@ jQuery(document).ready( function() {
|
|
530 |
|
531 |
powerpress_save_settings($NewSettings);
|
532 |
}
|
|
|
|
|
533 |
} else if ( !empty($feed_slug) ) {
|
534 |
-
|
535 |
-
|
|
|
536 |
}
|
537 |
|
538 |
|
@@ -576,7 +694,7 @@ jQuery(document).ready( function() {
|
|
576 |
}
|
577 |
}
|
578 |
|
579 |
-
function import_item($post, $MatchFilter, $import_blog_posts=false, $category_strict='', $feed_slug='') {
|
580 |
global $wpdb;
|
581 |
$this->m_item_pos++;
|
582 |
|
@@ -612,7 +730,6 @@ jQuery(document).ready( function() {
|
|
612 |
}
|
613 |
|
614 |
// GUID has to be last, as we will use the media URL as the guid as a last resort
|
615 |
-
|
616 |
$guid = false;
|
617 |
if( preg_match('|<guid.*?>(.*?)</guid>|is', $post, $matches) )
|
618 |
$guid = $this->_sanatize_tag_value( $matches[1] );
|
@@ -620,8 +737,12 @@ jQuery(document).ready( function() {
|
|
620 |
$guid = $enclosure['url'];
|
621 |
|
622 |
$media_url = '';
|
623 |
-
if( !empty($enclosure['url']) )
|
|
|
|
|
|
|
624 |
$media_url = $enclosure['url'];
|
|
|
625 |
|
626 |
$post_date_gmt = false;
|
627 |
if( preg_match('|<pubdate>(.*?)</pubdate>|is', $post, $matches) ) {
|
@@ -690,16 +811,39 @@ jQuery(document).ready( function() {
|
|
690 |
$post_content = str_replace('<br>', '<br />', $post_content);
|
691 |
$post_content = str_replace('<hr>', '<hr />', $post_content);
|
692 |
|
693 |
-
$post_author =
|
694 |
-
$post_status = 'publish';
|
695 |
|
696 |
// Save this episode to the database...
|
697 |
$post_to_save = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_status', 'guid', 'categories', 'enclosure');
|
|
|
|
|
|
|
|
|
|
|
698 |
$this->m_item_inserted_count++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
699 |
echo '<span style="color: green; font-weight: bold;">';
|
700 |
echo sprintf(__('<i>%s</i> imported.', 'powerpress'), htmlspecialchars($post_title) );
|
701 |
echo '</span>';
|
702 |
-
|
|
|
|
|
703 |
|
704 |
// Category strict
|
705 |
if( !empty($category_strict) )
|
@@ -707,6 +851,12 @@ jQuery(document).ready( function() {
|
|
707 |
wp_set_post_categories( $post_id, array($category_strict), true );
|
708 |
}
|
709 |
|
|
|
|
|
|
|
|
|
|
|
|
|
710 |
return ( $post_id > 0 );
|
711 |
}
|
712 |
|
@@ -725,14 +875,62 @@ jQuery(document).ready( function() {
|
|
725 |
return $value;
|
726 |
}
|
727 |
|
728 |
-
function import_episodes($MatchFilter, $import_blog_posts=false, $import_item_limit=0, $category='', $feed_slug='') {
|
729 |
global $wpdb;
|
730 |
@set_time_limit(60*15); // Give it 15 minutes
|
731 |
$this->m_item_pos = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
732 |
|
733 |
$item_count = substr_count( $this->m_content, '<item>');
|
734 |
$item_count += substr_count( $this->m_content, '<ITEM>');
|
735 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
736 |
echo '<hr />';
|
737 |
echo '<p><strong>';
|
738 |
echo __('Importing Episodes...', 'powerpress');
|
@@ -761,7 +959,7 @@ jQuery(document).ready( function() {
|
|
761 |
echo '<li>';
|
762 |
$new_start = $item_start_pos + mb_strlen('<item>');
|
763 |
$item_content = mb_substr($this->m_content, $new_start, $item_end_pos - $new_start);
|
764 |
-
$this->import_item($item_content, $MatchFilter, $import_blog_posts, $category, $feed_slug);
|
765 |
echo '</li>';
|
766 |
|
767 |
// Extra stop just in case...
|
@@ -807,13 +1005,74 @@ jQuery(document).ready( function() {
|
|
807 |
|
808 |
$import_blog_posts = (!empty($_POST['import_blog_posts'])?true:false);
|
809 |
$import_item_limit = (!empty($_POST['import_item_limit'])?intval($_POST['import_item_limit']):0);
|
810 |
-
$
|
811 |
-
$
|
812 |
-
$
|
|
|
|
|
|
|
|
|
|
|
813 |
$import_to = 'default';
|
814 |
if( !empty($_POST['import_to']) && $_POST['import_to'] != 'default' )
|
815 |
$import_to = $_POST['import_to'];
|
|
|
|
|
816 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
817 |
|
818 |
// First import program info...
|
819 |
if( preg_match('/^(.*)<item>/is', $this->m_content, $matches) )
|
@@ -833,10 +1092,20 @@ jQuery(document).ready( function() {
|
|
833 |
$import_itunes_image = (!empty($_POST['import_itunes_image_channel'])?true:false);
|
834 |
if( $overwrite_program_info || $import_itunes_image )
|
835 |
$this->import_program_info($matches[1], $overwrite_program_info, $import_itunes_image, false, $feed_slug);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
836 |
}
|
837 |
}
|
838 |
|
839 |
-
$this->import_episodes($MatchFilter, $import_blog_posts, $import_item_limit, $category, $feed_slug);
|
840 |
|
841 |
$migrated_to_blubrry = false;
|
842 |
if( !empty($_POST['migrate_to_blubrry']) && !empty($GLOBALS['pp_migrate_media_urls']) ) {
|
@@ -912,7 +1181,6 @@ jQuery(document).ready( function() {
|
|
912 |
else if( !empty($_GET['step']) )
|
913 |
$this->m_step = intval($_GET['step']);
|
914 |
|
915 |
-
|
916 |
// Drop back down a step if not setup for hosting...
|
917 |
if( !empty($_POST['migrate_to_blubrry']) ) {
|
918 |
$Settings = get_option('powerpress_general');
|
@@ -1017,7 +1285,7 @@ jQuery(document).ready( function() {
|
|
1017 |
{
|
1018 |
global $wpdb;
|
1019 |
|
1020 |
-
$meta_key = '
|
1021 |
if( !empty($feed_slug) && $feed_slug != 'podcast' )
|
1022 |
$meta_key = '_'. $feed_slug .':enclosure';
|
1023 |
|
@@ -1081,7 +1349,7 @@ jQuery(document).ready( function() {
|
|
1081 |
return 0;
|
1082 |
}
|
1083 |
|
1084 |
-
function _import_post_to_db($post)
|
1085 |
{
|
1086 |
extract($post);
|
1087 |
$post_id = wp_insert_post($post);
|
@@ -1091,7 +1359,7 @@ jQuery(document).ready( function() {
|
|
1091 |
_e('Couldn’t get post ID', 'powerpress');
|
1092 |
return false;
|
1093 |
}
|
1094 |
-
|
1095 |
if (0 != count($categories))
|
1096 |
wp_create_categories($categories, $post_id);
|
1097 |
|
@@ -1124,7 +1392,12 @@ jQuery(document).ready( function() {
|
|
1124 |
|
1125 |
if( !empty($serialize) )
|
1126 |
$encstring .= "\n". serialize( $serialize );
|
1127 |
-
|
|
|
|
|
|
|
|
|
|
|
1128 |
if( $meta_id ) {
|
1129 |
if( empty($GLOBALS['pp_migrate_media_urls']) )
|
1130 |
$GLOBALS['pp_migrate_media_urls'] = array();
|
@@ -1184,7 +1457,6 @@ jQuery(document).ready( function() {
|
|
1184 |
$enclosure['block'] = 1;
|
1185 |
}
|
1186 |
|
1187 |
-
// <itunes:image href="http://example.com/podcasts/everything/AllAboutEverything.jpg" />
|
1188 |
if( preg_match('/<itunes:image[^h]*href="(.*?)".*(\/>|>.*<\/itunes:image>)/i', $post, $matches) )
|
1189 |
{
|
1190 |
$enclosure['itunes_image'] = html_entity_decode( trim( $matches[1] ) );
|
89 |
|
90 |
<p><?php echo __('The following tool will import your podcast episodes to this website.', 'powerpress'); ?></p>
|
91 |
|
92 |
+
<form enctype="multipart/form-data" action="" method="post" name="import-podcast-feed">
|
93 |
<?php wp_nonce_field('import-powerpress-rss') ?>
|
94 |
|
95 |
<div style="width: 70%; margin: auto; height: 8em;">
|
96 |
<input type="hidden" name="step" value="1" />
|
97 |
+
<input type="hidden" name="import" value="<?php echo( !empty($_REQUEST['import']) ? htmlspecialchars($_REQUEST['import']) : ''); ?>" />
|
98 |
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo wp_max_upload_size(); ?>" />
|
99 |
<div style="width: 48%;" class="alignleft">
|
100 |
<h3><label for="podcast_feed_url"><?php _e('Podcast Feed URL:', 'powerpress'); ?></label></h3>
|
164 |
</div>
|
165 |
</div>
|
166 |
</div>
|
167 |
+
<?php
|
168 |
+
|
169 |
+
if( !empty($General['channels']) )
|
170 |
+
{
|
171 |
+
// List rall of teh podcast channel feeds
|
172 |
+
$Feeds = array();
|
173 |
+
if( isset($General['custom_feeds']) )
|
174 |
+
$Feeds = $General['custom_feeds'];
|
175 |
+
if( isset($General['custom_feeds']['podcast']) )
|
176 |
+
unset($General['custom_feeds']['podcast']);
|
177 |
+
if( !empty($Feeds) )
|
178 |
+
{
|
179 |
+
?>
|
180 |
<div class="ppi-option">
|
181 |
+
<label><input type="radio" name="import_to" id="import_to_channel" value="channel" /> <?php echo __('Podcast Channel feed', 'powerpress'); ?></label><br />
|
182 |
+
<div class="import-to" id="import-to-channel" style="display: none;">
|
183 |
+
<div style="margin: 10px 0 10px 24px;">
|
184 |
+
<select id="feed_slug" name="feed_slug" class="large-input">
|
185 |
+
<option value=""><?php echo __('Select Channel feed', 'powerpress'); ?></option>
|
186 |
+
<?php
|
187 |
+
|
188 |
+
asort($Feeds, SORT_STRING); // Sort feeds
|
189 |
+
while( list($feed_slug, $feed_title) = each($Feeds) ) {
|
190 |
+
|
191 |
+
echo "\t<option value=\"$feed_slug\">$feed_title ($feed_slug)</option>\n";
|
192 |
+
}
|
193 |
+
?>
|
194 |
+
</select>
|
195 |
+
</div>
|
196 |
+
<div style="margin: 10px 0 10px 24px;">
|
197 |
+
<label><input type="checkbox" name="import_overwrite_program_info_channel" value="1"> <?php echo __('Import program information', 'powerpress'); ?></label>
|
198 |
+
</div>
|
199 |
+
<div style="margin: 10px 0 10px 24px;">
|
200 |
+
<label><input type="checkbox" name="import_itunes_image_channel" value="1"> <?php echo __('Import iTunes artwork', 'powerpress'); ?></label>
|
201 |
+
</div>
|
202 |
</div>
|
203 |
+
</div>
|
204 |
+
<?php
|
205 |
+
}
|
206 |
+
} // end podcast channel
|
207 |
+
|
208 |
+
if( !empty($General['posttype_podcasting']) )
|
209 |
+
{
|
210 |
+
?>
|
211 |
+
<div class="ppi-option">
|
212 |
+
<label><input type="radio" name="import_to" id="import_to_post_type" value="post_type" /> <?php echo __('Podcast Post Type feed', 'powerpress'); ?></label>
|
213 |
+
<div class="import-to" id="import-to-post_type" style="display: none;">
|
214 |
+
<div style="margin: 10px 0 10px 24px;">
|
215 |
+
<label for="post_type"><?php echo __('Post type', 'powerpress'); ?></label>
|
216 |
+
<input type="text" name="post_type" id="post_type" class="medium-text" value="" />
|
217 |
+
</div>
|
218 |
+
<div style="margin: 10px 0 10px 24px;">
|
219 |
+
<label for="post_type_feed_slug"><?php echo __('Feed slug', 'powerpress'); ?></label>
|
220 |
+
<input type="text" name="post_type_feed_slug" id="post_type_feed_slug" class="medium-text" value="" />
|
221 |
+
</div>
|
222 |
+
<div style="margin: 10px 0 10px 24px;">
|
223 |
+
<label><input type="checkbox" name="import_overwrite_program_info_post_type" value="1"> <?php echo __('Import program information', 'powerpress'); ?></label>
|
224 |
+
</div>
|
225 |
+
<div style="margin: 10px 0 10px 24px;">
|
226 |
+
<label><input type="checkbox" name="import_itunes_image_post_type" value="1"> <?php echo __('Import iTunes artwork', 'powerpress'); ?></label>
|
227 |
+
</div>
|
228 |
</div>
|
229 |
</div>
|
230 |
+
<?php
|
231 |
+
} // end post type
|
232 |
+
|
233 |
+
if( !empty($General['taxonomy_podcasting']) )
|
234 |
+
{
|
235 |
+
$PowerPressTaxonomies = get_option('powerpress_taxonomy_podcasting');
|
236 |
+
if( empty($PowerPressTaxonomies) )
|
237 |
+
$PowerPressTaxonomies = array();
|
238 |
+
|
239 |
+
?>
|
240 |
+
<div class="ppi-option">
|
241 |
+
<label><input type="radio" name="import_to" id="import_to_taxonomy" value="taxonomy" /> <?php echo __('Podcast Taxonomy feed', 'powerpress'); ?></label>
|
242 |
+
<div class="import-to" id="import-to-taxonomy" style="display: none;">
|
243 |
+
<div style="margin: 10px 0 10px 24px;">
|
244 |
+
<?php
|
245 |
+
|
246 |
+
if( !empty($PowerPressTaxonomies) ) { // If taxonomy podcasting feeds exist..
|
247 |
+
|
248 |
+
global $wpdb;
|
249 |
+
$tt_ids = '';
|
250 |
+
|
251 |
+
$SelectOptions = array();
|
252 |
+
while( list($tt_id, $null) = each($PowerPressTaxonomies) ) {
|
253 |
+
if( !empty($tt_ids) )
|
254 |
+
$tt_ids .= ',';
|
255 |
+
$tt_ids .= $tt_id;
|
256 |
+
|
257 |
+
$term = get_term_by('term_taxonomy_id', $tt_id);
|
258 |
+
if( is_wp_error($term) )
|
259 |
+
continue;
|
260 |
+
$SelectOptions[ $tt_id ] = sprintf('%s (%s)', $term->name, $term->slug);
|
261 |
+
}
|
262 |
|
263 |
+
?>
|
264 |
+
<select id="podcast_ttid" name="podcast_ttid" style="min-width: 240px;" class="postform">
|
265 |
+
<option value=""><?php echo __('Select Taxonomy Podcast', ''); ?></option>
|
266 |
+
<?php
|
267 |
+
|
268 |
+
while( list($tt_id, $label) = each($SelectOptions) )
|
269 |
+
{
|
270 |
+
echo "\t<option value=\"$tt_id\">". htmlspecialchars($label). "</option>\n";
|
271 |
+
}
|
272 |
+
|
273 |
+
?>
|
274 |
+
</select>
|
275 |
+
</div>
|
276 |
+
<div style="margin: 10px 0 10px 24px;">
|
277 |
+
<label><input type="checkbox" name="import_overwrite_program_info_taxonomy" value="1"> <?php echo __('Import program information', 'powerpress'); ?></label>
|
278 |
+
</div>
|
279 |
+
<div style="margin: 10px 0 10px 24px;">
|
280 |
+
<label><input type="checkbox" name="import_itunes_image_taxonomy" value="1"> <?php echo __('Import iTunes artwork', 'powerpress'); ?></label>
|
281 |
+
</div>
|
282 |
+
<?php } else { // else no taxonomy feeds have been created yet ?>
|
283 |
+
<div style="margin: 10px 0 10px 24px;">
|
284 |
+
<label><?php echo __('Please create a taxonomy podcast to continue.', 'powerpress'); ?></label>
|
285 |
+
</div>
|
286 |
+
<?php } ?>
|
287 |
+
</div>
|
288 |
+
<?php
|
289 |
+
} // End if taxonomy podcasting enabled
|
290 |
?>
|
291 |
</div>
|
292 |
<div class="ppi-option">
|
329 |
|
330 |
//-->
|
331 |
</script>
|
|
|
|
|
|
|
|
|
|
|
332 |
<h3><a href="#" class="pp-expand-section"><?php echo __('Advanced Options', 'powerpress'); ?></a></h3>
|
|
|
333 |
<div style="margin-left: 24px; display: none;">
|
334 |
<div class="ppi-option">
|
335 |
<label><input type="checkbox" name="NULL" value="1" checked disabled> <?php echo __('Match episode by GUID (required)', 'powerpress'); ?></label>
|
346 |
<div class="ppi-option">
|
347 |
<label><input type="checkbox" name="import_blog_posts" value="1" > <?php echo __('Include blog posts', 'powerpress'); ?></label>
|
348 |
</div>
|
349 |
+
<div class="ppi-option">
|
350 |
+
<input type="hidden" name="remove_query_string" value="0" />
|
351 |
+
<label><input type="checkbox" name="remove_query_string" value="1" <?php if( !empty($_REQUEST['import']) && $_REQUEST['import'] == 'powerpress-libsyn-rss-podcast' ) {
|
352 |
+
echo 'checked disabled'; } ?> > <?php echo __('Remove query strings from media URLs', 'powerpress'); ?></label>
|
353 |
+
</div>
|
354 |
+
<div class="ppi-option">
|
355 |
+
<label for="import_post_status"><?php echo __('Post Status', 'powerpress'); ?></label>
|
356 |
+
<select id="import_post_status" name="import_post_status" class="medium-text">
|
357 |
+
<?php
|
358 |
+
$post_statuses = get_post_statuses();
|
359 |
+
while( list($post_status_slug, $post_status_label) = each($post_statuses) ) {
|
360 |
+
|
361 |
+
echo "\t<option value=\"$post_status_slug\"". ($post_status_slug=='publish'?' selected':'') .">". htmlspecialchars("$post_status_label ($post_status_slug)") . "</option>\n";
|
362 |
+
}
|
363 |
+
?>
|
364 |
+
</select>
|
365 |
+
</div>
|
366 |
<div class="ppi-option">
|
367 |
<label for="import_item_limit"><?php echo __('Item limit', 'powerpress'); ?></label>
|
368 |
<input type="text" name="import_item_limit" id="import_item_limit" class="small-text" value="" /> (<?php echo __('leave blank for no limit', 'powerpress'); ?>)
|
369 |
</div>
|
|
|
|
|
370 |
</div>
|
371 |
<?php submit_button( __('Import Podcast', 'powerpress' ), 'button-blubrry'); ?>
|
372 |
</div>
|
377 |
|
378 |
var import_type = jQuery("input[name='import_to']:checked").val()
|
379 |
jQuery('#import-to-'+import_type).show();
|
|
|
380 |
jQuery("input[name='import_to']").change( function(e) {
|
381 |
jQuery('.import-to').hide(400);
|
382 |
jQuery('#import-to-'+jQuery(this).val() ).show(400);
|
396 |
return '<' . strtolower( $matches[1] );
|
397 |
}
|
398 |
|
399 |
+
function import_program_info($channel, $overwrite=false, $download_itunes_image=false, $category_id = '', $feed_slug ='', $post_type = '', $ttid = '') {
|
400 |
$Feed = get_option('powerpress_feed_podcast' );
|
401 |
if( empty($Feed) )
|
402 |
$Feed = get_option('powerpress_feed');
|
403 |
|
404 |
+
if( !empty($category_id) ) {
|
405 |
+
$Feed = get_option('powerpress_cat_feed_'.$category_id);
|
406 |
+
} else if( !empty($post_type) ) {
|
407 |
+
// TODO
|
408 |
+
} else if( !empty($feed_slug) ) {
|
409 |
+
$Feed = get_option('powerpress_feed_'.$feed_slug);
|
410 |
+
} else if( !empty($ttid) ) {
|
411 |
+
$Feed = get_option('powerpress_taxonomy_'.$ttid);
|
412 |
+
}
|
413 |
+
|
414 |
+
if( empty($Feed) ) // Fix the situation where the empty value is not an array so we do not have notice messages
|
415 |
+
$Feed = array();
|
416 |
+
|
417 |
$NewSettings = array();
|
418 |
|
419 |
$matches = array();
|
619 |
|
620 |
if( !empty($NewSettings) )
|
621 |
{
|
622 |
+
if( empty($category_id) && empty($feed_slug) && empty($post_type) && empty($ttid) ) {
|
623 |
// Save here..
|
624 |
if( get_option('powerpress_feed_podcast') ) { // If the settings were moved to the podcast channels feature...
|
625 |
powerpress_save_settings($NewSettings, 'powerpress_feed_podcast' ); // save a copy here if that is the case.
|
645 |
|
646 |
powerpress_save_settings($NewSettings);
|
647 |
}
|
648 |
+
} else if ( !empty($post_type) ) {
|
649 |
+
// TODO
|
650 |
} else if ( !empty($feed_slug) ) {
|
651 |
+
powerpress_save_settings($NewSettings, 'powerpress_feed_'.$feed_slug );
|
652 |
+
} else if ( !empty($ttid) ) {
|
653 |
+
powerpress_save_settings($NewSettings, 'powerpress_taxonomy_'. $ttid );
|
654 |
}
|
655 |
|
656 |
|
694 |
}
|
695 |
}
|
696 |
|
697 |
+
function import_item($post, $MatchFilter, $import_blog_posts=false, $category_strict='', $feed_slug='', $post_type = '', $taxonomy = '', $term = '', $remove_query_string = false, $post_status = 'publish') {
|
698 |
global $wpdb;
|
699 |
$this->m_item_pos++;
|
700 |
|
730 |
}
|
731 |
|
732 |
// GUID has to be last, as we will use the media URL as the guid as a last resort
|
|
|
733 |
$guid = false;
|
734 |
if( preg_match('|<guid.*?>(.*?)</guid>|is', $post, $matches) )
|
735 |
$guid = $this->_sanatize_tag_value( $matches[1] );
|
737 |
$guid = $enclosure['url'];
|
738 |
|
739 |
$media_url = '';
|
740 |
+
if( !empty($enclosure['url']) ) {
|
741 |
+
if( !empty($remove_query_string) && !empty($enclosure['url']) && strstr($enclosure['url'], '?') ) {
|
742 |
+
$enclosure['url'] = strtok($enclosure['url'],'?'); //Tund3r: added for libsyn
|
743 |
+
}
|
744 |
$media_url = $enclosure['url'];
|
745 |
+
}
|
746 |
|
747 |
$post_date_gmt = false;
|
748 |
if( preg_match('|<pubdate>(.*?)</pubdate>|is', $post, $matches) ) {
|
811 |
$post_content = str_replace('<br>', '<br />', $post_content);
|
812 |
$post_content = str_replace('<hr>', '<hr />', $post_content);
|
813 |
|
814 |
+
$post_author = get_current_user_id();
|
|
|
815 |
|
816 |
// Save this episode to the database...
|
817 |
$post_to_save = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_status', 'guid', 'categories', 'enclosure');
|
818 |
+
|
819 |
+
if( !empty($post_type) ) // If the post should go into a custom post type...
|
820 |
+
{
|
821 |
+
$post_to_save['post_type'] = $post_type;
|
822 |
+
}
|
823 |
$this->m_item_inserted_count++;
|
824 |
+
|
825 |
+
$post_id = $this->_import_post_to_db($post_to_save, $feed_slug);
|
826 |
+
if( empty($post_id) ) {
|
827 |
+
echo '<span style="color: red; font-weight: bold;">';
|
828 |
+
echo sprintf(__('<i>%s</i> import failed.', 'powerpress'), htmlspecialchars($post_title) );
|
829 |
+
echo '</span>';
|
830 |
+
return false;
|
831 |
+
}
|
832 |
+
|
833 |
+
if ( is_wp_error( $post_id ) ) {
|
834 |
+
|
835 |
+
echo '<span style="color: red; font-weight: bold;">';
|
836 |
+
echo sprintf(__('<i>%s</i> import failed: ' , 'powerpress'), htmlspecialchars($post_title) );
|
837 |
+
echo '</span>';
|
838 |
+
return false;
|
839 |
+
}
|
840 |
+
|
841 |
echo '<span style="color: green; font-weight: bold;">';
|
842 |
echo sprintf(__('<i>%s</i> imported.', 'powerpress'), htmlspecialchars($post_title) );
|
843 |
echo '</span>';
|
844 |
+
|
845 |
+
// Display a link to the blog post
|
846 |
+
echo ' <a href="'. get_permalink($post_id) .'" target="_blank"><i class="wp-menu-image dashicons-before dashicons-admin-links"></i></a>';
|
847 |
|
848 |
// Category strict
|
849 |
if( !empty($category_strict) )
|
851 |
wp_set_post_categories( $post_id, array($category_strict), true );
|
852 |
}
|
853 |
|
854 |
+
// Set specific taxonomy term to this post
|
855 |
+
if( !empty($taxonomy) && !empty($term) )
|
856 |
+
{
|
857 |
+
wp_set_post_terms( $post_id, array($term), $taxonomy, true );
|
858 |
+
}
|
859 |
+
|
860 |
return ( $post_id > 0 );
|
861 |
}
|
862 |
|
875 |
return $value;
|
876 |
}
|
877 |
|
878 |
+
function import_episodes($MatchFilter, $import_blog_posts=false, $import_item_limit=0, $category='', $feed_slug='', $post_type = '', $ttid = '', $remove_query_string = false, $post_status='publish') {
|
879 |
global $wpdb;
|
880 |
@set_time_limit(60*15); // Give it 15 minutes
|
881 |
$this->m_item_pos = 0;
|
882 |
+
$taxonomy = '';
|
883 |
+
$term = '';
|
884 |
+
if( $ttid )
|
885 |
+
{
|
886 |
+
$TaxTermObj = get_term_by('term_taxonomy_id', $ttid);
|
887 |
+
if( $TaxTermObj )
|
888 |
+
{
|
889 |
+
$term = $TaxTermObj->name;
|
890 |
+
$taxonomy = $TaxTermObj->taxonomy;
|
891 |
+
// Now get the post type if the taxonomy, which may not be "post"...
|
892 |
+
$TaxonomyObj = get_taxonomy($taxonomy);
|
893 |
+
// Set the post type to import into
|
894 |
+
if( !empty($TaxonomyObj->object_type[0]) && $TaxonomyObj->object_type[0] != 'post' ) {
|
895 |
+
$post_type = $TaxonomyObj->object_type[0];
|
896 |
+
}
|
897 |
+
// We should use the term's ID rather than it's name
|
898 |
+
if( !empty($TaxonomyObj->hierarchical) ) {
|
899 |
+
$term = intval($TaxTermObj->term_id);
|
900 |
+
}
|
901 |
+
}
|
902 |
+
else
|
903 |
+
{
|
904 |
+
// Do not go any further, there is an error here!
|
905 |
+
echo '<p><strong>';
|
906 |
+
echo __('Error, unable to locate term taxonomy.', 'powerpress');
|
907 |
+
echo '</strong></p>';
|
908 |
+
return;
|
909 |
+
}
|
910 |
+
}
|
911 |
|
912 |
$item_count = substr_count( $this->m_content, '<item>');
|
913 |
$item_count += substr_count( $this->m_content, '<ITEM>');
|
914 |
|
915 |
+
echo '<h3>Diagnostic information</h3>';
|
916 |
+
echo '<ul>';
|
917 |
+
if( !empty($ttid) )
|
918 |
+
echo sprintf( '<li>Taxonomy Term ID: %s</li>', $ttid);
|
919 |
+
if( !empty($taxonomy) )
|
920 |
+
echo sprintf( '<li>Taxonomy: %s</li>', $taxonomy);
|
921 |
+
if( !empty($term) )
|
922 |
+
echo sprintf( '<li>Taxonomy Term: %s</li>', $term);
|
923 |
+
if( !empty($post_type) )
|
924 |
+
echo sprintf( '<li>Post Type: %s</li>', $post_type);
|
925 |
+
if( !empty($feed_slug) )
|
926 |
+
echo sprintf( '<li>Feed Slug: %s</li>', $feed_slug);
|
927 |
+
if( !empty($category) )
|
928 |
+
echo sprintf( '<li>Category: %s</li>', $category);
|
929 |
+
|
930 |
+
echo sprintf( '<li>Remove query string: %s</li>', ( !empty($remove_query_string)?'true':'false') );
|
931 |
+
|
932 |
+
echo '</ul>';
|
933 |
+
|
934 |
echo '<hr />';
|
935 |
echo '<p><strong>';
|
936 |
echo __('Importing Episodes...', 'powerpress');
|
959 |
echo '<li>';
|
960 |
$new_start = $item_start_pos + mb_strlen('<item>');
|
961 |
$item_content = mb_substr($this->m_content, $new_start, $item_end_pos - $new_start);
|
962 |
+
$this->import_item($item_content, $MatchFilter, $import_blog_posts, $category, $feed_slug, $post_type, $taxonomy, $term, $remove_query_string, $post_status);
|
963 |
echo '</li>';
|
964 |
|
965 |
// Extra stop just in case...
|
1005 |
|
1006 |
$import_blog_posts = (!empty($_POST['import_blog_posts'])?true:false);
|
1007 |
$import_item_limit = (!empty($_POST['import_item_limit'])?intval($_POST['import_item_limit']):0);
|
1008 |
+
$remove_query_string = (!empty($_POST['remove_query_string'])?true:false);
|
1009 |
+
$post_status = ( !empty($_POST['import_post_status']) ? $_POST['import_post_status']: 'publish' );
|
1010 |
+
$category = (!empty($_POST['category'])?intval($_POST['category']):'');
|
1011 |
+
$feed_slug = (!empty($_POST['feed_slug'])?($_POST['feed_slug']):'');
|
1012 |
+
$post_type = (!empty($_POST['post_type'])?($_POST['post_type']):'');
|
1013 |
+
$post_type_feed_slug = (!empty($_POST['post_type_feed_slug'])?($_POST['post_type_feed_slug']):'');
|
1014 |
+
$ttid = (!empty($_POST['podcast_ttid'])?intval($_POST['podcast_ttid']):'');
|
1015 |
+
//$import_ = (!empty($_POST['import_item_limit'])?intval($_POST['import_item_limit']):0);
|
1016 |
$import_to = 'default';
|
1017 |
if( !empty($_POST['import_to']) && $_POST['import_to'] != 'default' )
|
1018 |
$import_to = $_POST['import_to'];
|
1019 |
+
if( !empty($_REQUEST['import']) && $_REQUEST['import'] == 'powerpress-libsyn-rss-podcast' )
|
1020 |
+
$remove_query_string = true;
|
1021 |
|
1022 |
+
// Set the correct parameters going in...
|
1023 |
+
switch( $import_to )
|
1024 |
+
{
|
1025 |
+
case 'category': {
|
1026 |
+
$feed_slug = '';
|
1027 |
+
$post_type = '';
|
1028 |
+
$ttid = '';
|
1029 |
+
if( empty($category) ) {
|
1030 |
+
echo '<p>No category selected.</p>';
|
1031 |
+
return;
|
1032 |
+
}
|
1033 |
+
}; break;
|
1034 |
+
case 'channel': {
|
1035 |
+
$category = '';
|
1036 |
+
$post_type = '';
|
1037 |
+
$ttid = '';
|
1038 |
+
if( empty($feed_slug) ) {
|
1039 |
+
echo '<p>No podcast channel selected.</p>';
|
1040 |
+
return;
|
1041 |
+
}
|
1042 |
+
}; break;
|
1043 |
+
case 'post_type': {
|
1044 |
+
$category = '';
|
1045 |
+
$feed_slug = $post_type_feed_slug;
|
1046 |
+
$ttid = '';
|
1047 |
+
|
1048 |
+
if( empty($feed_slug) ) {
|
1049 |
+
echo '<p>No feed slug specified.</p>';
|
1050 |
+
return;
|
1051 |
+
}
|
1052 |
+
if( empty($post_type) ) {
|
1053 |
+
echo '<p>No post type specified.</p>';
|
1054 |
+
return;
|
1055 |
+
}
|
1056 |
+
}; break;
|
1057 |
+
case 'taxonomy': {
|
1058 |
+
$category = '';
|
1059 |
+
$feed_slug = '';
|
1060 |
+
$post_type = '';
|
1061 |
+
|
1062 |
+
if( empty($ttid) ) {
|
1063 |
+
echo '<p>No taxonomy podcast selected.</p>';
|
1064 |
+
return;
|
1065 |
+
}
|
1066 |
+
|
1067 |
+
}; break;
|
1068 |
+
case 'default':
|
1069 |
+
default: {
|
1070 |
+
$category = '';
|
1071 |
+
$feed_slug = '';
|
1072 |
+
$post_type = '';
|
1073 |
+
$ttid = '';
|
1074 |
+
}; break;
|
1075 |
+
}
|
1076 |
|
1077 |
// First import program info...
|
1078 |
if( preg_match('/^(.*)<item>/is', $this->m_content, $matches) )
|
1092 |
$import_itunes_image = (!empty($_POST['import_itunes_image_channel'])?true:false);
|
1093 |
if( $overwrite_program_info || $import_itunes_image )
|
1094 |
$this->import_program_info($matches[1], $overwrite_program_info, $import_itunes_image, false, $feed_slug);
|
1095 |
+
} else if( $import_to == 'post_type' ) {
|
1096 |
+
$overwrite_program_info = (!empty($_POST['import_overwrite_program_info_post_type'])?true:false);
|
1097 |
+
$import_itunes_image = (!empty($_POST['import_itunes_image_post_type'])?true:false);
|
1098 |
+
if( $overwrite_program_info || $import_itunes_image )
|
1099 |
+
$this->import_program_info($matches[1], $overwrite_program_info, $import_itunes_image, false, $feed_slug, $post_type);
|
1100 |
+
} else if( $import_to == 'taxonomy' ) {
|
1101 |
+
$overwrite_program_info = (!empty($_POST['import_overwrite_program_info_taxonomy'])?true:false);
|
1102 |
+
$import_itunes_image = (!empty($_POST['import_itunes_image_taxonomy'])?true:false);
|
1103 |
+
if( $overwrite_program_info || $import_itunes_image )
|
1104 |
+
$this->import_program_info($matches[1], $overwrite_program_info, $import_itunes_image, false, false, false, $ttid);
|
1105 |
}
|
1106 |
}
|
1107 |
|
1108 |
+
$this->import_episodes($MatchFilter, $import_blog_posts, $import_item_limit, $category, $feed_slug, $post_type, $ttid, $remove_query_string, $post_status);
|
1109 |
|
1110 |
$migrated_to_blubrry = false;
|
1111 |
if( !empty($_POST['migrate_to_blubrry']) && !empty($GLOBALS['pp_migrate_media_urls']) ) {
|
1181 |
else if( !empty($_GET['step']) )
|
1182 |
$this->m_step = intval($_GET['step']);
|
1183 |
|
|
|
1184 |
// Drop back down a step if not setup for hosting...
|
1185 |
if( !empty($_POST['migrate_to_blubrry']) ) {
|
1186 |
$Settings = get_option('powerpress_general');
|
1285 |
{
|
1286 |
global $wpdb;
|
1287 |
|
1288 |
+
$meta_key = 'enclosure';
|
1289 |
if( !empty($feed_slug) && $feed_slug != 'podcast' )
|
1290 |
$meta_key = '_'. $feed_slug .':enclosure';
|
1291 |
|
1349 |
return 0;
|
1350 |
}
|
1351 |
|
1352 |
+
function _import_post_to_db($post, $feed_slug = '')
|
1353 |
{
|
1354 |
extract($post);
|
1355 |
$post_id = wp_insert_post($post);
|
1359 |
_e('Couldn’t get post ID', 'powerpress');
|
1360 |
return false;
|
1361 |
}
|
1362 |
+
|
1363 |
if (0 != count($categories))
|
1364 |
wp_create_categories($categories, $post_id);
|
1365 |
|
1392 |
|
1393 |
if( !empty($serialize) )
|
1394 |
$encstring .= "\n". serialize( $serialize );
|
1395 |
+
|
1396 |
+
if( empty($feed_slug) || $feed_slug == 'podcast' ) // 'podcast' == $feed_slug || '' == $feed_slug
|
1397 |
+
$meta_id = add_post_meta($post_id, 'enclosure', $encstring, true);
|
1398 |
+
else
|
1399 |
+
$meta_id = add_post_meta($post_id, '_'. $feed_slug .':enclosure', $encstring, true);
|
1400 |
+
|
1401 |
if( $meta_id ) {
|
1402 |
if( empty($GLOBALS['pp_migrate_media_urls']) )
|
1403 |
$GLOBALS['pp_migrate_media_urls'] = array();
|
1457 |
$enclosure['block'] = 1;
|
1458 |
}
|
1459 |
|
|
|
1460 |
if( preg_match('/<itunes:image[^h]*href="(.*?)".*(\/>|>.*<\/itunes:image>)/i', $post, $matches) )
|
1461 |
{
|
1462 |
$enclosure['itunes_image'] = html_entity_decode( trim( $matches[1] ) );
|
powerpressadmin-taxonomyfeeds.php
CHANGED
@@ -29,9 +29,15 @@ function powerpress_admin_taxonomyfeeds()
|
|
29 |
}
|
30 |
.column-name {
|
31 |
width: 30%;
|
|
|
|
|
|
|
|
|
|
|
32 |
}
|
33 |
.column-feed-slug {
|
34 |
width: 15%;
|
|
|
35 |
}
|
36 |
.column-episode-count {
|
37 |
width: 15%;
|
29 |
}
|
30 |
.column-name {
|
31 |
width: 30%;
|
32 |
+
min-width: 60px;
|
33 |
+
}
|
34 |
+
.column-taxonomy {
|
35 |
+
width: 15%;
|
36 |
+
min-width: 60px;
|
37 |
}
|
38 |
.column-feed-slug {
|
39 |
width: 15%;
|
40 |
+
min-width: 60px;
|
41 |
}
|
42 |
.column-episode-count {
|
43 |
width: 15%;
|
powerpressadmin.php
CHANGED
@@ -1373,7 +1373,10 @@ function powerpress_admin_notices()
|
|
1373 |
$errors = get_option('powerpress_errors');
|
1374 |
if( $errors )
|
1375 |
{
|
1376 |
-
delete_option('powerpress_errors')
|
|
|
|
|
|
|
1377 |
|
1378 |
while( list($null, $error) = each($errors) )
|
1379 |
{
|
@@ -1618,7 +1621,7 @@ function powerpress_admin_menu()
|
|
1618 |
add_meta_box('powerpress-podcast', __('Podcast Episode', 'powerpress'), 'powerpress_meta_box', $page_type, 'normal');
|
1619 |
}
|
1620 |
|
1621 |
-
$post_types = array('post'); // Only apply to default posts
|
1622 |
if( empty($Powerpress['posttype_podcasting']) )
|
1623 |
$post_types = powerpress_admin_get_post_types('post'); // Get pages by capability type
|
1624 |
}
|
@@ -2429,7 +2432,7 @@ function powerpress_check_url(url)
|
|
2429 |
jQuery( '#'+DestDiv ).addClass("error");
|
2430 |
jQuery( '#'+DestDiv ).removeClass("updated");
|
2431 |
|
2432 |
-
var validChars = ':0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-_
|
2433 |
|
2434 |
for( var x = 0; x < url.length; x++ )
|
2435 |
{
|
1373 |
$errors = get_option('powerpress_errors');
|
1374 |
if( $errors )
|
1375 |
{
|
1376 |
+
if( !delete_option('powerpress_errors') ) {
|
1377 |
+
// If for some reason we cannot delete this record, maybe we can at least update it with a blank value...
|
1378 |
+
update_option('powerpress_errors', '');
|
1379 |
+
}
|
1380 |
|
1381 |
while( list($null, $error) = each($errors) )
|
1382 |
{
|
1621 |
add_meta_box('powerpress-podcast', __('Podcast Episode', 'powerpress'), 'powerpress_meta_box', $page_type, 'normal');
|
1622 |
}
|
1623 |
|
1624 |
+
$post_types = array('post'); // Only apply to default posts if post type podcasting is disabled
|
1625 |
if( empty($Powerpress['posttype_podcasting']) )
|
1626 |
$post_types = powerpress_admin_get_post_types('post'); // Get pages by capability type
|
1627 |
}
|
2432 |
jQuery( '#'+DestDiv ).addClass("error");
|
2433 |
jQuery( '#'+DestDiv ).removeClass("updated");
|
2434 |
|
2435 |
+
var validChars = ':0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-_.:';
|
2436 |
|
2437 |
for( var x = 0; x < url.length; x++ )
|
2438 |
{
|
readme.txt
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
===
|
2 |
Contributors: amandato, blubrry
|
3 |
-
Tags:
|
4 |
Requires at least: 3.6
|
5 |
-
Tested up to: 4.
|
6 |
-
Stable tag: 7.0.
|
7 |
Donate link: https://www.patreon.com/blubrry?ty=h
|
8 |
License: GPLv2 or later
|
9 |
|
@@ -11,10 +11,12 @@ No. 1 Podcasting plugin for WordPress, with simple & advanced modes, players, su
|
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
-
|
15 |
|
16 |
[youtube https://www.youtube.com/watch?v=twqKrVehY3o]
|
17 |
|
|
|
|
|
18 |
= Simple Mode =
|
19 |
If you are just getting started or feel overwelmed with all the settings and options, switch to Simple mode! PowerPress's Simple Mode will walk you through getting started in 3 easy steps.
|
20 |
|
@@ -36,9 +38,6 @@ When you're ready you can switch to Advanced mode to tap into all the options pr
|
|
36 |
- *Media Statistics: Get FREE Blubrry Media Statistics from your WordPress dashboard.
|
37 |
- Multi-languages and locales: See [PowerPress in your language](http://create.blubrry.com/resources/powerpress/powerpress-language/) for details.
|
38 |
|
39 |
-
= Includes Full Google Play Music Support! =
|
40 |
-
Blubrry PowerPress 6.1+ fully supports Google Play Music podcast directory. Upgrade to PowerPress 6.1 then submit your podcast to [Google Play Music](http://g.co/podcastportal).
|
41 |
-
|
42 |
= Includes Full iTunes Support! =
|
43 |
Blubrry PowerPress fully supports iTunes, which is required for podcasting. PowerPress comes with the following iTunes specific features:
|
44 |
|
@@ -48,12 +47,15 @@ Blubrry PowerPress fully supports iTunes, which is required for podcasting. Powe
|
|
48 |
* iTunes podcasting: Fully supported, including the latest [Apple iTunes podcasting specifications](http://www.powerpresspodcast.com/2012/05/10/itunes-podcasting-specifications-changed-may-2012-what-that-means-for-podcasting/).
|
49 |
* Feed Episode Maximizer: Increase the number of episodes viewed on iTunes while decreasing the byte size of your feeds.
|
50 |
|
|
|
|
|
|
|
51 |
= Integrated Media Players =
|
52 |
Blubrry PowerPress includes extensive Web player options to display your podcast audio and video in your Web pages.
|
53 |
|
54 |
-
* Audio players: Pick from MediaElement.js, native HTML5 audio
|
55 |
-
* Video players: Pick from MediaElement.js, native HTML5 video
|
56 |
-
*
|
57 |
* [Player shortcode](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/shortcode/): Place the player exactly where you want by adding the `[powerpress]` shortcode directly into your post content.
|
58 |
* [Playlist player shortcode](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-playlist-shortcode/): Include a playlist of your latest podcast episodes utilizing the `[powerpress_playlist]` shortcode in any page or post.
|
59 |
* Embeds: Add embeds from sites such as YouTube.
|
@@ -65,11 +67,11 @@ Blubrry PowerPress includes extensive Web player options to display your podcast
|
|
65 |
A Blubrry PowerPress exclusive, podcast subscribe tools help you convert Web visitors into podcast subscribers. Subscribe options include:
|
66 |
|
67 |
* [Subscribe page](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/subscribe-page/): Instantly create a subscribe page with simplified instructions on how to subscribe to your podcast using the PowerPress subscribe page shortcode.
|
68 |
-
* [Subscribe page shortcode](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-subscribe-shortcode/): Add the `[powerpress_subscribe]` shortcode to include a mobile-device optimized subscribe embed in any post or page that includes buttons to subscribe on iTunes, [Subscribe on Android](http://www.subscribeonandroid.com), [Subscribe by Email](http://www.subscribebyemail.com), Stitcher, via RSS, and an special textbox to easily copy and paste your podcast feed into any podcast application.
|
69 |
-
* Subscribe sidebar widget: Mobile device optimized sidebar buttons to subscribe on iTunes, [Subscribe on Android](http://www.subscribeonandroid.com), Stitcher, subscribe by RSS, and a "more subscribe options" button linked to your podcast's subscribe page.
|
70 |
* Subscribe links: Subscribe on iTunes, [Subscribe on Android](http://www.subscribeonandroid.com), subscribe by RSS and a link to your custom subscribe page below every player.
|
71 |
* Retina enabled: Subscribe button images optimized for high resolution displays including Apple Retina displays.
|
72 |
-
* Responsive: Subscribe tools are designed for any screen and optimized for touch screens by providing custom buttons that are
|
73 |
|
74 |
= Integrates with Blubrry's Services =
|
75 |
Make your life easier by adding our FREE or paid media hosting and statistics services to streamline your podcast productivity.
|
@@ -78,9 +80,10 @@ Make your life easier by adding our FREE or paid media hosting and statistics se
|
|
78 |
* Publish Blubrry hosted media directly from your blog.
|
79 |
* View Blubrry hosting usage quota from your blog.
|
80 |
* Configure how Blubrry writes media (ID3) tags within PowerPress settings.
|
81 |
-
*
|
|
|
82 |
|
83 |
-
The Blubrry basic statistics service is FREE. Our [Premium Statistics Service](https://secure.blubrry.com/podcast-statistics-premium/), which includes [
|
84 |
|
85 |
|
86 |
= Advanced Features for those who need more =
|
@@ -108,6 +111,9 @@ Please see detailed instructions for migrating from [PodPress](http://create.blu
|
|
108 |
|
109 |
Note: Advanced settings such as settings for podcast categories will need to be recreated in PowerPress.
|
110 |
|
|
|
|
|
|
|
111 |
= PowerPress in your Language =
|
112 |
|
113 |
[PowerPress is available in a number of languages](http://create.blubrry.com/resources/powerpress/powerpress-language/). Starting with PowerPress 7.0, translations will be managed through [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/powerpress/) making translations easier to setup and update.
|
@@ -211,21 +217,41 @@ To install Blubrry PowerPress manually, follow these steps:
|
|
211 |
== Screenshots ==
|
212 |
1. PowerPress's Simple Mode will walk you through setting up your podcast in 3 easy steps.
|
213 |
2. Just like blogging, podcasting utilizes blog posting features with the addition of a podcast episode box. Yes, podcasting is that simple!
|
214 |
-
3. PowerPress
|
215 |
-
4. PowerPress comes with
|
216 |
-
5. PowerPress
|
217 |
-
6. PowerPress
|
|
|
218 |
|
219 |
|
220 |
== Changelog ==
|
221 |
|
222 |
= Next Major Release Announcements =
|
223 |
-
* Facebook Instant Articles for podcasting coming in
|
224 |
-
* PowerPress 7.1 will be released in 1-2 weeks. Beta testers expect an email early next week.
|
225 |
* We are looking for beta testers! If you would like to beta test future versions of PowerPress, please [contact us](http://www.blubrry.com/contact.php) with your name and email.
|
226 |
|
227 |
-
=
|
228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
|
230 |
= 7.0.3 =
|
231 |
* Released 9/13/2016
|
@@ -517,7 +543,7 @@ Please visit the [PowerPress Version History](http://create.blubrry.com/resource
|
|
517 |
ATTENTION: The 1 pixel out audio player will be removed from PowerPress 7.1.
|
518 |
|
519 |
== Contributors ==
|
520 |
-
Angelo Mandato, CIO [
|
521 |
|
522 |
Pat McSweeny, PHP Developer - Developed initial version (v0.1.0) of plugin
|
523 |
|
1 |
+
=== PowerPress Podcasting plugin by Blubrry ===
|
2 |
Contributors: amandato, blubrry
|
3 |
+
Tags: podcasting, podcast, podcaster, powerpress, itunes, google play music, google play, enclosure, professional, apple, apple tv, ipad, iphone, soundcloud, squarespace, youtube, viddler, ustream, podcasting, audio, video, rss2, feed, player, media, rss, mp3, music, embed, feedburner, statistics, stats, flv, flash, id3, episodes, blubrry, mp4, m4v, wordpressmu, mu, wordpress mu, multisite, multi site, mediacaster, post, plugin, posts, simple, social, dashboard, TSG, Buzzsprout, MTR, WP-boxCast, CastMyBlog, tgs podcasting, simple podcasting, seriously simple podcasting, seriously-simple-podcasting, serious, seriously, ssp, podlove, podcast.de, clammr, clammr radio, audio player, stitcher, tunein, show, shows, series, docs, documentation, support, free, add-ons, extensions, addons, libsyn, libsyn-podcasting, podbean, podomatic, spreaker
|
4 |
Requires at least: 3.6
|
5 |
+
Tested up to: 4.7.3
|
6 |
+
Stable tag: 7.0.4
|
7 |
Donate link: https://www.patreon.com/blubrry?ty=h
|
8 |
License: GPLv2 or later
|
9 |
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
+
No. 1 Podcasting plugin for WordPress, with simple & advanced modes, players, subscribe tools, and more!
|
15 |
|
16 |
[youtube https://www.youtube.com/watch?v=twqKrVehY3o]
|
17 |
|
18 |
+
Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast page embeds and sidebar widgets, podcasting SEO features, and more! Fully supports iTunes, Google Play, Stitcher, TuneIn and Blubrry Podcasting directories, as well as all podcast applications and clients.
|
19 |
+
|
20 |
= Simple Mode =
|
21 |
If you are just getting started or feel overwelmed with all the settings and options, switch to Simple mode! PowerPress's Simple Mode will walk you through getting started in 3 easy steps.
|
22 |
|
38 |
- *Media Statistics: Get FREE Blubrry Media Statistics from your WordPress dashboard.
|
39 |
- Multi-languages and locales: See [PowerPress in your language](http://create.blubrry.com/resources/powerpress/powerpress-language/) for details.
|
40 |
|
|
|
|
|
|
|
41 |
= Includes Full iTunes Support! =
|
42 |
Blubrry PowerPress fully supports iTunes, which is required for podcasting. PowerPress comes with the following iTunes specific features:
|
43 |
|
47 |
* iTunes podcasting: Fully supported, including the latest [Apple iTunes podcasting specifications](http://www.powerpresspodcast.com/2012/05/10/itunes-podcasting-specifications-changed-may-2012-what-that-means-for-podcasting/).
|
48 |
* Feed Episode Maximizer: Increase the number of episodes viewed on iTunes while decreasing the byte size of your feeds.
|
49 |
|
50 |
+
= Includes Full Google Play Music Support! =
|
51 |
+
Blubrry PowerPress 6.1+ fully supports Google Play Music podcast directory.
|
52 |
+
|
53 |
= Integrated Media Players =
|
54 |
Blubrry PowerPress includes extensive Web player options to display your podcast audio and video in your Web pages.
|
55 |
|
56 |
+
* Audio players: Pick from Blubrry's Media Player, MediaElement.js, or the native HTML5 audio player.
|
57 |
+
* Video players: Pick from MediaElement.js, VideoJS, or the native HTML5 video player.
|
58 |
+
* Positioning: Position player above or below your content.
|
59 |
* [Player shortcode](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/shortcode/): Place the player exactly where you want by adding the `[powerpress]` shortcode directly into your post content.
|
60 |
* [Playlist player shortcode](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-playlist-shortcode/): Include a playlist of your latest podcast episodes utilizing the `[powerpress_playlist]` shortcode in any page or post.
|
61 |
* Embeds: Add embeds from sites such as YouTube.
|
67 |
A Blubrry PowerPress exclusive, podcast subscribe tools help you convert Web visitors into podcast subscribers. Subscribe options include:
|
68 |
|
69 |
* [Subscribe page](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/subscribe-page/): Instantly create a subscribe page with simplified instructions on how to subscribe to your podcast using the PowerPress subscribe page shortcode.
|
70 |
+
* [Subscribe page shortcode](http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-subscribe-shortcode/): Add the `[powerpress_subscribe]` shortcode to include a mobile-device optimized subscribe embed in any post or page that includes buttons to subscribe on iTunes, [Subscribe on Android](http://www.subscribeonandroid.com), [Subscribe by Email](http://www.subscribebyemail.com), Stitcher, tuneIn, via RSS, and an special textbox to easily copy and paste your podcast feed into any podcast application.
|
71 |
+
* Subscribe sidebar widget: Mobile device optimized sidebar buttons to subscribe on iTunes, [Subscribe on Android](http://www.subscribeonandroid.com), Stitcher, tuneIn, subscribe by RSS, and a "more subscribe options" button linked to your podcast's subscribe page.
|
72 |
* Subscribe links: Subscribe on iTunes, [Subscribe on Android](http://www.subscribeonandroid.com), subscribe by RSS and a link to your custom subscribe page below every player.
|
73 |
* Retina enabled: Subscribe button images optimized for high resolution displays including Apple Retina displays.
|
74 |
+
* Responsive: Subscribe tools are designed for any screen and optimized for touch screens by providing custom buttons that are indrustry standard 48 pixels in height optimized for touch screen use.
|
75 |
|
76 |
= Integrates with Blubrry's Services =
|
77 |
Make your life easier by adding our FREE or paid media hosting and statistics services to streamline your podcast productivity.
|
80 |
* Publish Blubrry hosted media directly from your blog.
|
81 |
* View Blubrry hosting usage quota from your blog.
|
82 |
* Configure how Blubrry writes media (ID3) tags within PowerPress settings.
|
83 |
+
* Post your podcast to Twitter, Facebook, and YouTube.
|
84 |
+
* Migrate all of your media at no additional cost to your Blubrry [Podcast Media Hosting](http://create.blubrry.com/resources/podcast-media-hosting/) account with just a couple clicks.
|
85 |
|
86 |
+
The Blubrry basic statistics service is FREE. Our [Premium Statistics Service](https://secure.blubrry.com/podcast-statistics-premium/), which includes [Blubrry Certified Statistics](http://create.blubrry.com/resources/podcast-media-download-statistics/rawvoice-certified/), U.S. downloads, trending and exporting, is available for $5 month. Blubrry [Media Hosting](https://secure.blubrry.com/podcast-publishing-premium-with-hosting/) packages start at $12.
|
87 |
|
88 |
|
89 |
= Advanced Features for those who need more =
|
111 |
|
112 |
Note: Advanced settings such as settings for podcast categories will need to be recreated in PowerPress.
|
113 |
|
114 |
+
= Migrating from another service such as LibSyn, PodBeam, SoundCloud, or Squarespace? =
|
115 |
+
Importing your podcast feed into PowerPress is super easy! Simply paste in your RSS feed URL into the PowerPress feed import tool and click import. RSS feed import works with any podcast service and includes additional options for importing from LibSyn, PodBeam, SoundCloud, and Squarespace. You can optionally migrate your media to your Blubrry Podcast Hosting account with only a couple simple clicks.
|
116 |
+
|
117 |
= PowerPress in your Language =
|
118 |
|
119 |
[PowerPress is available in a number of languages](http://create.blubrry.com/resources/powerpress/powerpress-language/). Starting with PowerPress 7.0, translations will be managed through [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/powerpress/) making translations easier to setup and update.
|
217 |
== Screenshots ==
|
218 |
1. PowerPress's Simple Mode will walk you through setting up your podcast in 3 easy steps.
|
219 |
2. Just like blogging, podcasting utilizes blog posting features with the addition of a podcast episode box. Yes, podcasting is that simple!
|
220 |
+
3. PowerPress integrates seamlessly with Blubrry Podcast Hosting's exclusive player.
|
221 |
+
4. PowerPress comes with a built-in subscribe sidebar widget to help your audience subscribe to your podcast.
|
222 |
+
5. PowerPress comes with an editable subscribe page builder with a subscribe embed tool to help your web visitors subscribe.
|
223 |
+
6. PowerPress's Advanced Mode settings let you dig in as deep as you want to with every possible setting for podcasting at your fingertips.
|
224 |
+
7. PowerPress incorporates the built-in WordPress media players into your blog posts and pages.
|
225 |
|
226 |
|
227 |
== Changelog ==
|
228 |
|
229 |
= Next Major Release Announcements =
|
230 |
+
* Facebook Instant Articles for podcasting coming in next release!
|
|
|
231 |
* We are looking for beta testers! If you would like to beta test future versions of PowerPress, please [contact us](http://www.blubrry.com/contact.php) with your name and email.
|
232 |
|
233 |
+
= Fan of PowerPress and want to show your support? =
|
234 |
+
If you are a fan of PowerPress, we would greatly appreciate it if you could take a moment and [leave us a review on WordPress.org](https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post). Your support is greatly appreciated!
|
235 |
+
|
236 |
+
= 7.0.4 =
|
237 |
+
* Released on 2/18/2017
|
238 |
+
* NOTE: There is no urgency to update to this version unless you can benefit from the new import options, top level iTunes category options, or bug fixes listed.
|
239 |
+
* Playlist player bug fix: When ids="" are specified, episodes are now listed in the order entered rather than by date. (Thanks Zach Herbert for bringing to our attention!)
|
240 |
+
* Updated the `powerpress_subscribe` shortcode to include the latest iTunes button in svg format and added the iTunes small badge. Use attribute itunes_badge="true" to display iTunes badge.
|
241 |
+
* Changed import feed code to use the current author ID rather than hard coded to 1. (Thanks @tund3r for the bug fix!)
|
242 |
+
* Import feed for libsyn updated. (Thanks @tund3r for the code fix!)
|
243 |
+
* Import feed advanced option "Remove query strings from media URLs" added. (Thanks @tund3r!)
|
244 |
+
* Fixed rare PHP Notice unserialize() on line 3094 error that may happen if the podcast episode serialized data is not present. (Thanks @hmseb for pointing out the notice to us!)
|
245 |
+
* Added colon ":" to list of characters that can be in a valid media URL. (Thanks AfterBuzzTV.com! for the heads up!)
|
246 |
+
* Fixed notice message that can appear when using the media objects with the powerpress shortcode. (Thanks @srumery for reporting the problem!)
|
247 |
+
* Fixed issue with dashboard failing to load in some cases due to news feed being blocked by web server. (Thanks Jacob K. for helping us debug the problem!)
|
248 |
+
* iTunes categories with subcategories are no longer strictly enforced. If you want to select "Art" without selecting a sub category you now can. Selecting a category with a sub category is still optimal.
|
249 |
+
* Added ability to import a podcast feed to a post type podcast feed or to a podcast channel.
|
250 |
+
* Added ability to set the post status when importing a podcast feed. (Thanks @hgetrost for the feature suggestion!)
|
251 |
+
* Added compatibility with the [Custom Post Widget](https://wordpress.org/plugins/custom-post-widget/) plugin. (Thanks @aparentdesign for letting us know about the problem)
|
252 |
+
* Fixed bug where ogg audio was not using the correct audio player. (Thanks @joeress for letting us know about the bug)
|
253 |
+
* Fixed bug with import not matching episode media URLs correctly. (Thanks @hgetrost for bringing to our attention)
|
254 |
+
|
255 |
|
256 |
= 7.0.3 =
|
257 |
* Released 9/13/2016
|
543 |
ATTENTION: The 1 pixel out audio player will be removed from PowerPress 7.1.
|
544 |
|
545 |
== Contributors ==
|
546 |
+
Angelo Mandato, CIO [Blubrry](http://www.blubrry.com) - Plugin founder, architect and lead developer
|
547 |
|
548 |
Pat McSweeny, PHP Developer - Developed initial version (v0.1.0) of plugin
|
549 |
|