dear-anon/wp-content/plugins/powerpress/powerpressadmin.php

4726 lines
179 KiB
PHP

<?php
if( !function_exists('add_action') )
die("access denied.");
function powerpress_esc_html($escape)
{
if( is_array($escape) )
{
foreach( $escape as $index => $value ) {
$escape[ $index ] = powerpress_esc_html($value);
}
}
return esc_html($escape);
}
function powerpress_page_message_add_error($msg, $classes='inline', $escape=true)
{
global $g_powerpress_page_message;
if( $escape )
$g_powerpress_page_message .= '<div class="error powerpress-error '.$classes.'">'. esc_html($msg) . '</div>';
else
$g_powerpress_page_message .= '<div class="error powerpress-error '.$classes.'">'. ($msg) . '</div>';
}
function powerpress_page_message_add_notice($msg, $classes='inline', $escape=true)
{
global $g_powerpress_page_message;
// Always pre-pend, since jQuery will re-order with first as last.
if( $escape )
$g_powerpress_page_message = '<div class="updated fade powerpress-notice '.$classes.'">'. esc_html($msg) . '</div>' . $g_powerpress_page_message;
else
$g_powerpress_page_message = '<div class="updated fade powerpress-notice '.$classes.'">'. ($msg) . '</div>' . $g_powerpress_page_message;
}
function powerpress_page_message_print()
{
global $g_powerpress_page_message;
if( $g_powerpress_page_message )
echo $g_powerpress_page_message;
$g_powerpress_page_message = '';
}
function powerpress_admin_activate()
{
$Settings = get_option('powerpress_general');
if( empty($Settings) )
{
// If no settings exist, see if either PodPress or Podcasting plugins are enabled and import those settings...
if( defined('PODPRESS_VERSION') )
{
powerpress_admin_import_podpress_settings();
}
else if( isset($GLOBALS['podcasting_player_id']) || defined('PODCASTING_VERSION') )
{
powerpress_admin_import_podcasting_settings();
}
}
}
function powerpress_admin_init()
{
global $wp_rewrite;
add_thickbox(); // we use the thckbox for some settings
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core'); // Now including the library at Google
// Powerpress page
if( isset($_GET['page']) && strstr($_GET['page'], 'powerpress' ) !== false )
{
wp_enqueue_script('jquery-ui-tabs');
//wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js');
if( preg_match('/powerpressadmin_(mobile|audio|video)player/', $_GET['page']) )
{
wp_enqueue_style( 'wp-color-picker' );
}
if( preg_match('/powerpressadmin_migrate/', $_GET['page']) )
{
wp_enqueue_script('media-upload'); // For the readjustment of the thickbox only
}
}
if( function_exists('powerpress_admin_jquery_init') )
powerpress_admin_jquery_init();
if( !current_user_can(POWERPRESS_CAPABILITY_MANAGE_OPTIONS) )
{
powerpress_page_message_add_error( __('You do not have sufficient permission to manage options.', 'powerpress') );
return;
}
// Check for other podcasting plugin
if( defined('PODPRESS_VERSION') || isset($GLOBALS['podcasting_player_id']) || isset($GLOBALS['podcast_channel_active']) || defined('PODCASTING_VERSION') )
powerpress_page_message_add_error( __('Another podcasting plugin has been detected, PowerPress is currently disabled.', 'powerpress') );
global $wp_version;
$VersionDiff = version_compare($wp_version, 3.6);
if( $VersionDiff < 0 )
powerpress_page_message_add_error( __('Blubrry PowerPress requires Wordpress version 3.6 or greater.', 'powerpress') );
// Check for incompatible plugins:
if( isset($GLOBALS['objWPOSFLV']) && is_object($GLOBALS['objWPOSFLV']) )
powerpress_page_message_add_error( __('The WP OS FLV plugin is not compatible with Blubrry PowerPress.', 'powerpress') );
// Security step, we must be in a powerpress/* page...
if( isset($_GET['page']) && ( strstr($_GET['page'], 'powerpress/' ) !== false || strstr($_GET['page'], 'powerpressadmin_' ) !== false ) )
{
// Save settings here
if( isset($_POST[ 'Feed' ]) || isset($_POST[ 'General' ]) )
{
check_admin_referer('powerpress-edit');
$upload_path = false;
$upload_url = false;
$UploadArray = wp_upload_dir();
if( false === $UploadArray['error'] )
{
$upload_path = $UploadArray['basedir'].'/powerpress/';
$upload_url = $UploadArray['baseurl'].'/powerpress/';
}
// Save the posted value in the database
$Feed = (isset($_POST['Feed'])?$_POST['Feed']:false);
$General = (isset($_POST['General'])?$_POST['General']:false);
$FeedSlug = (isset($_POST['feed_slug'])?esc_attr($_POST['feed_slug']):false);
$Category = (isset($_POST['cat'])?intval($_POST['cat']):false);
$term_taxonomy_id = (isset($_POST['ttid'])?intval($_POST['ttid']):false);
$podcast_post_type = (isset($_POST['podcast_post_type'])?esc_attr($_POST['podcast_post_type']):false);
// New iTunes image
if( !empty($_POST['itunes_image_checkbox']) )
{
$filename = str_replace(" ", "_", basename($_FILES['itunes_image_file']['name']) );
$temp = $_FILES['itunes_image_file']['tmp_name'];
if( file_exists($upload_path . $filename ) )
{
$filenameParts = pathinfo($filename);
if( !empty($filenameParts['extension']) ) {
do {
$filename_no_ext = substr($filenameParts['basename'], 0, (strlen($filenameParts['extension'])+1) * -1 );
$filename = sprintf('%s-%03d.%s', $filename_no_ext, rand(0, 999), $filenameParts['extension'] );
} while( file_exists($upload_path . $filename ) );
}
}
// Check the image...
if( file_exists($temp) )
{
$ImageData = @getimagesize($temp);
$rgb = true; // We assume it is RGB
if( defined('POWERPRESS_IMAGICK') && POWERPRESS_IMAGICK )
{
if( $ImageData[2] == IMAGETYPE_PNG && extension_loaded('imagick') )
{
$image = new Imagick( $temp );
if( $image->getImageColorspace() != imagick::COLORSPACE_RGB )
{
$rgb = false;
}
}
}
if( empty($ImageData['channels']) )
$ImageData['channels'] = 3; // Assume it's ok if we cannot detect it.
if( $ImageData )
{
if( $rgb && ( $ImageData[2] == IMAGETYPE_JPEG || $ImageData[2] == IMAGETYPE_PNG ) && $ImageData[0] == $ImageData[1] && $ImageData[0] >= 1400 && $ImageData[0] <= 3000 && $ImageData['channels'] == 3 ) // Just check that it is an image, the correct image type and that the image is square
{
if( !move_uploaded_file($temp, $upload_path . $filename) )
{
powerpress_page_message_add_error( __('Error saving image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('An error occurred saving the iTunes image on the server.', 'powerpress'). ' '. sprintf(__('Local folder: %s; File name: %s', 'powerpress'), $upload_path, $filename) );
}
else
{
$Feed['itunes_image'] = $upload_url . $filename;
if( !empty($_POST['itunes_image_checkbox_as_rss']) )
{
$Feed['rss2_image'] = $upload_url . $filename;
}
//if( $ImageData[0] < 1400 || $ImageData[1] < 1400 )
//{
// powerpress_page_message_add_error( __('iTunes image warning', 'powerpress') .': '. htmlspecialchars($_FILES['itunes_image_file']['name']) . __(' is', 'powerpress') .' '. $ImageData[0] .' x '.$ImageData[0] .' - '. __('Image must be square 1400 x 1400 pixels or larger.', 'powerpress') );
//}
}
}
else if( $ImageData['channels'] != 3 || $rgb == false )
{
powerpress_page_message_add_error( __('Invalid image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('Image must be in RGB color space (CMYK is not supported).', 'powerpress') );
}
else if( $ImageData[0] != $ImageData[1] )
{
powerpress_page_message_add_error( __('Invalid image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('Image must be square, 1400 x 1400 is the required minimum size.', 'powerpress') );
}
else if( $ImageData[0] != $ImageData[1] || $ImageData[0] < 1400 )
{
powerpress_page_message_add_error( __('Invalid image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('Image is too small, 1400 x 1400 is the required minimum size.', 'powerpress') );
}
else if( $ImageData[0] != $ImageData[1] || $ImageData[0] > 3000 )
{
powerpress_page_message_add_error( __('Invalid image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('Image is too large, 3000 x 3000 is the maximum size allowed.', 'powerpress') );
}
else
{
powerpress_page_message_add_error( __('Invalid image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) );
}
}
else
{
powerpress_page_message_add_error( __('Invalid image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) );
}
}
}
// New RSS2 image
if( !empty($_POST['rss2_image_checkbox']) )
{
$filename = str_replace(" ", "_", basename($_FILES['rss2_image_file']['name']) );
$temp = $_FILES['rss2_image_file']['tmp_name'];
if( file_exists($upload_path . $filename ) )
{
$filenameParts = pathinfo($filename);
if( !empty($filenameParts['basename']) && !empty($filenameParts['extension']) )
{
do {
$filename_no_ext = substr($filenameParts['basename'], 0, (strlen($filenameParts['extension'])+1) * -1 );
$filename = sprintf('%s-%03d.%s', $filename_no_ext, rand(0, 999), $filenameParts['extension'] );
} while( file_exists($upload_path . $filename ) );
}
}
if( @getimagesize($temp) ) // Just check that it is an image, we may add more to this later
{
if( !move_uploaded_file($temp, $upload_path . $filename) )
{
powerpress_page_message_add_error( __('Error saving RSS image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('An error occurred saving the RSS image on the server.', 'powerpress'). ' '. sprintf(__('Local folder: %s; File name: %s', 'powerpress'), $upload_path, $filename) );
}
else
{
$Feed['rss2_image'] = $upload_url . $filename;
}
}
else
{
powerpress_page_message_add_error( __('Invalid RSS image', 'powerpress') .': '. htmlspecialchars($_FILES['rss2_image_file']['name']) );
}
}
// New Google Play image
if( !empty($_POST['googleplay_image_checkbox']) )
{
$filename = str_replace(" ", "_", basename($_FILES['googleplay_image_file']['name']) );
$temp = $_FILES['googleplay_image_file']['tmp_name'];
if( file_exists($upload_path . $filename ) )
{
$filenameParts = pathinfo($filename);
if( !empty($filenameParts['extension']) ) {
do {
$filename_no_ext = substr($filenameParts['basename'], 0, (strlen($filenameParts['extension'])+1) * -1 );
$filename = sprintf('%s-%03d.%s', $filename_no_ext, rand(0, 999), $filenameParts['extension'] );
} while( file_exists($upload_path . $filename ) );
}
}
// Check the image...
if( file_exists($temp) )
{
$ImageData = @getimagesize($temp);
$rgb = true; // We assume it is RGB
if( defined('POWERPRESS_IMAGICK') && POWERPRESS_IMAGICK )
{
if( $ImageData[2] == IMAGETYPE_PNG && extension_loaded('imagick') )
{
$image = new Imagick( $temp );
if( $image->getImageColorspace() != imagick::COLORSPACE_RGB )
{
$rgb = false;
}
}
}
if( empty($ImageData['channels']) )
$ImageData['channels'] = 3; // Assume it's ok if we cannot detect it.
if( $ImageData )
{
if( $rgb && ( $ImageData[2] == IMAGETYPE_JPEG || $ImageData[2] == IMAGETYPE_PNG ) && $ImageData[0] == $ImageData[1] && $ImageData[0] >= 1200 && $ImageData[0] <= 7000 && $ImageData['channels'] == 3 ) // Just check that it is an image, the correct image type and that the image is square
{
if( !move_uploaded_file($temp, $upload_path . $filename) )
{
powerpress_page_message_add_error( __('Error saving Google Play Music image', 'powerpress') .': ' . htmlspecialchars($_FILES['googleplay_image_file']['name']) .' - '. __('An error occurred saving the Google Play Music image on the server.', 'powerpress'). ' '. sprintf(__('Local folder: %s; File name: %s', 'powerpress'), $upload_path, $filename) );
}
else
{
$Feed['googleplay_image'] = $upload_url . $filename;
if( $ImageData[0] < 1200 || $ImageData[1] < 1200 )
{
powerpress_page_message_add_error( __('Google Play Music image warning', 'powerpress') .': '. htmlspecialchars($_FILES['googleplay_image_file']['name']) . __(' is', 'powerpress') .' '. $ImageData[0] .' x '.$ImageData[0] .' - '. __('Image must be square 1200 x 1200 pixels or larger to be eligible for featuring.', 'powerpress') );
}
}
}
else if( $ImageData['channels'] != 3 || $rgb == false )
{
powerpress_page_message_add_error( __('Invalid Google Play Music image', 'powerpress') .': ' . htmlspecialchars($_FILES['googleplay_image_file']['name']) .' - '. __('Image must be in RGB color space (CMYK is not supported).', 'powerpress') );
}
else if( $ImageData[0] != $ImageData[1] )
{
powerpress_page_message_add_error( __('Invalid Google Play Music image', 'powerpress') .': ' . htmlspecialchars($_FILES['googleplay_image_file']['name']) .' - '. __('Image must be square, 1200 x 1200 is the required minimum size to be eligible for featuring.', 'powerpress') );
}
else if( $ImageData[0] != $ImageData[1] || $ImageData[0] < 600 )
{
powerpress_page_message_add_error( __('Invalid Google Play Music image', 'powerpress') .': ' . htmlspecialchars($_FILES['googleplay_image_file']['name']) .' - '. __('Image is too small, 1200 x 1200 is the required minimum size to be eligible for featuring.', 'powerpress') );
}
else if( $ImageData[0] != $ImageData[1] || $ImageData[0] > 7000 )
{
powerpress_page_message_add_error( __('Invalid Google Play Music image', 'powerpress') .': ' . htmlspecialchars($_FILES['googleplay_image_file']['name']) .' - '. __('Image is too large, 7000 x 7000 is the maximum size allowed.', 'powerpress') );
}
else
{
powerpress_page_message_add_error( __('Invalid Google Play Music image', 'powerpress') .': ' . htmlspecialchars($_FILES['googleplay_image_file']['name']) );
}
}
else
{
powerpress_page_message_add_error( __('Invalid Google Play Music image', 'powerpress') .': ' . htmlspecialchars($_FILES['googleplay_image_file']['name']) );
}
}
}
// New mp3 coverart image
if( !empty($_POST['coverart_image_checkbox']) )
{
$filename = str_replace(" ", "_", basename($_FILES['coverart_image_file']['name']) );
$temp = $_FILES['coverart_image_file']['tmp_name'];
if( file_exists($upload_path . $filename ) )
{
$filenameParts = pathinfo($filename);
do {
$filename_no_ext = substr($filenameParts['basename'], 0, (strlen($filenameParts['extension'])+1) * -1 );
$filename = sprintf('%s-%03d.%s', $filename_no_ext, rand(0, 999), $filenameParts['extension'] );
} while( file_exists($upload_path . $filename ) );
}
if( @getimagesize($temp) ) // Just check that it is an image, we may add more to this later
{
if( !move_uploaded_file($temp, $upload_path . $filename) )
{
powerpress_page_message_add_error( __('Error saving Coverart image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('An error occurred saving the coverart image on the server.', 'powerpress'). ' '. sprintf(__('Local folder: %s; File name: %s', 'powerpress'), $upload_path, $filename) );
}
else
{
$_POST['TagValues']['tag_coverart'] = $upload_url . $filename;
$General['tag_coverart'] = $upload_url . $filename;
}
}
else
{
powerpress_page_message_add_error( __('Invalid Coverat image', 'powerpress') .': ' . htmlspecialchars($_FILES['coverart_image_file']['name']) );
}
}
// New poster image
if( !empty($_POST['poster_image_checkbox']) )
{
$filename = str_replace(" ", "_", basename($_FILES['poster_image_file']['name']) );
$temp = $_FILES['poster_image_file']['tmp_name'];
if( file_exists($upload_path . $filename ) )
{
$filenameParts = pathinfo($filename);
do {
$filename_no_ext = substr($filenameParts['basename'], 0, (strlen($filenameParts['extension'])+1) * -1 );
$filename = sprintf('%s-%03d.%s', $filename_no_ext, rand(0, 999), $filenameParts['extension'] );
} while( file_exists($upload_path . $filename ) );
}
if( @getimagesize($temp) ) // Just check that it is an image, we may add more to this later
{
if( !move_uploaded_file($temp, $upload_path . $filename) )
{
powerpress_page_message_add_error( __('Error saving Poster image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('An error occurred saving the poster image on the server.', 'powerpress'). ' '. sprintf(__('Local folder: %s; File name: %s', 'powerpress'), $upload_path, $filename) );
}
else
{
$General['poster_image'] = $upload_url . $filename;
}
}
else
{
powerpress_page_message_add_error( __('Invalid poster image', 'powerpress') .': ' . htmlspecialchars($_FILES['poster_image_file']['name']) );
}
}
// New audio play icon image
if( !empty($_POST['audio_custom_play_button_checkbox']) )
{
$filename = str_replace(" ", "_", basename($_FILES['audio_custom_play_button_file']['name']) );
$temp = $_FILES['audio_custom_play_button_file']['tmp_name'];
if( file_exists($upload_path . $filename ) )
{
$filenameParts = pathinfo($filename);
do {
$filename_no_ext = substr($filenameParts['basename'], 0, (strlen($filenameParts['extension'])+1) * -1 );
$filename = sprintf('%s-%03d.%s', $filename_no_ext, rand(0, 999), $filenameParts['extension'] );
} while( file_exists($upload_path . $filename ) );
}
if( @getimagesize($temp) ) // Just check that it is an image, we may add more to this later
{
if( !move_uploaded_file($temp, $upload_path . $filename) )
{
powerpress_page_message_add_error( __('Error saving Play image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('An error occurred saving the play image on the server.', 'powerpress'). ' '. sprintf(__('Local folder: %s; File name: %s', 'powerpress'), $upload_path, $filename) );
}
else
{
$General['audio_custom_play_button'] = $upload_url . $filename;
}
}
else
{
powerpress_page_message_add_error( __('Invalid play icon image', 'powerpress') .': ' . htmlspecialchars($_FILES['audio_custom_play_button_file']['name']) );
}
}
// New video play icon image
if( !empty($_POST['video_custom_play_button_checkbox']) )
{
$filename = str_replace(" ", "_", basename($_FILES['video_custom_play_button_file']['name']) );
$temp = $_FILES['video_custom_play_button_file']['tmp_name'];
if( file_exists($upload_path . $filename ) )
{
$filenameParts = pathinfo($filename);
do {
$filename_no_ext = substr($filenameParts['basename'], 0, (strlen($filenameParts['extension'])+1) * -1 );
$filename = sprintf('%s-%03d.%s', $filename_no_ext, rand(0, 999), $filenameParts['extension'] );
} while( file_exists($upload_path . $filename ) );
}
$imageInfo = @getimagesize($temp);
if( $imageInfo && $imageInfo[0] == $imageInfo[1] && $imageInfo[0] == 60 ) // Just check that it is an image, we may add more to this later
{
if( !move_uploaded_file($temp, $upload_path . $filename) )
{
powerpress_page_message_add_error( __('Error saving Video Play icon image', 'powerpress') .': ' . htmlspecialchars($_FILES['itunes_image_file']['name']) .' - '. __('An error occurred saving the Video Play icon image on the server.', 'powerpress'). ' '. sprintf(__('Local folder: %s; File name: %s', 'powerpress'), $upload_path, $filename) );
}
else
{
$General['video_custom_play_button'] = $upload_url . $filename;
}
}
else if( $imageInfo )
{
powerpress_page_message_add_error( __('Invalid play icon image size', 'powerpress') .': ' . htmlspecialchars($_FILES['video_custom_play_button_file']['name']) );
}
else
{
powerpress_page_message_add_error( __('Invalid play icon image', 'powerpress') .': ' . htmlspecialchars($_FILES['video_custom_play_button_file']['name']) );
}
}
if( isset($_POST['UpdateDisablePlayer']) )
{
$player_feed_slug = $_POST['UpdateDisablePlayer'];
$General['disable_player'] = array();
$GeneralPrev = get_option('powerpress_general');
if( isset($GeneralPrev['disable_player']) )
$General['disable_player'] = $GeneralPrev['disable_player'];
if( isset($_POST['DisablePlayerFor']) && !empty($_POST['DisablePlayerFor']) )
$General['disable_player'][ $player_feed_slug ] = 1;
else
unset($General['disable_player'][ $player_feed_slug ]);
}
// Check to see if we need to update the feed title
if( $FeedSlug && !$podcast_post_type )
{
$GeneralSettingsTemp = powerpress_get_settings('powerpress_general', false);
if( !isset($GeneralSettingsTemp['custom_feeds'][$FeedSlug]) || $GeneralSettingsTemp['custom_feeds'][$FeedSlug] != $Feed['title'] )
{
if( !$General )
$General = array();
if( !empty($GeneralSettingsTemp['custom_feeds']) )
$General['custom_feeds'] = $GeneralSettingsTemp['custom_feeds'];
else
$General['custom_feeds'] = array();
$General['custom_feeds'][$FeedSlug] = $Feed['title'];
}
}
// Update the settings in the database:
if( $General )
{
if( !empty($_POST['action']) && $_POST['action'] == 'powerpress-save-settings' )
{
if( !isset($General['display_player_excerpt']) ) // If we are modifying appearance settings but this option was not checked...
$General['display_player_excerpt'] = 0; // Set it to zero.
//if( !isset($General['display_player_disable_mobile']) )
// $General['display_player_disable_mobile'] = 0;
$General['disable_dashboard_stats'] = 0;
if( !empty($_POST['DisableStatsInDashboard'] ) )
$General['disable_dashboard_stats'] = 1;
if( !isset($General['disable_dashboard_news'] ) )
$General['disable_dashboard_news'] = 0;
if( !isset($General['allow_feed_comments'] ) )
$General['allow_feed_comments'] = 0;
if( !isset($General['feed_links']) )
$General['feed_links'] = 0;
if( !isset($General['skip_to_episode_settings']) )
$General['skip_to_episode_settings'] = 0;
// Advanced Features
if( !isset($General['player_options'] ) )
$General['player_options'] = 0;
if( !isset($General['cat_casting'] ) )
$General['cat_casting'] = 0;
if( !isset($General['channels'] ) )
$General['channels'] = 0;
if( !isset($General['taxonomy_podcasting'] ) )
$General['taxonomy_podcasting'] = 0;
if( !isset($General['posttype_podcasting'] ) )
$General['posttype_podcasting'] = 0;
if( !isset($General['playlist_player'] ) )
$General['playlist_player'] = 0;
if(!isset($General['network_mode']))
$General['network_mode'] = 0;
// Media Presentation Settings
$PlayerSettings = array();
if( !empty($_POST['PlayerSettings']) )
$PlayerSettings = $_POST['PlayerSettings'];
if( empty($PlayerSettings['display_pinw']) )
$PlayerSettings['display_pinw'] = 0;
if( empty($PlayerSettings['display_media_player']) )
$PlayerSettings['display_media_player'] = 0;
if( empty($PlayerSettings['display_pinw']) ) $PlayerSettings['display_pinw'] = 0;
if( empty($PlayerSettings['display_media_player']) ) $PlayerSettings['display_media_player'] = 0;
$General['player_function'] = abs( $PlayerSettings['display_pinw'] - $PlayerSettings['display_media_player'] );
$General['podcast_link'] = 0;
if( !empty($PlayerSettings['display_download']) )
{
$General['podcast_link'] = 1;
if( !empty($PlayerSettings['display_download_size']) )
{
$General['podcast_link'] = 2;
if( !empty($PlayerSettings['display_download_duration']) )
$General['podcast_link'] = 3;
}
}
if( !isset($General['podcast_embed'] ) )
$General['podcast_embed'] = 0;
if( !isset($General['podcast_embed_in_feed'] ) )
$General['podcast_embed_in_feed'] = 0;
if( !isset($General['m4a'] ) )
$General['m4a'] = '';
if( !isset($General['new_window_nofactor'] ) )
$General['new_window_nofactor'] = '';
if( !isset($General['subscribe_links'] ) )
$General['subscribe_links'] = false;
if( !isset($General['subscribe_feature_email'] ) )
$General['subscribe_feature_email'] = false;
}
else if( !empty($_POST['action']) && $_POST['action'] == 'powerpress-save-defaults' )
{
if( !isset($General['display_player_excerpt']) ) // If we are modifying appearance settings but this option was not checked...
$General['display_player_excerpt'] = 0; // Set it to zero.
$General['disable_dashboard_stats'] = 0;
if( !empty($_POST['DisableStatsInDashboard'] ) )
$General['disable_dashboard_stats'] = 1;
// Advanced Mode options
if( !isset($General['cat_casting'] ) )
$General['cat_casting'] = 0;
if( !isset($General['channels'] ) )
$General['channels'] = 0;
if( !isset($General['taxonomy_podcasting'] ) )
$General['taxonomy_podcasting'] = 0;
if( !isset($General['posttype_podcasting'] ) )
$General['posttype_podcasting'] = 0;
}
if( !empty($_POST['action']) && $_POST['action'] == 'powerpress-save-settings' )
{
//$PowerPressSearch = $_POST['PowerPressSearch'];
$PowerPressSearchToggle = $_POST['PowerPressSearchToggle'];
if( empty($PowerPressSearchToggle['seo_feed_title']) )
$General['seo_feed_title'] = 0;
}
if( !empty($_POST['action']) && $_POST['action'] == 'powerpress-save-tags' )
{
if( !isset($General['write_tags']) ) // If we are modifying appearance settings but this option was not checked...
$General['write_tags'] = 0; // Set it to zero.
$TagValues = $_POST['TagValues'];
$GeneralPosted = $_POST['General'];
if( !empty($_POST['PowerPressTrackNumber']) ) {
update_option('powerpress_track_number', $_POST['PowerPressTrackNumber']);
}
// Set all the tag values...
foreach( $GeneralPosted as $key => $value )
{
if( substr($key, 0, 4) == 'tag_' )
{
// Special case, we are uploading new coverart image
if( !empty($_POST['coverart_image_checkbox']) && $key == 'tag_coverart' )
continue;
// Specail case, the track is saved in a separate column in the database.
if( $key == 'tag_track' )
continue;
if( !empty($value) )
$General[$key] = $TagValues[$key];
else
$General[$key] = '';
}
}
if( !empty($General['tag_coverart']) ) // $TagValues['tag_coverart'] != '' )
{
$GeneralSettingsTemp = powerpress_get_settings('powerpress_general', false);
if( !empty($GeneralSettingsTemp['blubrry_hosting']) && $GeneralSettingsTemp['blubrry_hosting'] !== 'false' )
{
$json_data = false;
$api_url_array = powerpress_get_api_array();
foreach( $api_url_array as $index => $api_url )
{
$req_url = sprintf('%s/media/%s/coverart.json?url=%s', rtrim($api_url, '/'), $GeneralSettingsTemp['blubrry_program_keyword'], urlencode($TagValues['tag_coverart']) );
$req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:'');
$json_data = powerpress_remote_fopen($req_url, $GeneralSettingsTemp['blubrry_auth']);
if( !$template_content && $api_url == 'https://api.blubrry.com/' ) { // Lets force cURL and see if that helps...
$template_content = powerpress_remote_fopen($req_url, $GeneralSettingsTemp['blubrry_auth'], array(), 15, false, true);
}
if( $json_data != false )
break;
}
// Lets try to cache the image onto Blubrry's Server...
$results = powerpress_json_decode($json_data);
if( is_array($results) && !isset($results['error']) )
{
// Good!
powerpress_page_message_add_notice( __('Coverart image updated successfully.', 'powerpress') );
}
else if( isset($results['error']) )
{
$error = __('Blubrry Hosting Error (updating coverart)', 'powerpress') .': '. $results['error'];
powerpress_page_message_add_error($error);
}
else
{
$error = __('An error occurred updating the coverart with your Blubrry Services Account.', 'powerpress');
powerpress_page_message_add_error($error);
}
}
else
{
powerpress_page_message_add_error( __('Coverart Image was not uploaded to your Blubrry Services Account. It will NOT be added to your mp3s.', 'powerpress') );
}
}
}
if( !empty($_POST['action']) && $_POST['action'] == 'powerpress-save-videocommon' )
{
if( !isset($General['poster_play_image'] ) )
$General['poster_play_image'] = 0;
if( !isset($General['poster_image_audio'] ) )
$General['poster_image_audio'] = 0;
}
// Wordpress adds slashes to everything, but since we're storing everything serialized, lets remove them...
$General = powerpress_stripslashes($General);
powerpress_save_settings($General);
}
if( $Feed )
{
if( !isset($_POST['ProtectContent']) && isset($Feed['premium']) )
$Feed['premium'] = false;
if( !isset($Feed['enhance_itunes_summary']) )
$Feed['enhance_itunes_summary'] = false;
if( !isset($Feed['itunes_author_post']) )
$Feed['itunes_author_post'] = false;
if( !isset($Feed['itunes_block']) )
$Feed['itunes_block'] = false;
if( !isset($Feed['itunes_complete']) )
$Feed['itunes_complete'] = false;
if( !isset($Feed['maximize_feed']) )
$Feed['maximize_feed'] = false;
if( !isset($Feed['donate_link']) )
$Feed['donate_link'] = false;
if( !isset($Feed['episode_itunes_image']) )
$Feed['episode_itunes_image'] = false;
$Feed = powerpress_stripslashes($Feed);
if( $Category )
{
powerpress_save_settings($Feed, 'powerpress_cat_feed_'.$Category);
}
else if ( $term_taxonomy_id )
{
powerpress_save_settings($Feed, 'powerpress_taxonomy_'.$term_taxonomy_id);
}
else if( $podcast_post_type )
{
$PostTypeSettings = array();
$PostTypeSettings[ $FeedSlug ] = $Feed;
powerpress_save_settings($PostTypeSettings, 'powerpress_posttype_'.$podcast_post_type);
powerpress_rebuild_posttype_podcasting();
}
else // otherwise treat as a podcast channel
{
if( $FeedSlug == false && get_option('powerpress_feed_podcast') ) // If the settings were moved to the podcast channels feature...
powerpress_save_settings($Feed, 'powerpress_feed_podcast' ); // save a copy here if that is the case.
powerpress_save_settings($Feed, 'powerpress_feed'.($FeedSlug?'_'.$FeedSlug:'') );
}
}
if( isset($_POST['EpisodeBoxBGColor']) )
{
$GeneralSettingsTemp = get_option('powerpress_general');
$SaveEpisdoeBoxBGColor['episode_box_background_color'] = array();
if( isset($GeneralSettingsTemp['episode_box_background_color']) )
$SaveEpisdoeBoxBGColor['episode_box_background_color'] = $GeneralSettingsTemp['episode_box_background_color']; // copy previous settings
foreach( $_POST['EpisodeBoxBGColor'] as $feed_slug_temp => $background_color ) {
break;
}
$SaveEpisdoeBoxBGColor['episode_box_background_color'][ $feed_slug_temp ] = $background_color;
powerpress_save_settings($SaveEpisdoeBoxBGColor);
}
// Anytime settings are saved lets flush the rewrite rules
$wp_rewrite->flush_rules();
// Settings saved successfully
if( !empty($_POST['action']) )
{
switch( $_POST['action'] )
{
case 'powerpress-save-settings':
case 'powerpress-save-defaults': {
powerpress_page_message_add_notice( __('Blubrry PowerPress settings saved.', 'powerpress') );
}; break;
case 'powerpress-save-channel': {
powerpress_page_message_add_notice( __('Blubrry PowerPress Channel settings saved.', 'powerpress') );
}; break;
case 'powerpress-save-category': {
powerpress_page_message_add_notice( __('Blubrry PowerPress Category Podcasting settings saved.', 'powerpress') );
}; break;
case 'powerpress-save-ttid': {
powerpress_page_message_add_notice( __('Blubrry PowerPress Taxonomy Podcasting settings saved.', 'powerpress') );
}; break;
case 'powerpress-save-post_type': {
powerpress_page_message_add_notice( __('Blubrry PowerPress Post Type Podcasting settings saved.', 'powerpress') );
}; break;
case 'powerpress-save-tags': {
$General = get_option('powerpress_general');
if( empty($General['blubrry_hosting']) || $General['blubrry_hosting'] === 'false' )
powerpress_page_message_add_notice( __('ATTENTION: You must configure your Blubrry Services in the Blubrry PowerPress &gt; Basic Settings page in order to utilize this feature.', 'powerpress') );
else
powerpress_page_message_add_notice( __('Blubrry PowerPress MP3 Tag settings saved.', 'powerpress') );
}; break;
default: {
powerpress_page_message_add_notice( __('Blubrry PowerPress settings saved.', 'powerpress') );
}; break;
}
}
}
// Handle POST actions...
if( isset($_POST['action'] ) )
{
switch($_POST['action'])
{
case 'powerpress-addfeed': {
check_admin_referer('powerpress-add-feed');
$Settings = get_option('powerpress_general');
$key = sanitize_title($_POST['feed_slug']);
$value = $_POST['feed_name'];
$value = powerpress_stripslashes($value);
/*
if( isset($Settings['custom_feeds'][ $key ]) && empty($_POST['overwrite']) )
{
powerpress_page_message_add_error( sprintf(__('Feed slug "%s" already exists.'), $key) );
} else */
if( $key == '' )
{
powerpress_page_message_add_error( sprintf(__('Feed slug "%s" is not valid.', 'powerpress'), esc_html($_POST['feed_slug']) ) );
}
else if( in_array($key, $wp_rewrite->feeds) && !isset($Settings['custom_feeds'][ $key ]) ) // If it is a system feed or feed created by something else
{
powerpress_page_message_add_error( sprintf(__('Feed slug "%s" is not available.', 'powerpress'), esc_html($key) ) );
}
else
{
$Settings['custom_feeds'][ $key ] = $value;
powerpress_save_settings($Settings);
add_feed($key, 'powerpress_do_podcast_feed'); // Before we flush the rewrite rules we need to add the new custom feed...
$wp_rewrite->flush_rules();
powerpress_page_message_add_notice( sprintf(__('Podcast Feed "%s" added, please configure your new feed now.', 'powerpress'), esc_html($value) ) );
$_GET['action'] = 'powerpress-editfeed';
$_GET['feed_slug'] = $key;
}
}; break;
case 'powerpress-addtaxonomyfeed': {
if( !empty($_POST['cancel']) )
unset($_POST['taxonomy']);
if( empty($_POST['add_podcasting']) )
break; // We do not handle this situation
}
case 'powerpress-addcategoryfeed': {
check_admin_referer('powerpress-add-taxonomy-feed');
$taxonomy_type = ( isset($_POST['taxonomy'])? $_POST['taxonomy'] : $_GET['taxonomy'] );
$term_ID = intval( isset($_POST['term'])? $_POST['term'] : $_GET['term'] );
$term_object = get_term( $term_ID, $taxonomy_type, OBJECT, 'edit');
if( empty($term_ID) )
{
if( $taxonomy_type == 'category' )
powerpress_page_message_add_error( __('You must select a category to continue.', 'powerpress') );
else
powerpress_page_message_add_error( __('You must select a term to continue.', 'powerpress') );
}
else if( $term_object == false )
{
powerpress_page_message_add_error( __('Error obtaining term information.', 'powerpress') );
}
else if( $taxonomy_type == 'category' )
{
$Settings = get_option('powerpress_general');
if( empty($Settings['custom_cat_feeds']) )
$Settings['custom_cat_feeds'] = array();
if( !in_array($term_ID, $Settings['custom_cat_feeds']) )
{
$Settings['custom_cat_feeds'][] = $term_ID;
powerpress_save_settings($Settings);
}
powerpress_page_message_add_notice( __('Please configure your category podcast feed now.', 'powerpress') );
$_GET['action'] = 'powerpress-editcategoryfeed';
$_GET['cat'] = $term_ID;
}
else
{
//$term_info = term_exists($term_ID, $taxonomy_type);
$tt_id = $term_object->term_taxonomy_id;
if( !$tt_id )
{
}
else
{
$Settings = get_option('powerpress_taxonomy_podcasting');
if( !isset($Settings[ $tt_id ]) )
{
$Settings[ $tt_id ] = true;
powerpress_save_settings($Settings, 'powerpress_taxonomy_podcasting'); // add the feed to the taxonomy podcasting list
}
powerpress_page_message_add_notice( __('Please configure your taxonomy podcast now.', 'powerpress') );
$_GET['action'] = 'powerpress-edittaxonomyfeed';
$_GET['term'] = $term_ID;
$_GET['ttid'] = $tt_id;
}
}
}; break;
case 'powerpress-addposttypefeed': {
check_admin_referer('powerpress-add-posttype-feed');
//die('ok 2');
$Settings = get_option('powerpress_general');
$feed_slug = sanitize_title($_POST['feed_slug']);
$post_type = $_POST['podcast_post_type'];
$post_type = powerpress_stripslashes($post_type);
$feed_title = $_POST['feed_title'];
$feed_title = powerpress_stripslashes($feed_title);
/*
if( isset($Settings['custom_feeds'][ $key ]) && empty($_POST['overwrite']) )
{
powerpress_page_message_add_error( sprintf(__('Feed slug "%s" already exists.'), $key) );
} else */
if( empty($feed_slug) )
{
powerpress_page_message_add_error( sprintf(__('Feed slug "%s" is not valid.', 'powerpress'), esc_html($_POST['feed_slug']) ) );
}
else if( empty($post_type) )
{
powerpress_page_message_add_error( __('Post Type is invalid.', 'powerpress') );
}
// TODO:
//else if( in_array($feed_slug, $wp_rewrite->feeds) && !isset($Settings['custom_feeds'][ $key ]) ) // If it is a system feed or feed created by something else
//{
// powerpress_page_message_add_error( sprintf(__('Feed slug "%s" is not available.', 'powerpress'), $key) );
//}
else
{
$ExistingSettings = powerpress_get_settings('powerpress_posttype_'. $post_type);
if( !empty($ExistingSettings[ $feed_slug ]) )
{
powerpress_page_message_add_error( sprintf(__('Feed slug "%s" already exists.', 'powerpress'), $_POST['feed_slug']) );
}
else
{
$NewSettings = array();
$NewSettings[ $feed_slug ]['title'] = $feed_title;
powerpress_save_settings($NewSettings, 'powerpress_posttype_'. $post_type);
add_feed($feed_slug, 'powerpress_do_podcast_feed'); // Before we flush the rewrite rules we need to add the new custom feed...
$wp_rewrite->flush_rules();
powerpress_page_message_add_notice( sprintf(__('Podcast "%s" added, please configure your new podcast.', 'powerpress'), $feed_title) );
$_GET['action'] = 'powerpress-editposttypefeed';
$_GET['feed_slug'] = $feed_slug;
$_GET['podcast_post_type'] = $post_type;
}
}
}; break;
case 'powerpress-ping-sites': {
check_admin_referer('powerpress-ping-sites');
require_once( POWERPRESS_ABSPATH . '/powerpressadmin-ping-sites.php');
powerpressadmin_ping_sites_process();
$_GET['action'] = 'powerpress-ping-sites';
}; break;
case 'powerpress-find-replace': {
check_admin_referer('powerpress-find-replace');
require_once( POWERPRESS_ABSPATH . '/powerpressadmin-find-replace.php');
powerpressadmin_find_replace_process();
$_GET['action'] = 'powerpress-find-replace';
}; break;
case 'powerpress-importpodpress': {
check_admin_referer('powerpress-import-podpress');
require_once( POWERPRESS_ABSPATH . '/powerpressadmin-podpress.php');
powerpressadmin_podpress_do_import();
$_GET['action'] = 'powerpress-podpress-epiosdes';
}; break;
case 'powerpress-importmt': {
check_admin_referer('powerpress-import-mt');
require_once( POWERPRESS_ABSPATH . '/powerpressadmin-mt.php');
powerpressadmin_mt_do_import();
$_GET['action'] = 'powerpress-mt-epiosdes';
}; break;
case 'deletepodpressdata': {
check_admin_referer('powerpress-delete-podpress-data');
require_once( POWERPRESS_ABSPATH . '/powerpressadmin-podpress.php');
powerpressadmin_podpress_delete_data();
}; break;
case 'powerpress-category-settings': {
// Save here!
check_admin_referer('powerpress-category-settings');
if( isset($_POST['cat_casting_podcast_feeds']) && isset($_POST['cat_casting_strict']) )
{
$Save = array('cat_casting_podcast_feeds'=>$_POST['cat_casting_podcast_feeds'], 'cat_casting_strict'=>$_POST['cat_casting_strict']);
powerpress_save_settings($Save);
powerpress_page_message_add_notice( __('Settings saved successfully.', 'powerpress') );
}
}; break;
}
}
// Handle GET actions...
if( isset($_GET['action'] ) )
{
switch( $_GET['action'] )
{
case 'powerpress-enable-categorypodcasting': {
check_admin_referer('powerpress-enable-categorypodcasting');
$Settings = get_option('powerpress_general');
$Settings['cat_casting'] = 1;
powerpress_save_settings($Settings);
wp_redirect('edit-tags.php?taxonomy=category&message=3');
exit;
}; break;
case 'powerpress-addcategoryfeed': {
check_admin_referer('powerpress-add-taxonomy-feed');
$cat_ID = intval($_GET['cat']);
$Settings = get_option('powerpress_general');
$category = get_category($cat_ID);
if( $category == false )
{
powerpress_page_message_add_error( __('Error obtaining category information.', 'powerpress') );
}
else
{
if( empty($Settings['custom_cat_feeds']) || !is_array($Settings['custom_cat_feeds']) )
$Settings['custom_cat_feeds'] = array();
if( !in_array($cat_ID, $Settings['custom_cat_feeds']) )
{
$Settings['custom_cat_feeds'][] = $cat_ID;
powerpress_save_settings($Settings);
}
powerpress_page_message_add_notice( __('Please configure your category podcast feed now.', 'powerpress') );
$_GET['action'] = 'powerpress-editcategoryfeed';
$_GET['cat'] = $cat_ID;
}
}; break;
case 'powerpress-delete-feed': {
$delete_slug = $_GET['feed_slug'];
$force_deletion = !empty($_GET['force']);
check_admin_referer('powerpress-delete-feed-'.$delete_slug);
$Episodes = powerpress_admin_episodes_per_feed($delete_slug);
if( false && $delete_slug == 'podcast' && $force_deletion == false ) // Feature disabled, you can now delete podcast specific settings
{
powerpress_page_message_add_error( __('Cannot delete default podcast feed.', 'powerpress') );
}
else if( $delete_slug != 'podcast' && $Episodes > 0 && $force_deletion == false )
{
powerpress_page_message_add_error( sprintf(__('Cannot delete feed. Feed contains %d episode(s).', 'powerpress'), $Episodes) );
}
else
{
$Settings = get_option('powerpress_general');
unset($Settings['custom_feeds'][ $delete_slug ]);
powerpress_save_settings($Settings); // Delete the feed from the general settings
delete_option('powerpress_feed_'.$delete_slug); // Delete the actual feed settings
// Now we need to update the rewrite cso the cached rules are up to date
if ( in_array($delete_slug, $wp_rewrite->feeds))
{
$index = array_search($delete_slug, $wp_rewrite->feeds);
if( $index !== false )
unset($wp_rewrite->feeds[$index]); // Remove the old feed
}
// Remove feed function hook
$hook = 'do_feed_' . $delete_slug;
remove_action($hook, $hook, 10, 1); // This may not be necessary
$wp_rewrite->flush_rules(); // This is definitely necessary
powerpress_page_message_add_notice( __('Feed deleted successfully.', 'powerpress') );
}
}; break;
case 'powerpress-delete-category-feed': {
$cat_ID = intval($_GET['cat']);
check_admin_referer('powerpress-delete-category-feed-'.$cat_ID);
$Settings = get_option('powerpress_general');
$key = array_search($cat_ID, $Settings['custom_cat_feeds']);
if( $key !== false )
{
unset( $Settings['custom_cat_feeds'][$key] );
powerpress_save_settings($Settings); // Delete the feed from the general settings
}
delete_option('powerpress_cat_feed_'.$cat_ID); // Delete the actual feed settings
powerpress_page_message_add_notice( __('Removed podcast settings for category feed successfully.', 'powerpress') );
}; break;
case 'powerpress-delete-taxonomy-feed': {
$tt_ID = intval($_GET['ttid']);
check_admin_referer('powerpress-delete-taxonomy-feed-'.$tt_ID);
$Settings = get_option('powerpress_taxonomy_podcasting');
if( !empty($Settings[ $tt_ID ]) )
{
unset( $Settings[ $tt_ID ] );
powerpress_save_settings($Settings, 'powerpress_taxonomy_podcasting'); // Delete the feed from the general settings
}
delete_option('powerpress_taxonomy_'.$tt_ID); // Delete the actual feed settings
powerpress_page_message_add_notice( __('Removed podcast settings for term successfully.', 'powerpress') );
}; break;
case 'powerpress-delete-posttype-feed': {
// check admin referer prevents xss
$feed_slug = esc_attr($_GET['feed_slug']);
$post_type = esc_attr($_GET['podcast_post_type']);
check_admin_referer('powerpress-delete-posttype-feed-'.$post_type .'_'.$feed_slug);
$Settings = get_option('powerpress_posttype_'.$post_type);
if( !empty($Settings[ $feed_slug ]) )
{
unset( $Settings[ $feed_slug ] );
update_option('powerpress_posttype_'.$post_type, $Settings);
//powerpress_save_settings($Settings, 'powerpress_posttype_'.$post_type); // Delete the feed from the general settings
}
powerpress_page_message_add_notice( __('Removed podcast settings for post type successfully.', 'powerpress') );
}; break;
case 'powerpress-podpress-settings': {
check_admin_referer('powerpress-podpress-settings');
// Import settings here..
if( powerpress_admin_import_podpress_settings() )
powerpress_page_message_add_notice( __('Podpress settings imported successfully.', 'powerpress') );
else
powerpress_page_message_add_error( __('No Podpress settings found.', 'powerpress') );
}; break;
case 'powerpress-podcasting-settings': {
check_admin_referer('powerpress-podcasting-settings');
// Import settings here..
if( powerpress_admin_import_podcasting_settings() )
powerpress_page_message_add_notice( __('Settings imported from the plugin "Podcasting" successfully.', 'powerpress') );
else
powerpress_page_message_add_error( __('No settings found for the plugin "Podcasting".', 'powerpress') );
}; break;
case 'powerpress-add-caps': {
check_admin_referer('powerpress-add-caps');
$users = array('administrator','editor', 'author'); // , 'contributor', 'subscriber');
foreach( $users as $null => $user )
{
$role = get_role($user);
if( !empty($role) )
{
if( !$role->has_cap('edit_podcast') )
$role->add_cap('edit_podcast');
if( $user == 'administrator' && !$role->has_cap('view_podcast_stats') )
$role->add_cap('view_podcast_stats');
}
}
$General = array('use_caps'=>true);
powerpress_save_settings($General);
powerpress_page_message_add_notice( __('PowerPress Roles and Capabilities added to WordPress Blog.', 'powerpress') );
}; break;
case 'powerpress-remove-caps': {
check_admin_referer('powerpress-remove-caps');
$users = array('administrator','editor', 'author', 'contributor', 'subscriber');
foreach( $users as $null => $user )
{
$role = get_role($user);
if( !empty($role) )
{
if( $role->has_cap('edit_podcast') )
$role->remove_cap('edit_podcast');
if( $role->has_cap('view_podcast_stats') )
$role->remove_cap('view_podcast_stats');
}
}
$General = array('use_caps'=>false);
powerpress_save_settings($General);
powerpress_page_message_add_notice( __('PowerPress Roles and Capabilities removed from WordPress Blog', 'powerpress') );
}; break;
case 'powerpress-add-feed-caps': {
check_admin_referer('powerpress-add-feed-caps');
$ps_role = get_role('premium_subscriber');
if( empty($ps_role) )
{
add_role('premium_subscriber', __('Premium Subscriber', 'powerpress'));
$ps_role = get_role('premium_subscriber');
$ps_role->add_cap('read');
$ps_role->add_cap('premium_content');
}
$users = array('administrator','editor', 'author'); // , 'contributor', 'subscriber');
foreach( $users as $null => $user )
{
$role = get_role($user);
if( !empty($role) )
{
if( !$role->has_cap('premium_content') )
$role->add_cap('premium_content');
}
}
$General = array('premium_caps'=>true);
powerpress_save_settings($General);
powerpress_page_message_add_notice( __('Podcast Password Protection Capabilities for Custom Channel Feeds added successfully.', 'powerpress') );
}; break;
case 'powerpress-remove-feed-caps': {
check_admin_referer('powerpress-remove-feed-caps');
$users = array('administrator','editor', 'author', 'contributor', 'subscriber', 'premium_subscriber', 'powerpress');
foreach( $users as $null => $user )
{
$role = get_role($user);
if( !empty($role) )
{
if( $role->has_cap('premium_content') )
$role->remove_cap('premium_content');
}
}
remove_role('premium_subscriber');
$General = array('premium_caps'=>false);
powerpress_save_settings($General);
powerpress_page_message_add_notice( __('Podcast Password Protection Capabilities for Custom Channel Feeds removed successfully.', 'powerpress') );
}; break;
case 'powerpress-clear-update_plugins': {
check_admin_referer('powerpress-clear-update_plugins');
delete_option('update_plugins'); // OLD method
delete_option('_site_transient_update_plugins'); // New method
powerpress_page_message_add_notice( sprintf( __('Plugins Update Cache cleared successfully. You may now to go the %s page to see the latest plugin versions.', 'powerpress'), '<a href="'. admin_url() .'plugins.php" title="'. __('Manage Plugins', 'powerpress') .'">'. __('Manage Plugins', 'powerpress') .'</a>'), 'inline', false );
}; break;
case 'powerpress-ios11-fields': {
check_admin_referer('powerpress-ios11-fields');
$General = array('ios11_fields'=> (!empty($_REQUEST['variation'])? $_REQUEST['variation'] : '0') );
powerpress_save_settings($General);
powerpress_page_message_add_notice( 'iOS 11 program level fields changed.' );
}; break;
case 'powerpress-beta-features': {
check_admin_referer('powerpress-beta-features');
$General = array('powerpress-beta-features'=> (!empty($_REQUEST['feature'])? $_REQUEST['feature'] : '0') );
powerpress_save_settings($General);
powerpress_page_message_add_notice( __('PowerPress Beta features have been updated.', 'powerpress') );
}; break;
}
}
if( isset($_REQUEST['action']) )
{
switch( $_REQUEST['action'] )
{
case 'powerpress-migrate-media': {
require_once( POWERPRESS_ABSPATH . '/powerpressadmin-migrate.php');
powerpress_admin_migrate_request();
}; break;
}
}
}
// Handle edit from category page
if( isset($_POST['from_categories']) )
{
wp_redirect('edit-tags.php?taxonomy=category&message=3');
exit;
}
add_filter( 'plugin_row_meta', 'powerpress_plugin_row_meta', 10, 2);
// Hnadle player settings
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-player.php');
powerpress_admin_players_init();
// Handle notices
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-notifications.php');
}
add_action('admin_init', 'powerpress_admin_init');
function powerpress_admin_notices()
{
$errors = get_option('powerpress_errors');
if( !empty($errors) )
{
if( !delete_option('powerpress_errors') ) {
// If for some reason we cannot delete this record, maybe we can at least update it with a blank value...
update_option('powerpress_errors', '');
}
// Clear the SG cachepress plugin:
if (function_exists('sg_cachepress_purge_cache')) { sg_cachepress_purge_cache(); }
foreach( $errors as $null => $error )
{
?>
<div class="updated"><p style="line-height: 125%;"><strong><?php echo $error; ?></strong></p></div>
<?php
}
}
}
add_action( 'admin_notices', 'powerpress_admin_notices' );
function powerpress_save_settings($SettingsNew=false, $field = 'powerpress_general' )
{
if( $field == 'powerpress_taxonomy_podcasting' || $field == 'powerpress_itunes_featured' ) { // No merging settings for these fields...
update_option($field, $SettingsNew);
return;
}
// Save general settings
if( $SettingsNew )
{
$Settings = get_option($field);
if( !is_array($Settings) )
$Settings = array();
foreach( $SettingsNew as $key => $value ) {
$Settings[$key] = $value;
}
if( $field == 'powerpress_general' && !isset($Settings['timestamp']) )
$Settings['timestamp'] = time();
// Special case fields, if they are empty, we can delete them., this will keep the Settings array uncluttered
if( isset($Settings['feed_links']) && $Settings['feed_links'] == 0 ) // If set to default value, no need to save it in the database
unset($Settings['feed_links']);
// We can unset settings that are set to their defaults to save database size...
if( $field == 'powerpress_general' )
{
if( isset($SettingsNew['new_episode_box_flag'])) {
/* Switch the settings over to the actual field name (to fix FCGI mode problem with older versions of PHP.
if (isset($SettingsNew['ebititle'])) {
if ($SettingsNew['ebititle'] == 'false') {
$Settings['new_episode_box_itunes_title'] = 2;
} else {
$Settings['new_episode_box_itunes_title'] = 1;
$SettingsNew['new_episode_box_itunes_title'] = 1;
}
unset($Settings['ebititle']);
}
if (isset($SettingsNew['ebinst'])) {
if ($SettingsNew['ebinst'] == 'false') {
$Settings['new_episode_box_itunes_nst'] = 2;
} else {
$Settings['new_episode_box_itunes_nst'] = 1;
$SettingsNew['new_episode_box_itunes_nst'] = 1;
}
unset($Settings['ebinst']);
}*/
if (!isset($SettingsNew['new_episode_box_embed']))
$Settings['new_episode_box_embed'] = 2;
if (!isset($SettingsNew['new_embed_replace_player']))
$Settings['new_embed_replace_player'] = 2;
if (!isset($SettingsNew['new_episode_box_no_player']))
$Settings['new_episode_box_no_player'] = 2;
if (!isset($SettingsNew['new_episode_box_no_links']))
$Settings['new_episode_box_no_links'] = 2;
if (!isset($SettingsNew['new_episode_box_no_player_and_links']))
$Settings['new_episode_box_no_player_and_links'] = 2;
if (!isset($SettingsNew['new_episode_box_cover_image']))
$Settings['new_episode_box_cover_image'] = 2;
if (!isset($SettingsNew['new_episode_box_player_size']))
$Settings['new_episode_box_player_size'] = 2;
if (!isset($SettingsNew['new_episode_box_subtitle']))
$Settings['new_episode_box_subtitle'] = 2;
if (!isset($SettingsNew['new_episode_box_summary']))
$Settings['new_episode_box_summary'] = 2;
if (!isset($SettingsNew['new_episode_box_author']))
$Settings['new_episode_box_author'] = 2;
if (!isset($SettingsNew['new_episode_box_explicit']))
$Settings['new_episode_box_explicit'] = 2;
if (!isset($SettingsNew['new_episode_box_block']))
$Settings['new_episode_box_block'] = 2;
if (!isset($SettingsNew['new_episode_box_itunes_image']))
$Settings['new_episode_box_itunes_image'] = 2;
if (!isset($SettingsNew['new_episode_box_order']))
$Settings['new_episode_box_order'] = 2;
if (!isset($SettingsNew['new_episode_box_itunes_title']))
$Settings['new_episode_box_itunes_title'] = 2;
if (!isset($SettingsNew['new_episode_box_itunes_nst']))
$Settings['new_episode_box_itunes_nst'] = 2;
if (!isset($SettingsNew['new_episode_box_gp_explicit']))
$Settings['new_episode_box_gp_explicit'] = 2;
if (!isset($SettingsNew['new_episode_box_feature_in_itunes']))
$Settings['new_episode_box_feature_in_itunes'] = 2;
} elseif(isset($SettingsNew['pp-gen-settings-tabs'])) {
if (!isset($SettingsNew['skip_to_episode_settings']) || empty($SettingsNew['skip_to_episode_settings']))
unset($Settings['skip_to_episode_settings']);
if (!isset($SettingsNew['display_player_excerpt']) || empty($SettingsNew['display_player_excerpt']))
unset($Settings['display_player_excerpt']);
if (!isset($SettingsNew['hide_player_more']) || empty($SettingsNew['hide_player_more']))
unset($Settings['hide_player_more']);
if (!isset($SettingsNew['podcast_embed']) || empty($SettingsNew['podcast_embed']))
unset($Settings['podcast_embed']);
if (!isset($SettingsNew['subscribe_links']) || empty($SettingsNew['subscribe_links']))
unset($Settings['subscribe_links']);
if (!isset($SettingsNew['new_window_no_factor']) || empty($SettingsNew['new_window_no_factor']))
unset($Settings['new_window_no_factor']);
}
if( isset($Settings['videojs_css_class']) && empty($Settings['videojs_css_class']) )
unset($Settings['videojs_css_class']);
if( isset($Settings['cat_casting']) && empty($Settings['cat_casting']) )
unset($Settings['cat_casting']);
if( isset($Settings['posttype_podcasting']) && empty($Settings['posttype_podcasting']) )
unset($Settings['posttype_podcasting']);
if( isset($Settings['taxonomy_podcasting']) && empty($Settings['taxonomy_podcasting']) )
unset($Settings['taxonomy_podcasting']);
if( isset($Settings['playlist_player']) && empty($Settings['playlist_player']) )
unset($Settings['playlist_player']);
if( isset($Settings['seo_feed_title']) && empty($Settings['seo_feed_title']) )
unset($Settings['seo_feed_title']);
if( isset($Settings['subscribe_feature_email']) && empty($Settings['subscribe_feature_email']) )
unset($Settings['subscribe_feature_email']);
if( isset($Settings['poster_image_video']) && empty($Settings['poster_image_video']) )
unset($Settings['poster_image_video']);
if( isset($Settings['poster_image_audio']) && empty($Settings['poster_image_audio']) )
unset($Settings['poster_image_audio']);
if( isset($Settings['itunes_image_audio']) && empty($Settings['itunes_image_audio']) )
unset($Settings['itunes_image_audio']);
}
else // Feed or player settings...
{
if( isset($Settings['itunes_block'] ) && $Settings['itunes_block'] == 0 )
unset($Settings['itunes_block']);
if( isset($Settings['itunes_complete'] ) && $Settings['itunes_complete'] == 0 )
unset($Settings['itunes_complete']);
if( isset($Settings['maximize_feed'] ) && $Settings['maximize_feed'] == 0 )
unset($Settings['maximize_feed']);
if( isset($Settings['donate_link'] ) && $Settings['donate_link'] == 0 )
unset($Settings['donate_link']);
if( empty($Settings['donate_url']) )
unset($Settings['donate_url']);
if( empty($Settings['donate_label']) )
unset($Settings['donate_label']);
if( isset($Settings['allow_feed_comments'] ) && $Settings['allow_feed_comments'] == 0 )
unset($Settings['allow_feed_comments']);
if( empty($Settings['episode_itunes_image']) )
unset($Settings['episode_itunes_image']);
}
update_option($field, $Settings);
}
}
function powerpress_get_settings($field, $for_editing=true)
{
$Settings = get_option($field);
if( $for_editing )
$Settings = powerpress_htmlspecialchars($Settings);
return $Settings;
}
function powerpress_htmlspecialchars($data)
{
if( !$data )
return $data;
if( is_array($data) )
{
foreach( $data as $key => $value )
{
if( $key == 'itunes_summary' )
continue; // Skip this one as we escape it in the form.
if( is_array($value) )
$data[$key] = powerpress_htmlspecialchars($value);
else
$data[$key] = htmlspecialchars($value);
}
reset($data);
}
return $data;
}
function powerpress_stripslashes($data)
{
if( !$data )
return $data;
if( !is_array($data) )
return stripslashes($data);
foreach( $data as $key => $value )
{
if( is_array($value) )
$data[$key] = powerpress_stripslashes($value);
else
$data[$key] = stripslashes($value);
}
reset($data);
return $data;
}
function powerpress_admin_get_post_types($capability_type = 'post')
{
if( !function_exists('get_post_types') || !function_exists('get_post_type_object') )
return array($capability_type);
$return = array();
$post_types = get_post_types();
foreach( $post_types as $index => $post_type )
{
if( $post_type == 'redirect_rule' || $post_type == 'attachment' || $post_type == 'nav_menu_item' || $post_type == 'revision' || $post_type == 'action' )
continue;
if( $capability_type !== false )
{
$object = get_post_type_object($post_type);
if( $object && $object->capability_type == $capability_type )
$return[] = $post_type;
}
else
{
$return[] = $post_type;
}
}
return $return;
}
/* Rebuild powerpress_posttype_podcasting field*/
function powerpress_rebuild_posttype_podcasting()
{
// Loop through all the posttype podcasting settings, save them into a field
// array( feed-slugs => array('posttype1'=>'post type 1 title', 'posttype2'=>post type 2 title', ...) );
$post_types = get_post_types();
$FeedSlugPostTypeArray = array();
foreach( $post_types as $index => $post_type )
{
$PostTypeSettingsArray = get_option('powerpress_posttype_'. $post_type );
if( !$PostTypeSettingsArray )
continue;
foreach( $PostTypeSettingsArray as $feed_slug => $PostTypeSettings )
{
$FeedSlugPostTypeArray[ $feed_slug ][ $post_type ] = ( empty($PostTypeSettings['title'])? $feed_slug : $PostTypeSettings['title'] );
}
}
update_option('powerpress_posttype-podcasting', $FeedSlugPostTypeArray);
}
function powerpress_admin_menu()
{
$Powerpress = get_option('powerpress_general');
if( defined('PODPRESS_VERSION') || isset($GLOBALS['podcasting_player_id']) || isset($GLOBALS['podcast_channel_active']) || defined('PODCASTING_VERSION') )
{
// CRAP
}
else if( empty($Powerpress['use_caps']) || current_user_can('edit_podcast') )
{ // Otherwise we're using a version of wordpress that is not supported.
require_once( POWERPRESS_ABSPATH .'/views/episode-box.php');
$FeedSlugPostTypesArray = array();
if( !empty($Powerpress['posttype_podcasting']) )
{
$FeedSlugPostTypesArray = get_option('powerpress_posttype-podcasting');
if( empty($FeedSlugPostTypesArray) )
$FeedSlugPostTypesArray = array();
}
if( !defined('POWERPRESS_POST_TYPES') )
{
$page_types = array('page'); // Only apply to default pages
if( empty($Powerpress['posttype_podcasting']) )
$page_types = powerpress_admin_get_post_types('page'); // Get pages by capability type
foreach( $page_types as $null => $page_type )
{
if( empty($FeedSlugPostTypesArray[ 'podcast' ][ $page_type ]) )
add_meta_box('powerpress-podcast', __('Podcast Episode', 'powerpress'), 'powerpress_meta_box', $page_type, 'normal');
}
$post_types = array('post'); // Only apply to default posts if post type podcasting is disabled
if( empty($Powerpress['posttype_podcasting']) )
$post_types = powerpress_admin_get_post_types('post'); // Get pages by capability type
}
else
{
$post_type_string = str_replace(' ', '',POWERPRESS_POST_TYPES); // Get all the spaces out
$post_types = explode(',', $post_type_string);
}
if( !empty($Powerpress['posttype_podcasting']) )
{
add_meta_box('powerpress-podcast', __('Podcast Episode (default)', 'powerpress'), 'powerpress_meta_box', 'post', 'normal'); // Default podcast box for post type 'post'
$FeedSlugPostTypesArray = get_option('powerpress_posttype-podcasting');
if( empty($FeedSlugPostTypesArray) )
$FeedSlugPostTypesArray = array();
foreach( $FeedSlugPostTypesArray as $feed_slug => $FeedSlugPostTypes )
{
foreach( $FeedSlugPostTypes as $post_type => $type_title )
{
if ( $feed_slug != 'podcast' || $post_type != 'post' ) // No the default podcast feed
{
$feed_title = $type_title;
if( empty($feed_title) )
$feed_title = $feed_slug;
//echo (" $feed_slug ");
add_meta_box('powerpress-'.$feed_slug, __('Podcast Episode', 'powerpress') .': '.$feed_title, 'powerpress_meta_box', $post_type, 'normal');
}
}
}
}
if( isset($Powerpress['custom_feeds']) )
{
$FeedDefaultPodcast = get_option('powerpress_feed_podcast');
foreach( $post_types as $null => $post_type )
{
// Make sure this post type can edit the default podcast channel...
if( !empty($FeedDefaultPodcast['custom_post_type']) && $FeedDefaultPodcast['custom_post_type'] != $post_type )
continue;
if( empty($FeedSlugPostTypesArray[ 'podcast' ][ $post_type ]) )
add_meta_box('powerpress-podcast', __('Podcast Episode (default)', 'powerpress'), 'powerpress_meta_box', $post_type, 'normal');
}
foreach( $Powerpress['custom_feeds'] as $feed_slug => $feed_title )
{
if( $feed_slug == 'podcast' )
continue;
$FeedCustom = get_option('powerpress_feed_'.$feed_slug);
$feed_slug = esc_attr($feed_slug);
reset($post_types);
foreach( $post_types as $null => $post_type )
{
// Make sure this post type can edit the default podcast channel...
if( !empty($FeedCustom['custom_post_type']) && $FeedCustom['custom_post_type'] != $post_type )
continue;
if( empty($FeedSlugPostTypesArray[ $feed_slug ][ $post_type ]) )
add_meta_box('powerpress-'.$feed_slug, __('Podcast Episode for Custom Channel', 'powerpress') .': '. esc_attr($feed_title), 'powerpress_meta_box', $post_type, 'normal');
}
}
reset($Powerpress['custom_feeds']);
}
else // This handles all podcast post types and default 'post'. if post type podcasting enabled.
{
reset($post_types);
foreach( $post_types as $null => $post_type )
{
if( empty($FeedSlugPostTypesArray[ 'podcast' ][ $post_type ]) )
add_meta_box('powerpress-podcast', __('Podcast Episode', 'powerpress'), 'powerpress_meta_box', $post_type, 'normal');
}
}
// For custom compatibility type set:
if( isset($Powerpress['custom_feeds']) && defined('POWERPRESS_CUSTOM_CAPABILITY_TYPE') )
{
$post_types = powerpress_admin_get_post_types( POWERPRESS_CUSTOM_CAPABILITY_TYPE );
if( !empty($post_types) )
{
foreach( $Powerpress['custom_feeds'] as $feed_slug => $feed_title )
{
if( $feed_slug == 'podcast' )
continue;
$FeedCustom = get_option('powerpress_feed_'.$feed_slug);
reset($post_types);
foreach( $post_types as $null => $post_type )
{
if( !empty($FeedCustom['custom_post_type']) && $FeedCustom['custom_post_type'] != $post_type )
continue;
if( empty($FeedSlugPostTypesArray[ $feed_slug ][ $post_type ]) )
add_meta_box('powerpress-'.$feed_slug, __('Podcast Episode for Custom Channel', 'powerpress') .': '.$feed_title, 'powerpress_meta_box', $post_type, 'normal');
}
}
reset($Powerpress['custom_feeds']);
}
}
}
if( current_user_can(POWERPRESS_CAPABILITY_MANAGE_OPTIONS) ) {
$Powerpress = powerpress_default_settings($Powerpress, 'basic');
if (isset($_GET['page']) && strstr($_GET['page'], 'powerpress') !== false && isset($_POST['General'])) {
$ToBeSaved = $_POST['General'];
if (isset($ToBeSaved['channels']))
$Powerpress['channels'] = $ToBeSaved['channels'];
if (isset($ToBeSaved['cat_casting']))
$Powerpress['cat_casting'] = $ToBeSaved['cat_casting'];
if (isset($ToBeSaved['taxonomy_podcasting']))
$Powerpress['taxonomy_podcasting'] = $ToBeSaved['taxonomy_podcasting'];
if (isset($ToBeSaved['posttype_podcasting']))
$Powerpress['posttype_podcasting'] = $ToBeSaved['posttype_podcasting'];
if (isset($ToBeSaved['podpress_stats']))
$Powerpress['podpress_stats'] = $ToBeSaved['podpress_stats'];
if (isset($ToBeSaved['blubrry_hosting']))
$Powerpress['blubrry_hosting'] = $ToBeSaved['blubrry_hosting'];
}
$Settings = get_option('powerpress_general');
if (!$Settings || (isset($Settings['pp_onboarding_incomplete']) && $Settings['pp_onboarding_incomplete'] == 1) && (isset($Settings['timestamp']) && $Settings['timestamp'] > 1576972800)) {
$parent_slug = 'powerpressadmin_onboarding.php';
$parent_slug = apply_filters('powerpress_submenu_parent_slug', $parent_slug);
add_menu_page(__('PowerPress', 'powerpress'), __('PowerPress', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpressadmin_onboarding.php', 'powerpress_admin_page_onboarding', powerpress_get_root_url() . 'powerpress_ico.png');
add_submenu_page($parent_slug, __('Get Started', 'powerpress'), __('Get Started', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpressadmin_onboarding.php', 'powerpress_admin_page_onboarding');
add_submenu_page($parent_slug, __('PowerPress Settings', 'powerpress'), __('Settings', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpressadmin_basic', 'powerpress_admin_page_basic');
} else {
$parent_slug = 'powerpressadmin_basic';
$parent_slug = apply_filters('powerpress_submenu_parent_slug', $parent_slug);
add_menu_page(__('PowerPress', 'powerpress'), __('PowerPress', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpressadmin_basic', 'powerpress_admin_page_basic', powerpress_get_root_url() . 'powerpress_ico.png');
add_submenu_page($parent_slug, __('PowerPress Settings', 'powerpress'), __('Settings', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpressadmin_basic', 'powerpress_admin_page_basic');
add_submenu_page($parent_slug, __('Get Started', 'powerpress'), __('Get Started', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpressadmin_onboarding.php', 'powerpress_admin_page_onboarding');
}
add_options_page(__('PowerPress', 'powerpress'), __('PowerPress', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpressadmin_basic', 'powerpress_admin_page_basic');
add_submenu_page($parent_slug, __('Import podcast feed from SoundCloud, LibSyn, PodBean or other podcast service.', 'powerpress'), __('Import Podcast', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_import_feed.php', 'powerpress_admin_page_import_feed');
add_submenu_page($parent_slug, __('Migrate media files to Blubrry Podcast Media Hosting with only a few clicks.', 'powerpress'), __('Migrate Media', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_migrate.php', 'powerpress_admin_page_migrate');
add_submenu_page($parent_slug, __('PowerPress Audio Player Options', 'powerpress'), __('Audio Player', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_player.php', 'powerpress_admin_page_players');
add_submenu_page($parent_slug, __('PowerPress Video Player Options', 'powerpress'), __('Video Player', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_videoplayer.php', 'powerpress_admin_page_videoplayers');
if (!empty($Powerpress['channels']))
add_submenu_page($parent_slug, __('PowerPress Custom Podcast Channels', 'powerpress'), __('Podcast Channels', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_customfeeds.php', 'powerpress_admin_page_customfeeds');
if (!empty($Powerpress['cat_casting']))
add_submenu_page($parent_slug, __('PowerPress Category Podcasting', 'powerpress'), __('Category Podcasting', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_categoryfeeds.php', 'powerpress_admin_page_categoryfeeds');
if (defined('POWERPRESS_TAXONOMY_PODCASTING') || !empty($Powerpress['taxonomy_podcasting']))
add_submenu_page($parent_slug, __('PowerPress Taxonomy Podcasting', 'powerpress'), __('Taxonomy Podcasting', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_taxonomyfeeds.php', 'powerpress_admin_page_taxonomyfeeds');
if (defined('POWERPRESS_POSTTYPE_PODCASTING') || !empty($Powerpress['posttype_podcasting']))
add_submenu_page($parent_slug, __('PowerPress Post Type Podcasting', 'powerpress'), __('Post Type Podcasting', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_posttypefeeds.php', 'powerpress_admin_page_posttypefeeds');
if (!empty($Powerpress['podpress_stats']))
add_submenu_page($parent_slug, __('PodPress Stats', 'powerpress'), __('PodPress Stats', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_podpress-stats.php', 'powerpress_admin_page_podpress_stats');
//if( !empty($Powerpress['blubrry_hosting']) && $Powerpress['blubrry_hosting'] !== 'false' )
add_submenu_page($parent_slug, __('PowerPress MP3 Tags', 'powerpress'), __('MP3 Tags', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_tags.php', 'powerpress_admin_page_tags');
add_submenu_page($parent_slug, __('PowerPress Tools', 'powerpress'), __('Tools', 'powerpress'), POWERPRESS_CAPABILITY_EDIT_PAGES, 'powerpress/powerpressadmin_tools.php', 'powerpress_admin_page_tools');
}
}
add_action('admin_menu', 'powerpress_admin_menu');
// Save episode information
function powerpress_edit_post($post_ID, $post)
{
if ( !current_user_can('edit_post', $post_ID) )
return $post_ID;
$GeneralSettings = get_option('powerpress_general');
if( isset($GeneralSettings['auto_enclose']) && $GeneralSettings['auto_enclose'] )
{
powerpress_do_enclose($post->post_content, $post_ID, ($GeneralSettings['auto_enclose']==2) );
}
$Episodes = ( isset($_POST['Powerpress'])? $_POST['Powerpress'] : false);
if( $Episodes )
{
foreach( $Episodes as $feed_slug => $Powerpress )
{
$field = 'enclosure';
if( $feed_slug != 'podcast' )
$field = '_'.$feed_slug.':enclosure';
if( !empty($Powerpress['remove_podcast']) )
{
delete_post_meta( $post_ID, $field);
if( $feed_slug == 'podcast' ) // Clean up the old data
delete_post_meta( $post_ID, 'itunes:duration');
}
else if( !empty($Powerpress['change_podcast']) || !empty($Powerpress['new_podcast']) )
{
// No URL specified, then it's not really a podcast to save
if( $Powerpress['url'] == '' )
continue; // go to the next media file
// Initialize the important variables:
$MediaURL = $Powerpress['url'];
if( !empty($GeneralSettings['default_url']) && strpos($MediaURL, 'http://') !== 0 && strpos($MediaURL, 'https://') !== 0 && empty($Powerpress['hosting']) ) // If the url entered does not start with a http:// or https://
{
if( !empty($MediaURL) )
$MediaURL = rtrim($GeneralSettings['default_url'], '/') .'/'. ltrim($MediaURL, '/');
}
$FileSize = '';
$ContentType = '';
$Duration = false;
if( $Powerpress['set_duration'] == 0 )
$Duration = ''; // allow the duration to be detected
// Get the content type based on the file extension, first we have to remove query string if it exists
$UrlParts = parse_url($Powerpress['url']);
if( $UrlParts['path'] )
{
// using functions that already exist in WordPress when possible:
$ContentType = powerpress_get_contenttype($UrlParts['path']);
}
if( !$ContentType )
{
$error = __('Error', 'powerpress') ." [{$Powerpress['url']}]: " .__('Unable to determine content type of media (e.g. audio/mpeg). Verify file extension is correct and try again.', 'powerpress');
powerpress_add_error($error);
continue;
}
//Set the duration specified by the user
if( $Powerpress['set_duration'] == 1 || $Powerpress['set_duration'] == 0 ) // specify duration
{
$Duration = sprintf('%02d:%02d:%02d', $Powerpress['duration_hh'], $Powerpress['duration_mm'], $Powerpress['duration_ss'] );
}
//Set the file size specified by the user
if( $Powerpress['set_size'] == 1 ) // specify file size
{
$FileSize = $Powerpress['size'];
}
if( $Powerpress['set_size'] == 0 || $Powerpress['set_duration'] == 0 )
{
if( !empty($Powerpress['hosting']) )
{
if( $Powerpress['set_size'] == 0 || $Powerpress['set_duration'] == 0 )
{
$MediaInfo = powerpress_get_media_info($Powerpress['url'], $Powerpress['program_keyword']);
if( !isset($MediaInfo['error']) )
{
if( $Powerpress['set_size'] == 0 )
$FileSize = $MediaInfo['length'];
if( $Powerpress['set_duration'] == 0 && !empty($MediaInfo['duration']) )
$Duration = powerpress_readable_duration($MediaInfo['duration'], true);
}
else
{
$error = __('Error', 'powerpress') ." ({$Powerpress['url']}): {$MediaInfo['error']}";
powerpress_add_error($error);
continue;
}
}
}
else
{
if( empty($Powerpress['set_duration']) )
$MediaInfo = powerpress_get_media_info_local($MediaURL, $ContentType, 0, '');
else
$MediaInfo = powerpress_get_media_info_local($MediaURL, $ContentType, 0, $Duration);
if( isset($MediaInfo['error']) )
{
$error = __('Error', 'powerpress') ." (<a href=\"$MediaURL\" target=\"_blank\">{$MediaURL}</a>): {$MediaInfo['error']}";
powerpress_add_error($error);
//continue;
}
else if( empty($MediaInfo['length']) )
{
$error = __('Error', 'powerpress') ." (<a href=\"$MediaURL\" target=\"_blank\">{$MediaURL}</a>): ". __('Unable to obtain size of media.', 'powerpress');
powerpress_add_error($error);
//continue;
}
else
{
// Detect the duration
if( empty($Powerpress['set_duration']) && !empty($MediaInfo['duration']) )
$Duration = powerpress_readable_duration($MediaInfo['duration'], true); // Fix so it looks better when viewed for editing
// Detect the file size
if( empty($Powerpress['set_size']) && $MediaInfo['length'] > 0 )
$FileSize = $MediaInfo['length'];
}
}
}
// If we made if this far, we have the content type and file size...
$EnclosureData = $MediaURL . "\n" . $FileSize . "\n". $ContentType;
$ToSerialize = array();
if( !empty($Powerpress['hosting']) )
$ToSerialize['hosting'] = 1;
// iTunes duration
if( $Duration && ltrim($Duration, '0:') != '' ) // If all the zeroz and : are trimmed from the front and you're left with an empty value then don't save it.
$ToSerialize['duration'] = $Duration; // regular expression '/^(\d{1,2}\:)?\d{1,2}\:\d\d$/i' (examples: 1:23, 12:34, 1:23:45, 12:34:56)
// iTunes Subtitle
if( isset($Powerpress['subtitle']) && trim($Powerpress['subtitle']) != '' )
$ToSerialize['subtitle'] = stripslashes($Powerpress['subtitle']);
// iTunes Summary
if( isset($Powerpress['summary']) && trim($Powerpress['summary']) != '' )
$ToSerialize['summary'] = stripslashes($Powerpress['summary']);
// Google Play Description
if( isset($Powerpress['gp_desc']) && trim($Powerpress['gp_desc']) != '' )
$ToSerialize['gp_desc'] = stripslashes($Powerpress['gp_desc']);
// iTunes keywords (Deprecated by Apple)
if( isset($Powerpress['keywords']) && trim($Powerpress['keywords']) != '' )
$ToSerialize['keywords'] = stripslashes($Powerpress['keywords']);
// iTunes Author
if( isset($Powerpress['author']) && trim($Powerpress['author']) != '' )
$ToSerialize['author'] = stripslashes($Powerpress['author']);
// iTunes Explicit
if( isset($Powerpress['explicit']) && trim($Powerpress['explicit']) != '' )
$ToSerialize['explicit'] = stripslashes($Powerpress['explicit']);
// Google Play Explicit
if( isset($Powerpress['gp_explicit']) && trim($Powerpress['gp_explicit']) == '1' )
$ToSerialize['gp_explicit'] = stripslashes($Powerpress['gp_explicit']);
// iTunes CC
if( isset($Powerpress['cc']) && trim($Powerpress['cc']) != '' )
$ToSerialize['cc'] = stripslashes($Powerpress['cc']);
// iTunes Episode image
if( isset($Powerpress['itunes_image']) && trim($Powerpress['itunes_image']) != '' )
$ToSerialize['itunes_image'] = stripslashes($Powerpress['itunes_image']);
if( isset($Powerpress['episode_title']) && trim($Powerpress['episode_title']) != '' )
$ToSerialize['episode_title'] = stripslashes($Powerpress['episode_title']);
if( isset($Powerpress['episode_no']) && trim($Powerpress['episode_no']) != '' )
$ToSerialize['episode_no'] = stripslashes($Powerpress['episode_no']);
if( isset($Powerpress['season']) && trim($Powerpress['season']) != '' )
$ToSerialize['season'] = stripslashes($Powerpress['season']);
if( isset($Powerpress['episode_type']) && trim($Powerpress['episode_type']) != '' )
$ToSerialize['episode_type'] = stripslashes($Powerpress['episode_type']);
// order
if( isset($Powerpress['order']) && trim($Powerpress['order']) != '' )
$ToSerialize['order'] = stripslashes($Powerpress['order']);
// always
if( isset($Powerpress['always']) && trim($Powerpress['always']) != '' )
$ToSerialize['always'] = stripslashes($Powerpress['always']);
// iTunes Block
if( isset($Powerpress['block']) && $Powerpress['block'] == '1' )
$ToSerialize['block'] = 1;
// Google Play Block
if( isset($Powerpress['gp_block']) && $Powerpress['gp_block'] == '1' )
$ToSerialize['gp_block'] = 1;
// Player Embed
if( isset($Powerpress['embed']) && trim($Powerpress['embed']) != '' )
$ToSerialize['embed'] = stripslashes($Powerpress['embed']); // we have to strip slahes if they are present befure we serialize the data
if( isset($Powerpress['image']) && trim($Powerpress['image']) != '' )
$ToSerialize['image'] = stripslashes($Powerpress['image']);
if( isset($Powerpress['no_player']) && $Powerpress['no_player'] )
$ToSerialize['no_player'] = 1;
if( isset($Powerpress['no_links']) && $Powerpress['no_links'] )
$ToSerialize['no_links'] = 1;
if( isset($Powerpress['ishd']) && $Powerpress['ishd'] )
$ToSerialize['ishd'] = 1;
if( isset($Powerpress['program_keyword']) && !empty($Powerpress['program_keyword']) )
$ToSerialize['program_keyword'] = $Powerpress['program_keyword'];
if( isset($Powerpress['width']) && trim($Powerpress['width']) )
$ToSerialize['width'] =stripslashes( trim($Powerpress['width']));
if( isset($Powerpress['height']) && trim($Powerpress['height']) )
$ToSerialize['height'] = stripslashes(trim($Powerpress['height']));
if( !empty($Powerpress['feed_title']) && trim($Powerpress['feed_title']) )
$ToSerialize['feed_title'] = stripslashes(trim($Powerpress['feed_title']));
if( !empty($Powerpress['category']) )
$ToSerialize['category'] = stripslashes($Powerpress['category']);
if( isset($Powerpress['no_player_and_links']) && $Powerpress['no_player_and_links'] )
{
$ToSerialize['no_player'] = 1;
$ToSerialize['no_links'] = 1;
}
// WebM Support:
if( !empty($Powerpress['webm_src']) )
{
$WebMSrc = $Powerpress['webm_src'];
if( !empty($GeneralSettings['default_url']) && strpos($WebMSrc, 'http://') !== 0 ) // && $Powerpress['hosting'] != 1 ) // If the url entered does not start with a http://
{
$WebMSrc = rtrim($GeneralSettings['default_url'], '/') .'/'. ltrim($WebMSrc, '/');
}
$ToSerialize['webm_src'] = $WebMSrc;
$MediaInfo = powerpress_get_media_info_local($WebMSrc, 'video/webm', 0, '');
if( isset($MediaInfo['error']) )
{
$error = __('Error', 'powerpress') ." ({$WebMSrc}): {$MediaInfo['error']}";
powerpress_add_error($error);
}
else if( empty($MediaInfo['length']) )
{
$error = __('Error', 'powerpress') ." ({$WebMSrc}): ". __('Unable to obtain size of media.', 'powerpress');
powerpress_add_error($error);
}
else
{
$ToSerialize['webm_length'] = $MediaInfo['length'];
}
}
if( $Powerpress['set_duration'] == -1 )
unset($ToSerialize['duration']);
if( count($ToSerialize) > 0 ) // Lets add the serialized data
$EnclosureData .= "\n".serialize( $ToSerialize );
if( !empty($Powerpress['new_podcast']) )
{
add_post_meta($post_ID, $field, $EnclosureData, true);
}
else
{
update_post_meta($post_ID, $field, $EnclosureData);
}
if( !empty($ToSerialize['category']) )
{
$Categories = wp_get_post_categories($post_ID);
if( !in_array($ToSerialize['category'], $Categories) )
{
$AddCategories = array($ToSerialize['category']);
wp_set_post_categories($post_ID, $AddCategories, true);
}
}
}
} // Loop through posted episodes...
// Check for PowerpressFeature for each channel...
if( isset($_POST['PowerpressFeature']) )
{
$FeatureEpisodes = powerpress_get_settings('powerpress_itunes_featured');
if( empty($FeatureEpisodes) && !is_array($FeatureEpisodes) )
$FeatureEpisodes = array();
$PowerpressFeature = $_POST['PowerpressFeature'];
foreach( $PowerpressFeature as $feed_slug => $set_featured )
{
if( !empty($set_featured) )
$FeatureEpisodes[ $feed_slug ] = $post_ID;
else
unset($FeatureEpisodes[ $feed_slug ]);
}
powerpress_save_settings( $FeatureEpisodes, 'powerpress_itunes_featured');
}
require_once(POWERPRESS_ABSPATH .'/powerpress-metamarks.php');
powerpress_metabox_save($post_ID);
}
// Anytime the post is marked published, private or scheduled for the future we need to make sure we're making the media available for hosting
if( $post->post_status == 'publish' || $post->post_status == 'private' || $post->post_status == 'future' )
{
if( !empty($GeneralSettings['blubrry_hosting']) && $GeneralSettings['blubrry_hosting'] !== 'false' )
powerpress_process_hosting($post_ID, $post->post_title); // Call anytime blog post is in the published state
}
//WebSub implementation
if($post->post_status == 'publish' && !(defined('POWERPRESS_DISABLE_WEBSUB') && POWERPRESS_DISABLE_WEBSUB )) {
require_once( 'class.powerpresswebsub.php' );
$Websub = new PowerPressWebSub();
$feedUrls = array(); //feed urls that have been updated by this post and that the hub should be notified about.
$postType = get_post_type($post_ID);
if (!empty($GeneralSettings['cat_casting'])) {
foreach (wp_get_post_categories($post_ID) as $id) {
if (!empty($GeneralSettings['cat_casting_podcast_feeds'])) {
array_push($feedUrls, get_category_feed_link($id, 'podcast'));
} else {
array_push($feedUrls, get_category_feed_link($id));
}
}
}
foreach (get_post_meta($post_ID) as $key => $value) {
if ($key === 'enclosure') {
//main feed updated
array_push($feedUrls, get_feed_link('podcast'));
}
else if (!empty($GeneralSettings['channels']) && $postType == 'post' && preg_match("/_(\w{1,}):enclosure/i", $key, $matches) == 1) {
array_push($feedUrls, get_feed_link($matches[1]));
}
}
if (!empty($GeneralSettings['posttype_podcasting'])) {
if ($postType != "page" || $postType != "post") {
$PostTypeSettings = get_option('powerpress_posttype_' . $postType);
if (!empty($PostTypeSettings)) {
foreach ($PostTypeSettings as $feed_slug => $setting) {
array_push($feedUrls, get_post_type_archive_feed_link($postType, $feed_slug));
}
}
}
}
foreach ($feedUrls as $url) {
try {
$Websub->publish($url);
} catch (Exception $e) {
if( defined('WP_DEBUG') && WP_DEBUG ) {
powerpress_page_message_add_error( $e->getMessage() );
}
}
}
}
// And we're done!
return $post_ID;
}
add_action('edit_post', 'powerpress_edit_post', 10, 2);
if( defined('POWERPRESS_DO_ENCLOSE_FIX') )
{
function powerpress_insert_post_data($data, $postarr)
{
// If we added or modified a podcast episode, then we need to re-add/remove the embedded hidden link...
if( isset($_POST['Powerpress']['podcast']) && $postarr['post_type'] == 'post' )
{
// First, remove the previous comment if one exists in the post body.
$data['post_content'] = preg_replace('/\<!--.*added by PowerPress.*-->/im', '', $data['post_content']);
$Powerpress = $_POST['Powerpress']['podcast'];
if( !empty($Powerpress['remove_podcast']) )
{
// Do nothing
}
else if( !empty($Powerpress['change_podcast']) || !empty($Powerpress['new_podcast']) )
{
$MediaURL = $Powerpress['url'];
if( strpos($MediaURL, 'http://') !== 0 && strpos($MediaURL, 'https://') !== 0 && empty($Powerpress['hosting']) ) // If the url entered does not start with a http:// or https://
{
// Only glitch here is if the media url had an error, and if that's the case then there are other issues the user needs to worry about.
$GeneralSettings = get_option('powerpress_general');
if( $GeneralSettings && isset($GeneralSettings['default_url']) )
$MediaURL = rtrim($GeneralSettings['default_url'], '/') .'/'. ltrim($MediaURL, '/');
}
$data['post_content'] .= "<!-- DO NOT DELETE href=\"$MediaURL\" added by PowerPress to fix WordPress 2.8+ bug -->";
}
else
{
$EncloseData = powerpress_get_enclosure_data($postarr['ID']);
if( $EncloseData && $EncloseData['url'] )
$data['post_content'] .= "<!-- DO NOT DELETE href=\"{$EncloseData['url']}\" added by PowerPress to fix WordPress 2.8+ bug -->";
}
}
return $data;
}
add_filter('wp_insert_post_data', 'powerpress_insert_post_data',1,2);
}
// Do the iTunes pinging here...
function powerpress_publish_post($post_id)
{
// Delete scheduled _encloseme requests...
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_key = '_encloseme' ");
$GeneralSettings = get_option('powerpress_general');
if( isset($GeneralSettings['auto_enclose']) && $GeneralSettings['auto_enclose'] )
{
$post = &get_post($post_id);
powerpress_do_enclose($post->post_content, $post_id, ($GeneralSettings['auto_enclose']==2) );
}
}
add_action('publish_post', 'powerpress_publish_post');
// Admin page, html meta header
function powerpress_admin_head()
{
global $parent_file, $hook_suffix;
$page_name = '';
if ( isset($parent_file) && !empty($parent_file) )
{
$page_name = substr($parent_file, 0, -4);
$page_name = preg_replace('/(\?.*)$/', '', $page_name); // Hack required for WP 3.0
$page_name = str_replace(array('.php', '-new', '-add'), '', $page_name); // Hack required for WP 3.0
}
else
{
$page_name = str_replace(array('.php', '-new', '-add'), '', $hook_suffix);
}
// Powerpress page
if( isset($_GET['page']) && strstr($_GET['page'], 'powerpress' ) !== false )
{
powerpress_wp_print_styles();
echo "<script type=\"text/javascript\" src=\"". powerpress_get_root_url() ."player.min.js\"></script>\n";
?>
<script type="text/javascript"><!--
function powerpress_show_field(id, show) {
if( document.getElementById(id).nodeName == "SPAN" )
document.getElementById(id).style.display = (show?"inline":"none");
else
document.getElementById(id).style.display = (show?"block":"none");
}
function powerpress_new_feed_url_prompt() {
var Msg = '<?php echo __('WARNING: Changes made here are permanent. If the New Feed URL entered is incorrect, you will lose subscribers and will no longer be able to update your listing in the iTunes Store.\n\nDO NOT MODIFY THIS SETTING UNLESS YOU ABSOLUTELY KNOW WHAT YOU ARE DOING.\n\nAre you sure you want to continue?', 'powerpress'); ?>';
if( confirm(Msg) ) {
powerpress_show_field('new_feed_url_step_1', false);
powerpress_show_field('new_feed_url_step_2', true);
}
return false;
}
function powerpress_create_subscribe_page()
{
// This function is only called once!
jQuery.ajax( {
type: 'POST',
url: '<?php echo admin_url(); ?>admin-ajax.php',
data: { action: 'powerpress_create_subscribe_page'},
timeout: (30 * 1000),
success: function(response) {
response = response.trim();
<?php
if( defined('POWERPRESS_AJAX_DEBUG') )
echo "\t\t\t\talert(response);\n";
?>
// This logic will parse beyond warning messages generated by the server that we don't know about
var foundAt = response.indexOf('PAGE-OK');
if( foundAt > 0 )
{
response = response.substring( foundAt );
}
var Parts = response.split("\n", 5);
if( Parts[0] == 'PAGE-OK' )
{
jQuery('#subscribe_page_link_id').append('<option value="' + Parts[1] + '" selected>' + Parts[3] + '</option>');
jQuery('#subscribe_page_link_or').hide();
jQuery('#powerpress_create_subscribe_page').hide();
}
else if( Parts[0] == 'PAGE-ERROR' )
{
alert( Parts[1] );
}
else
{
alert( '<?php echo __('Unknown error occurred creating subscribe page.', 'powerpress'); ?>' );
}
},
error: function(objAJAXRequest, strError) {
alert( '<?php echo __('Unknown ajax error occurred creating subscribe page.', 'powerpress'); ?>' );
var errorMsg = "HTTP " +objAJAXRequest.statusText;
if ( objAJAXRequest.responseText ) {
errorMsg += ', '+ objAJAXRequest.responseText.replace( /<.[^<>]*?>/g, '' );
}
/*
jQuery('#powerpress_check_'+FeedSlug).css("display", 'none');
if( strError == 'timeout' )
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Operation timed out.', 'powerpress'); ?>' );
else if( errorMsg )
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '; ?>'+errorMsg );
else if( strError != null )
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '; ?>'+strError );
else
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '. __('Unknown', 'powerpress'); ?>' );
jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
*/
}
});
}
/* Save tab position */
jQuery(document).ready(function($) {
if( jQuery("#powerpress_settings_page").length > 0 )
{
<?php if (!empty($_POST['tab'])) { ?>
document.getElementById("<?php echo $_POST['tab']; ?>").click();
<?php } ?>
<?php if (!empty($_POST['sidenav-tab'])) { ?>
document.getElementById("<?php echo $_POST['sidenav-tab']; ?>").click();
<?php } ?>
jQuery('form').submit(function() {
let selectedTemp = jQuery('.tablinks.active:first');
jQuery('#save_tab_pos').val(selectedTemp.attr('id'));
let selectedSide = jQuery('.pp-tabcontent.active .pp-sidenav-tablinks.active:first');
if (selectedSide) {
jQuery("#save_sidenav_pos").val(selectedSide.attr('id'));
}
});
}
jQuery('#powerpress_create_subscribe_page').click( function(e) {
e.preventDefault();
powerpress_create_subscribe_page();
return false;
});
jQuery('#subscribe_page_link_id').change( function(e) {
if( jQuery('#subscribe_page_link_id').val().length > 0 )
jQuery('#subscribe_page_link_or').css('display', 'none');
else
jQuery('#subscribe_page_link_or').css('display', 'inline-block');
});
jQuery('.powerpress-parental-rating-tip').click( function(event) {
event.preventDefault();
jQuery('.powerpress-parental-rating-tip-p').css('display', 'none');
jQuery('#'+this.id +'_p').css('display', 'block');
});
jQuery('.activate-player').click( function(event) {
event.preventDefault();
var PlayerName = this.id.replace(/(activate_)(.*)$/, "$2");
if( !PlayerName )
return;
if(typeof jQuery.prop === 'function') {
jQuery('#player_'+PlayerName).prop('checked', true);
} else {
jQuery('#player_'+PlayerName).attr('checked', true);
}
jQuery(this).closest("form").submit();
});
jQuery('.goto-artwork-tab').click( function(event) {
event.preventDefault();
// TODO:
});
});
//-->
</script>
<?php
if (defined('WP_DEBUG') && WP_DEBUG) {
if (WP_DEBUG) {
wp_register_style('powerpress-admin-style', powerpress_get_root_url() . 'css/admin.css', array(), POWERPRESS_VERSION);
} else {
wp_register_style('powerpress-admin-style', powerpress_get_root_url() . 'css/admin.min.css', array(), POWERPRESS_VERSION);
}
} else {
wp_register_style('powerpress-admin-style', powerpress_get_root_url() . 'css/admin.min.css', array(), POWERPRESS_VERSION);
}
wp_enqueue_style( 'powerpress-admin-style' );
}
else if( $page_name == 'edit' || $page_name == 'edit-pages' ) // || $page_name == '' ) // we don't know the page, we better include our CSS just in case
{
?>
<style type="text/css">
.powerpress_podcast_box {
}
.powerpress_podcast_box label {
width: 120px;
font-weight: bold;
font-size: 110%;
display: inline;
position: absolute;
top: 0;
left: 0;
}
.powerpress_podcast_box .powerpress_row {
margin-top: 10px;
margin-bottom: 10px;
position: relative;
}
.powerpress_podcast_box .powerpress_row_content {
margin-left: 120px;
}
.powerpress_podcast_box .error,
.powerpress_podcast_box .warning,
.powerpress_podcast_box .success {
margin-top: 10px;
margin-bottom: 10px;
padding: 5px;
font-size: 12px;
border-width: 1px;
border-style: solid;
font-weight: bold;
text-align: center;
-moz-border-radius: 3px;
-khtml-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
position: relative;
}
.powerpress_podcast_box .warning {
color: #8a6d3b;
border-color: #faebcc;
background-color: #fcf8e3;
}
.powerpress_podcast_box .error {
color: #a94442;
border-color: #ebccd1;
background-color: #f2dede;
}
.powerpress_podcast_box .success {
color: #3c763d;
border-color: #d6e9c6;
background-color: #dff0d8;
}
.powerpress_podcast_box .success a.close {
position: absolute;
top: 2px;
right: 2px;
text-align: right;
color: #993366;
text-decoration: none;
}
.powerpress_podcast_box .updated {
margin-top: 10px;
margin-bottom: 10px;
padding: 5px;
font-size: 12px;
border-width: 1px;
border-style: solid;
font-weight: bold;
text-align: center;
}
.powerpress-hosting-buttons {
margin: 8px 0;
}
.powerpress-hosting-buttons a.powerpress-hosting-button {
background: #003366;
background-image:-moz-linear-gradient(0% 100% 90deg,#003366,#337EC9);
background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#003366),to(#337EC9));
border: 1px solid #003366;
border-radius:3px;
color: #CFEA93;
color: #FFFFFF;
cursor: pointer;
display: inline-block;
font-weight: bold;
height: 100%;
-moz-border-radius:3px;
padding: 5px 10px 4px 10px;
text-align: center;
text-decoration: none;
-webkit-border-radius:3px;
/* width: 100%; */
}
.powerpress-button {
border: 2px solid #ffffff;
color: white;
display: inline-block;
font-weight: normal;
height: 20px;
padding: 6px 10px;
text-align: center;
width: auto;
}
.powerpress-hosting-buttons a.powerpress-hosting-button {
position: relative;
padding-left: 30px;
}
.powerpress-hosting-button .powerpress-button-icon {
top: 2px;
left: 3px;
position: absolute;
}
</style>
<script language="javascript"><!--
g_powerpress_last_selected_channel = '';
function powerpress_check_url(url, DestDiv)
{
if( powerpress_check_url.arguments.length > 1 )
DestDiv = powerpress_check_url.arguments[1];
let Div = jQuery( '#'+DestDiv );
Div.addClass("pp-error");
Div.removeClass("updated");
let FeedSlug = DestDiv.replace("powerpress_warning_", "");
var validChars = ':0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-_.:';
for( var x = 0; x < url.length; x++ )
{
if( validChars.indexOf( url.charAt(x) ) == -1 )
{
Div.html('<?php echo esc_js( __('Media URL contains characters that may cause problems for some clients. For maximum compatibility, only use letters, numbers, dash - and underscore _ characters only.', 'powerpress')); ?>');
Div.css('display', 'block');
jQuery('#powerpress_fail_'+FeedSlug).css("display", 'inline-block');
jQuery( '#powerpress_url_show_'+FeedSlug ).css('background-color', '#eba2a2');
jQuery( '#powerpress_url_show_'+FeedSlug ).css('background-color');
return false;
}
if( x == 5 )
validChars = validChars.substring(1); // remove the colon, should no longer appear in URLs
}
Div.css('display', 'none');
return true;
}
function powerpress_get_media_info(FeedSlug)
{
if( jQuery('#powerpress_check_'+FeedSlug).css("display") != "none" )
return; // Another process is already running
jQuery('#powerpress_fail_'+FeedSlug).css("display", 'none');
jQuery( '#powerpress_success_'+FeedSlug ).css('display', 'none');
//jQuery( '#powerpress_warning_'+FeedSlug ).text('');
jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'none');
jQuery( '#powerpress_warning_'+FeedSlug ).addClass("pp-error");
jQuery( '#powerpress_warning_'+FeedSlug ).removeClass("updated");
var Value = jQuery('#powerpress_url_'+FeedSlug).val();
var Hosting = jQuery('#powerpress_hosting_'+FeedSlug).val();
var program_keyword = jQuery('#powerpress_program_keyword_'+FeedSlug).val();
if( Value )
{
if( powerpress_check_url(Value, 'powerpress_warning_'+FeedSlug ) )
{
jQuery('#powerpress_check_'+FeedSlug).css("display", 'inline-block');
jQuery.ajax( {
type: 'POST',
url: '<?php echo admin_url(); ?>admin-ajax.php',
data: { action: 'powerpress_media_info', media_url : Value, feed_slug : encodeURIComponent(FeedSlug), hosting: Hosting, program_keyword: program_keyword },
timeout: (30 * 1000),
success: function(response) {
response = response.trim();
// This logic will parse beyond warning messages generated by the server that we don't know about
var foundAt = response.indexOf('VERIFY-OK');
if( foundAt > 0 )
{
response = response.substring( foundAt );
}
var Parts = response.split("\n", 5);
var FinishFeedSlug = Parts[1];
jQuery('#powerpress_check_'+FeedSlug).css("display", 'none');
if( FeedSlug == FinishFeedSlug && Parts[0] == 'VERIFY-OK' )
{
var durationChecked = jQuery('#powerpress_set_duration_0_'+FeedSlug).attr('checked');
if(typeof jQuery.prop === 'function') {
durationChecked = jQuery('#powerpress_set_duration_0_'+FeedSlug).prop('checked');
}
jQuery('#powerpress_set_size_1_'+FeedSlug).attr('checked', true);
jQuery('#powerpress_size_'+FeedSlug).val( Parts[2] );
if( Parts[3] )
{
if(typeof jQuery.prop === 'function') {
jQuery('#powerpress_set_duration_1_'+FeedSlug).prop('checked', true);
} else {
jQuery('#powerpress_set_duration_1_'+FeedSlug).attr('checked', true);
}
var Duration = Parts[3].split(':');
jQuery('#powerpress_duration_hh_'+FeedSlug).val( Duration[0] );
jQuery('#powerpress_duration_mm_'+FeedSlug).val( Duration[1] );
jQuery('#powerpress_duration_ss_'+FeedSlug).val( Duration[2] );
}
else if( durationChecked )
{
if(typeof jQuery.prop === 'function') {
jQuery('#powerpress_set_duration_2_'+FeedSlug).prop('checked', true);
} else {
jQuery('#powerpress_set_duration_2_'+FeedSlug).attr('checked', true);
}
jQuery('#powerpress_duration_hh_'+FeedSlug).val( '' );
jQuery('#powerpress_duration_mm_'+FeedSlug).val( '' );
jQuery('#powerpress_duration_ss_'+FeedSlug).val( '' );
}
if( Parts.length > 4 && Parts[4] != '' )
{
jQuery( '#powerpress_warning_'+FeedSlug ).html( Parts[4] );
jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
jQuery( '#powerpress_warning_'+FeedSlug ).addClass("updated");
jQuery( '#powerpress_warning_'+FeedSlug ).removeClass("error");
<?php
if( defined('POWERPRESS_AJAX_DEBUG') )
echo "\t\t\t\tjQuery( '#powerpress_warning_'+FeedSlug ).append( '<br/>Complete Response: '+ response);\n";
?>
}
else
{
jQuery( '#powerpress_success_'+FeedSlug ).css('display', 'inline-block');
jQuery( '#powerpress_url_show_'+FeedSlug ).css('background-color', '#c1f2b8');
// setTimeout( function() { jQuery( '#powerpress_success_'+FeedSlug ).fadeOut(1000); }, 10000 );
<?php
if( defined('POWERPRESS_AJAX_DEBUG') )
echo "\t\t\t\tjQuery( '#powerpress_warning_'+FeedSlug ).append( '<br/>Complete Response: '+ response);\n";
?>
}
}
else
{
var Parts = response.split("\n", 5);
if( Parts.length > 4 )
{
var server_error = response.replace(/\n/g, "<br \/>");
jQuery( '#powerpress_warning_'+FeedSlug ).html( '<div style="text-align: left;">Server Error:</div><div style="text-align: left; font-weight: normal;">' + server_error +'<\/div>' );
}
else if( Parts[1] )
jQuery( '#powerpress_warning_'+FeedSlug ).html( Parts[1] );
else
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Unknown error occurred while checking Media URL.', 'powerpress'); ?>' );
<?php
if( defined('POWERPRESS_AJAX_DEBUG') )
echo "\t\t\t\tjQuery( '#powerpress_warning_'+FeedSlug ).append( '<br/>Complete Response: '+ response);\n";
?>
jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
jQuery('#powerpress_fail_'+FeedSlug).css("display", 'inline-block');
jQuery( '#powerpress_url_show_'+FeedSlug ).css('background-color', '#eba2a2');
}
},
error: function(objAJAXRequest, textStatus, errorThrown) {
var errorCode = objAJAXRequest.status;
var errorMsg = objAJAXRequest.statusText;
var responseClean = '';
if ( objAJAXRequest.responseText ) {
responseClean = objAJAXRequest.responseText.replace( /<.[^<>]*?>/g, '' );
}
jQuery('#powerpress_check_'+FeedSlug).css("display", 'none');
jQuery( '#powerpress_warning_'+FeedSlug ).css('display', 'block');
jQuery('#powerpress_fail_'+FeedSlug).css("display", 'inline-block');
jQuery( '#powerpress_url_show_'+FeedSlug ).css('background-color', '#eba2a2');
if( textStatus == 'timeout' ) {
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Operation timed out.', 'powerpress'); ?>' );
}
else if( textStatus == 'error' ) {
jQuery( '#powerpress_warning_'+FeedSlug ).html( errorCode +' - '+ errorThrown +'<br />');
}
else if( textStatus == 'abort' ) {
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Operation aborted.', 'powerpress'); ?>' );
}
else if( textStatus == 'parsererror' ) {
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('Parse error occurred.', 'powerpress'); ?>' );
}
else if( textStatus != null ) {
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '; ?>'+textStatus );
}
else if( errorMsg ) {
jQuery( '#powerpress_warning_'+FeedSlug ).text( +errorMsg );
}
else {
jQuery( '#powerpress_warning_'+FeedSlug ).text( '<?php echo __('AJAX Error', 'powerpress') .': '. __('Unknown', 'powerpress'); ?>' );
}
if( textStatus != 'error' && errorThrown ) { // If we have an error thrown, lets append it to the error message
jQuery('#powerpress_warning_'+FeedSlug).append('<br/>'+errorThrown);
}
<?php
if( defined('POWERPRESS_AJAX_DEBUG') ) {
echo "\t\t\tif( objAJAXRequest.responseText ) {\n";
echo "\t\t\t\tjQuery('#powerpress_warning_'+FeedSlug).text( jQuery('#powerpress_warning_'+FeedSlug).text() +' - Response: '+ objAJAXRequest.responseText);\n";
echo "\t\t\t}\n";
}
?>
}
});
}
}
}
function powerpress_update_for_video(media_url, FeedSlug)
{
if (media_url.search(/\.(mp4|m4v|ogg|ogv|webm)$/) > -1)
{
jQuery('#powerpress_ishd_'+ FeedSlug +'_span').css('display','inline');
}
else
{
jQuery('#powerpress_ishd_'+ FeedSlug +'_span').css('display','none');
jQuery('#powerpress_ishd_'+ FeedSlug +'_span').removeAttr('checked');
if(typeof jQuery.removeProp === 'function') {
jQuery('#powerpress_ishd_'+ FeedSlug +'_span').removeProp('checked');
}
}
if (media_url.search(/\.(mp4|m4v)$/) > -1)
{
jQuery('#powerpress_webm_'+ FeedSlug ).css('display', 'block');
}
else
{
jQuery('#powerpress_webm_'+ FeedSlug ).css('display', 'none');
}
}
function powerpress_remove_hosting(FeedSlug)
{
if( confirm('<?php echo __('Are you sure you want to remove this media file?', 'powerpress'); ?>') )
{
jQuery( '#powerpress_url_'+FeedSlug ).attr("readOnly", false);
jQuery( '#powerpress_url_'+FeedSlug ).val('');
jQuery( '#powerpress_hosting_'+FeedSlug ).val(0);
jQuery( '#powerpress_hosting_note_'+FeedSlug ).css('display', 'none');
powerpress_update_for_video('', FeedSlug);
}
}
var pp_upload_image_button_funct = false;
jQuery(document).ready(function($) {
jQuery('.powerpress-url').change(function() {
var FeedSlug = this.id.replace(/(powerpress_url_)(.*)$/, "$2");
if( !FeedSlug )
return;
var media_url = jQuery(this).val();
powerpress_check_url(media_url,'powerpress_warning_'+FeedSlug)
powerpress_update_for_video(media_url, FeedSlug);
});
jQuery('.powerpress-image-browser').click(function(e) {
e.preventDefault();
g_powerpress_last_selected_channel = this.id.replace(/(powerpress_image_browser_)(.*)$/, "$2");
tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true&amp;post_id=0', false);
if( pp_upload_image_button_funct == false )
pp_upload_image_button_funct = window.send_to_editor;
window.send_to_editor = function(html)
{
url = jQuery('img', html).attr('src');
if (url === undefined) {
url = jQuery(html).attr('src');
}
jQuery('#powerpress_image_'+g_powerpress_last_selected_channel).val( url );
g_powerpress_last_selected_channel = '';
tb_remove();
window.send_to_editor = pp_upload_image_button_funct;
pp_upload_image_button_funct = false;
}
return false;
});
jQuery('.powerpress-itunes-image-browser').click(function(e) {
e.preventDefault();
g_powerpress_last_selected_channel = this.id.replace(/(powerpress_itunes_image_browser_)(.*)$/, "$2");
tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true&amp;post_id=0', false);
if( pp_upload_image_button_funct == false )
pp_upload_image_button_funct = window.send_to_editor;
window.send_to_editor = function(html)
{
url = jQuery('img', html).attr('src');
if (url === undefined) {
url = jQuery(html).attr('src');
}
jQuery('#powerpress_itunes_image_'+g_powerpress_last_selected_channel).val( url );
g_powerpress_last_selected_channel = '';
tb_remove();
window.send_to_editor = pp_upload_image_button_funct;
pp_upload_image_button_funct = false;
}
return false;
});
jQuery('#insert-media-button').click( function(e) {
if( pp_upload_image_button_funct != false )
{
window.send_to_editor = pp_upload_image_button_funct;
pp_upload_image_button_funct = false;
}
});
jQuery('.powerpress-embed').change( function() {
// if there is a value in the embed box, but there is no value in the url box, then we need to display a warning...
var FeedSlug = this.id.replace(/(powerpress_embed_)(.*)$/, "$2");
if( !FeedSlug )
return;
var MediaURL = jQuery('#powerpress_url_'+FeedSlug).val();
if( !MediaURL )
{
jQuery('#powerpress_warning_'+FeedSlug ).text( '<?php echo __('You must enter a Media URL in order to save Media Embed.', 'powerpress'); ?>');
jQuery('#powerpress_warning_'+FeedSlug ).css('display', 'block');
jQuery('#powerpress_url_'+FeedSlug).focus();
}
});
});
function powerpress_send_to_poster_image(url)
{
if( g_powerpress_last_selected_channel )
{
jQuery('#powerpress_image_'+g_powerpress_last_selected_channel).val( url );
g_powerpress_last_selected_channel = '';
}
tb_remove();
}
//-->
</script>
<?php
}
else if( $page_name == 'index' )
{
// Print this line for debugging when looking for other pages to include header data for
//echo "<!-- WP Page Name: $page_name; Hook Suffix: $hook_suffix -->\n";
if (defined('WP_DEBUG') && WP_DEBUG) {
if (WP_DEBUG) {
wp_register_style('powerpress-dashboard', powerpress_get_root_url() . 'css/dashboard.css', array(), POWERPRESS_VERSION);
} else {
wp_register_style('powerpress-dashboard', powerpress_get_root_url() . 'css/dashboard.min.css', array(), POWERPRESS_VERSION);
}
} else {
wp_register_style('powerpress-dashboard', powerpress_get_root_url() . 'css/dashboard.min.css', array(), POWERPRESS_VERSION);
}
wp_enqueue_style( 'powerpress-dashboard' );
}
}
add_action('admin_head', 'powerpress_admin_head');
function powerpress_media_info_ajax()
{
$feed_slug = $_POST['feed_slug'];
$media_url = $_POST['media_url'];
$hosting = $_POST['hosting'];
$size = 0;
$duration = '';
$GeneralSettings = get_option('powerpress_general');
$program_keyword = false;
if( !empty($_POST['program_keyword']) ) {
$program_keyword = $_POST['program_keyword'];
}
if( !empty($GeneralSettings['blubrry_program_keyword']) ) {
$program_keyword = $GeneralSettings['blubrry_program_keyword'];
}
if( strpos($media_url, 'http://') !== 0 && strpos($media_url, 'https://') !== 0 && $hosting != 1 ) // If the url entered does not start with a http:// or https://
{
$media_url = rtrim($GeneralSettings['default_url'], '/') .'/'. $media_url;
}
$ContentType = false;
$UrlParts = parse_url($media_url);
if( !empty($UrlParts['path']) )
{
// using functions that already exist in WordPress when possible:
$ContentType = powerpress_get_contenttype($UrlParts['path'], false);
}
if( !$ContentType )
{
$error = __('Unable to determine content type of media (e.g. audio/mpeg). Verify file extension is correct and try again.', 'powerpress');
echo "$feed_slug\n";
echo $error;
exit;
}
// Get media info here...
if( $hosting )
$MediaInfo = powerpress_get_media_info($media_url, $program_keyword );
else
$MediaInfo = powerpress_get_media_info_local($media_url, '', 0, '', true);
if( !isset($MediaInfo['error']) && !empty($MediaInfo['length']) )
{
//substr('', 'abc');
echo "VERIFY-OK\n";
echo "$feed_slug\n"; // swap positions
echo "{$MediaInfo['length']}\n";
echo powerpress_readable_duration($MediaInfo['duration'], true) ."\n";
if( isset($MediaInfo['warnings']) )
echo $MediaInfo['warnings'];
echo "\n"; // make sure this line is ended
exit;
}
echo "$feed_slug\n";
if( $MediaInfo['error'] ) {
echo $MediaInfo['error'];
if( preg_match('/^https?\:\/\//i', $media_url) )
echo '<br />'. sprintf('Test: %s', "<a href=\"$media_url\" target=\"_blank\">{$media_url}</a>");
} else {
echo __('Unknown error occurred looking up media information.', 'powerpress');
}
echo "\n";
exit;
}
add_action('wp_ajax_powerpress_media_info', 'powerpress_media_info_ajax');
function powerpress_metamarks_addrow_ajax()
{
require_once(POWERPRESS_ABSPATH .'/views/episode-box.php');
powerpress_metamarks_addrow();
}
add_action('wp_ajax_powerpress_metamarks_addrow', 'powerpress_metamarks_addrow_ajax');
function powerpress_dashboard_dismiss_ajax()
{
require_once(POWERPRESS_ABSPATH .'/powerpressadmin-dashboard.php');
powerpress_dashboard_dismiss();
}
add_action('wp_ajax_powerpress_dashboard_dismiss', 'powerpress_dashboard_dismiss_ajax');
function powerpress_create_subscribe_page()
{
$ajax = ( defined('DOING_AJAX') && DOING_AJAX ); // Now we can use this function without an ajax call! :)
$template_url = 'http://plugins.svn.wordpress.org/powerpress/assets/subscribe_template/';
$languages = array();
$language = get_option( 'WPLANG' );
if( !empty($language) ) {
switch( $language )
{
// Template translated for the following languages
case 'en_AU':
case 'en_CA':
case 'en_GB':
case 'en_NZ':
case 'en_ZA': {
$languages[] = $language; // Placed at the top of array
}; break;
}
}
$languages[] = 'en_US'; // fallback to the en_US version
$template_content = false;
foreach( $languages as $index => $lang )
{
$template_content = powerpress_remote_fopen( $template_url . $lang . '.txt' );
if( empty($template_content) ) { // Lets force cURL and see if that helps...
$template_content = powerpress_remote_fopen($template_url . $lang . '.txt', false, array(), 15, false, true);
}
if( !empty($template_content) ) // We found a translation!
break;
}
if( empty($template_content) )
{
if( $ajax )
{
echo "PAGE-ERROR\n";
echo __('Error occurred downloading subscribe page template.', 'powerpress');
exit;
}
return false;
}
// Create page here...
global $user_ID;
$page['post_type'] = 'page';
$page['post_content'] = $template_content;
$page['post_parent'] = 0;
$page['post_author'] = $user_ID;
$page['post_status'] = 'publish';
$page['post_title'] = __('Subscribe to Podcast', 'powerpress');
$pageid = wp_insert_post ($page);
if ($pageid == 0)
{
if( $ajax ) {
echo "PAGE-ERROR\n";
echo __('Error occurred creating subscribe page.', 'powerpress');
exit;
}
return false;
}
// Save to settings...
$Save = array('subscribe_page_link_id'=>$pageid );
powerpress_save_settings($Save, 'powerpress_feed_podcast');
// send back the page URL and Page ID
if( $ajax ) {
echo "PAGE-OK\n";
echo "$pageid\n";
echo get_page_link($pageid). "\n";
echo $page['post_title']. "\n";
exit;
}
return true;
}
add_action('wp_ajax_powerpress_create_subscribe_page', 'powerpress_create_subscribe_page');
function powerpress_cat_row_actions($actions, $object)
{
$General = get_option('powerpress_general');
// New 3.0+ tag in taxonomy check
if( !empty($General['tag_casting']) && !empty($object->taxonomy) && $object->taxonomy == 'tag' )
{
// TODO:
}
// Otherwise from here on in, we're working with a category or nothing at all.
if( empty($General['cat_casting']) )
return $actions;
// 3.0 category in taxonomy check
if( !empty($object->taxonomy) && $object->taxonomy != 'category' )
return $actions;
$cat_id = (isset($object->term_id)?$object->term_id : $object->cat_ID);
if( empty($cat_id) )
return $actions;
if( isset($General['custom_cat_feeds']) && is_array($General['custom_cat_feeds']) && in_array($cat_id, $General['custom_cat_feeds']) )
{
$edit_link = admin_url('admin.php?page=powerpress/powerpressadmin_categoryfeeds.php&amp;from_categories=1&amp;action=powerpress-editcategoryfeed&amp;cat=') . $cat_id;
$actions['powerpress'] = '<a href="' . $edit_link . '" title="'. __('Edit Blubrry PowerPress Podcast Settings', 'powerpress') .'">' . str_replace(' ', '&nbsp;', __('Podcast Settings', 'powerpress')) . '</a>';
}
else
{
$edit_link = admin_url() . wp_nonce_url("admin.php?page=powerpress/powerpressadmin_categoryfeeds.php&amp;from_categories=1&amp;action=powerpress-addcategoryfeed&amp;taxonomy=category&amp;cat=".$cat_id, 'powerpress-add-taxonomy-feed');
$actions['powerpress'] = '<a href="' . $edit_link . '" title="'. __('Add Blubrry PowerPress Podcasting Settings', 'powerpress') .'">' . str_replace(' ', '&nbsp;', __('Add Podcasting', 'powerpress')) . '</a>';
}
return $actions;
}
add_filter('cat_row_actions', 'powerpress_cat_row_actions', 1,2);
add_filter('tag_row_actions', 'powerpress_cat_row_actions', 1,2);
// Handles category and all other taxonomy terms
function powerpress_delete_term($term_id, $tt_id, $taxonomy)
{
if( $taxonomy == 'category' )
{
$Settings = get_option('powerpress_general');
if( isset($Settings['custom_cat_feeds']) )
{
$key = array_search($term_id, $Settings['custom_cat_feeds']);
if( $key !== false )
{
unset( $Settings['custom_cat_feeds'][$key] );
powerpress_save_settings($Settings); // Delete the feed from the general settings
}
}
delete_option('powerpress_cat_feed_'.$term_id); // Delete the actual feed settings
}
else // All other taxonomies handled here
{
$Settings = get_option('powerpress_taxonomy_podcasting');
if( isset($Settings[ $tt_id ]) )
{
unset( $Settings[ $tt_id ] );
powerpress_save_settings($Settings); // Delete the feed from the general settings
}
delete_option('powerpress_taxonomy_'.$tt_id); // Delete the actual feed settings
}
}
add_action('delete_term', 'powerpress_delete_term', 10, 3);
function powerpress_edit_category_form($cat)
{
if( empty($cat) || !isset( $cat->cat_ID ) )
{
?>
<div>
<?php
$General = get_option('powerpress_general');
if( !isset($General['cat_casting']) || $General['cat_casting'] == 0 )
{
$enable_link = admin_url() . wp_nonce_url('edit-tags.php?taxonomy=category&action=powerpress-enable-categorypodcasting', 'powerpress-enable-categorypodcasting');
?>
<h2><?php echo __('PowerPress Category Podcasting'); ?></h2>
<p><a href="<?php echo $enable_link; ?>" title="<?php echo __('Enable Category Podcasting', 'powerpress'); ?>"><?php echo __('Enable Category Podcasting', 'powerpress'); ?></a> <?php echo __('if you would like to add specific podcasting settings to your blog categories.', 'powerpress'); ?></p>
<?php
}
else
{
?>
<h2><?php echo __('PowerPress Category Podcasting', 'powerpress'); ?></h2>
<p><?php echo __('PowerPress Category Podcasting is enabled. Select \'Add Podcasting\' to add podcasting settings. Select <u>Podcast Settings</u> to edit existing podcast settings.', 'powerpress'); ?></p>
<?php
}
?>
</div>
<?php
}
}
add_action('edit_category_form', 'powerpress_edit_category_form');
// Admin page, header
function powerpress_admin_page_header($page=false, $nonce_field = 'powerpress-edit', $page_type='')
{
if( !$page )
$page = 'powerpressadmin_basic';
?>
<div class="wrap" id="powerpress_settings">
<?php
if( $nonce_field )
{
?>
<form enctype="multipart/form-data" method="post" action="<?php echo admin_url( 'admin.php?page='. urlencode($page) ) ?>">
<?php
wp_nonce_field($nonce_field);
}
if( !empty($page_type) )
echo '<input type="hidden" name="page_type" value="'. $page_type .'" />';
powerpress_page_message_print();
}
// Admin page, footer
function powerpress_admin_page_footer($SaveButton=true, $form=true)
{
if( $SaveButton ) { ?>
<h2 style="margin-bottom: 0;"><b><?php echo __('Looking for Support, Consulting, or Custom Development?','powerpress'); ?></b></h2>
<p class="submit" style="margin-top: 0; margin-left: 2em;">
<?php echo __('Blubrry offers a variety of options, free and paid, to assist you with your podcasting and Internet media needs. Whether you need your theme customized for podcasting or you want consulting on what video format is best for your audience, we have the staff and knowledge to assist.', 'powerpress'); ?>
<br />
<a title="<?php echo esc_attr(__('Blubrry Services Info', 'powerpress')); ?>"
href="http://create.blubrry.com/resources/podcast-media-hosting/"
target="_blank"><?php echo __('Learn more about Blubrry Support Options', 'powerpress'); ?></a>
</p>
<p class="submit">
<strong><i><?php echo powerpress_review_message(); ?></i></strong>
</p>
<?php } ?>
<p style="font-size: 85%; text-align: center; padding-bottom: 35px;">
<a href="http://create.blubrry.com/resources/powerpress/" title="Blubrry PowerPress" target="_blank"><?php echo __('Blubrry PowerPress', 'powerpress'); ?></a> <?php echo POWERPRESS_VERSION; ?> &#8212;
<a href="http://create.blubrry.com/resources/podcast-media-hosting/" target="_blank" title="<?php echo __('Blubrry PowerPress and related Resources', 'powerpress'); ?>"><?php echo __('Resources', 'powerpress'); ?></a> |
<a href="http://create.blubrry.com/support/" target="_blank" title="<?php echo __('Blubrry Support', 'powerpress'); ?>"><?php echo __('Support', 'powerpress'); ?></a>
</p>
<?php if( $form ) { ?>
</form><?php } ?>
</div>
<?php
}
// Admin page, footer
function powerpress_settings_save_button($blue = false)
{
if ($blue) {
$class = "powerpress_save_button_other";
} else {
$class = "powerpress_save_button";
}?>
<div class="pp-save-button-container">
<input type="submit" name="Submit" class="<?php echo $class; ?>" value="<?php echo __('Save Changes', 'powerpress') ?>" />
</div>
<?php
}
// Admin page, advanced mode: basic settings
function powerpress_admin_page_basic()
{
powerpress_admin_page_header();
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-basic.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-editfeed.php');
powerpress_admin_basic();
powerpress_admin_page_footer(true);
}
// Admin page, advanced mode: basic settings
function powerpress_admin_page_players()
{
powerpress_admin_page_header('powerpress/powerpressadmin_player.php');
require_once( POWERPRESS_ABSPATH.'/powerpressadmin-player-page.php');
powerpress_admin_players('audio');
powerpress_settings_save_button(true);
powerpress_admin_page_footer(true);
}
function powerpress_admin_page_videoplayers()
{
powerpress_admin_page_header('powerpress/powerpressadmin_videoplayer.php');
require_once( POWERPRESS_ABSPATH.'/powerpressadmin-player-page.php');
powerpress_admin_players('video');
powerpress_settings_save_button(true);
powerpress_admin_page_footer(true);
}
function powerpress_admin_page_mobileplayers()
{
powerpress_admin_page_header('powerpress/powerpressadmin_mobileplayer.php');
require_once( POWERPRESS_ABSPATH.'/powerpressadmin-player-page.php');
powerpress_admin_players('mobile');
powerpress_settings_save_button(true);
powerpress_admin_page_footer(true);
}
// Admin page, advanced mode: feed settings
function powerpress_admin_page_podpress_stats()
{
powerpress_admin_page_header('powerpress/powerpressadmin_podpress-stats.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-podpress-stats.php');
powerpress_admin_podpress_stats();
powerpress_admin_page_footer(false);
}
// Admin page, advanced mode: feed settings
function powerpress_admin_page_tags()
{
powerpress_admin_page_header('powerpress/powerpressadmin_tags.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-tags.php');
powerpress_admin_tags();
powerpress_settings_save_button(true);
powerpress_admin_page_footer();
}
// Migrate
function powerpress_admin_page_migrate()
{
powerpress_admin_page_header('powerpress/powerpressadmin_migrate.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-migrate.php');
powerpress_admin_migrate();
powerpress_admin_page_footer(false);
}
function powerpress_admin_page_import_feed()
{
powerpress_admin_page_header('powerpress/powerpressadmin_import_feed.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-import-feed.php');
powerpress_admin_import_feed();
powerpress_admin_page_footer(false);
}
function powerpress_admin_page_onboarding() {
require_once( POWERPRESS_ABSPATH .'/class.powerpress_onboarding.php');
$onboardinClass = new PowerpressOnboarding();
$onboardinClass->router($_GET);
powerpress_admin_page_footer(false);
}
// Admin page, advanced mode: custom feeds
function powerpress_admin_page_customfeeds()
{
$Action = (!empty($_GET['action'])? $_GET['action'] : false);
switch( $Action )
{
case 'powerpress-editfeed' : {
powerpress_admin_page_header('powerpress/powerpressadmin_customfeeds.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-editfeed.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-basic.php');
$feed_slug = esc_attr($_GET['feed_slug']);
powerpress_admin_editfeed('channel', $feed_slug);
powerpress_admin_page_footer();
}; break;
default: {
powerpress_admin_page_header('powerpress/powerpressadmin_customfeeds.php', 'powerpress-add-feed');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-customfeeds.php');
powerpress_admin_customfeeds();
powerpress_admin_page_footer(false);
};
}
}
// Category feeds
function powerpress_admin_page_categoryfeeds()
{
$Action = (!empty($_GET['action'])? $_GET['action'] : false);
switch( $Action )
{
case 'powerpress-editcategoryfeed' : {
powerpress_admin_page_header('powerpress/powerpressadmin_categoryfeeds.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-editfeed.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-basic.php');
powerpress_admin_editfeed('category', intval($_GET['cat']) );
powerpress_admin_page_footer();
}; break;
default: {
powerpress_admin_page_header('powerpress/powerpressadmin_categoryfeeds.php', 'powerpress-add-categoryfeed');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-categoryfeeds.php');
powerpress_admin_categoryfeeds();
powerpress_admin_page_footer(false);
};
}
}
// Taxonomy Feeds
function powerpress_admin_page_taxonomyfeeds()
{
$Action = (!empty($_GET['action'])? $_GET['action'] : false);
switch( $Action )
{
case 'powerpress-edittaxonomyfeed' : {
if( !empty($_GET['ttid']) )
{
powerpress_admin_page_header('powerpress/powerpressadmin_taxonomyfeeds.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-editfeed.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-basic.php');
powerpress_admin_editfeed('ttid', intval($_GET['ttid']));
powerpress_admin_page_footer();
}
}; break;
default: {
powerpress_admin_page_header('powerpress/powerpressadmin_taxonomyfeeds.php', 'powerpress-add-taxonomyfeed');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-taxonomyfeeds.php');
powerpress_admin_taxonomyfeeds();
powerpress_admin_page_footer(false);
};
}
}
// Custom Post Type Feeds
function powerpress_admin_page_posttypefeeds()
{
$Action = (!empty($_GET['action'])? $_GET['action'] : false);
switch( $Action )
{
case 'powerpress-editposttypefeed' : {
if( !empty($_GET['podcast_post_type']) && !empty($_GET['feed_slug']) ) {
powerpress_admin_page_header('powerpress/powerpressadmin_posttypefeeds.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-editfeed.php');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-basic.php');
$post_type = esc_attr( $_GET['podcast_post_type'] );
$feed_slug = esc_attr( $_GET['feed_slug'] );
powerpress_admin_editfeed('post_type', $post_type, $feed_slug);
powerpress_admin_page_footer();
}
} break;
default: {
powerpress_admin_page_header('powerpress/powerpressadmin_posttypefeeds.php', 'powerpress-add-posttypefeed');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-posttypefeeds.php');
powerpress_admin_posttypefeeds();
powerpress_admin_page_footer(false);
};
}
}
// Admin page, advanced mode: tools
function powerpress_admin_page_tools()
{
$Action = (!empty($_GET['action'])? $_GET['action'] : false);
switch( $Action )
{
case 'powerpress-podpress-epiosdes' : {
powerpress_admin_page_header('powerpress/powerpressadmin_tools.php', 'powerpress-import-podpress');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-podpress.php');
powerpress_admin_podpress();
powerpress_admin_page_footer(false);
}; break;
case 'powerpress-mt-epiosdes': {
powerpress_admin_page_header('powerpress/powerpressadmin_tools.php', 'powerpress-import-mt');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-mt.php');
powerpress_admin_mt();
powerpress_admin_page_footer(false);
}; break;
case 'powerpress-ping-sites': {
powerpress_admin_page_header('powerpress/powerpressadmin_tools.php', 'powerpress-ping-sites');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-ping-sites.php');
powerpress_admin_ping_sites();
powerpress_admin_page_footer(false);
}; break;
case 'powerpress-find-replace': {
powerpress_admin_page_header('powerpress/powerpressadmin_tools.php', 'powerpress-find-replace');
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-find-replace.php');
powerpress_admin_find_replace();
powerpress_admin_page_footer(false);
}; break;
case 'powerpress-diagnostics': {
powerpress_admin_page_header('powerpress/powerpressadmin_tools.php', false);
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-diagnostics.php');
powerpressadmin_diagnostics();
powerpress_admin_page_footer(false, false);
}; break;
default: {
powerpress_admin_page_header('powerpress/powerpressadmin_tools.php', false);
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-tools.php');
powerpress_admin_tools();
powerpress_admin_page_footer(false, false);
};
}
}
function powerpress_podpress_episodes_exist()
{
global $wpdb;
$query = "SELECT post_id ";
$query .= "FROM {$wpdb->postmeta} ";
$query .= "WHERE meta_key LIKE '%podPressMedia' ";
$query .= "LIMIT 0, 1";
$results = $wpdb->get_results($query, ARRAY_A);
if( count($results) )
return true;
return false;
}
function powerpress_podpress_stats_exist()
{
global $wpdb;
// First, see if the table exists...
$query = "SHOW TABLES LIKE '{$wpdb->prefix}podpress_statcounts'";
$wpdb->hide_errors();
$results = $wpdb->get_results($query, ARRAY_A);
$wpdb->show_errors();
if( count($results) == 0 )
return false;
// Now see if a record exists...
$query = "SELECT `media` ";
$query .= "FROM {$wpdb->prefix}podpress_statcounts ";
$query .= "LIMIT 1";
$results = $wpdb->get_results($query, ARRAY_A);
if( count($results) )
return true;
return false;
}
/*
// Helper functions:
*/
function powerpress_remote_fopen($url, $basic_auth = false, $post_args = array(), $timeout = 15, $custom_request = false, $force_curl=false )
{
unset($GLOBALS['g_powerpress_remote_error']);
unset($GLOBALS['g_powerpress_remote_errorno']);
if( ($force_curl || (defined('POWERPRESS_CURL') && POWERPRESS_CURL) ) && function_exists( 'curl_init' ) )
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
if ( version_compare( PHP_VERSION, '5.3.0') < 0 && !ini_get('safe_mode') )
{
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // Follow location redirection
curl_setopt($curl, CURLOPT_MAXREDIRS, 12); // Location redirection limit
}
else if ( !ini_get('open_basedir') )
{
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // Follow location redirection
curl_setopt($curl, CURLOPT_MAXREDIRS, 12); // Location redirection limit
}
else
{
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_MAXREDIRS, 0 );
}
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2 ); // Connect time out
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // The maximum number of seconds to execute.
curl_setopt($curl, CURLOPT_USERAGENT, 'Blubrry PowerPress/'.POWERPRESS_VERSION);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
if( preg_match('/^https:\/\//i', $url) != 0 )
{
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true );
curl_setopt($curl, CURLOPT_CAINFO, ABSPATH . WPINC . '/certificates/ca-bundle.crt');
}
// HTTP Authentication
if( $basic_auth )
{
curl_setopt( $curl, CURLOPT_HTTPHEADER, array('Authorization: Basic '.$basic_auth) );
}
// HTTP Post:
if( count($post_args) > 0 )
{
$post_query = '';
foreach( $post_args as $name => $value )
{
if( $post_query != '' )
$post_query .= '&';
$post_query .= $name;
$post_query .= '=';
$post_query .= urlencode($value);
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_query);
}
else if( $custom_request )
{
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $custom_request);
}
$content = curl_exec($curl);
$error = curl_errno($curl);
$error_msg = curl_error($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if( $error )
{
$GLOBALS['g_powerpress_remote_error'] = $error_msg;
$GLOBALS['g_powerpress_remote_errorno'] = $http_code;
//echo 'error: '.$content;
$decoded = json_decode($content);
if( !empty($decoded) )
return $content; // We can still return the error from the server at least
return false;
}
else if( $http_code > 399 )
{
//echo '40x';
$GLOBALS['g_powerpress_remote_error'] = "HTTP $http_code";
$GLOBALS['g_powerpress_remote_errorno'] = $http_code;
switch( $http_code )
{
case 400: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Bad Request", 'powerpress'); break;
case 401: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Unauthorized (Check that your username and password are correct)", 'powerpress'); break;
case 402: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Payment Required", 'powerpress'); break;
case 403: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Forbidden", 'powerpress'); break;
case 404: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Not Found", 'powerpress'); break;
}
$decoded = json_decode($content);
if( !empty($decoded) )
return $content; // We can still return the error from the server at least
return false;
}
return $content;
}
if( $force_curl )
return false; // Do not continue, we wanted to use cURL
$options = array();
$options['timeout'] = $timeout;
$options['user-agent'] = 'Blubrry PowerPress/'.POWERPRESS_VERSION;
if( $basic_auth )
$options['headers']['Authorization'] = 'Basic '.$basic_auth;
if( count($post_args) > 0 )
{
$options['body'] = $post_args;
$response = wp_remote_post( $url, $options );
}
else if($custom_request) {
$options['method'] = $custom_request;
$response = wp_remote_request($url,$options);
}
else
{
$response = wp_remote_get( $url, $options );
}
if ( is_wp_error( $response ) )
{
$GLOBALS['g_powerpress_remote_errorno'] = $response->get_error_code();
$GLOBALS['g_powerpress_remote_error'] = $response->get_error_message();
return false;
}
if( isset($response['response']['code']) && $response['response']['code'] > 399 )
{
$GLOBALS['g_powerpress_remote_error'] = "HTTP ".$response['response']['code'];
$GLOBALS['g_powerpress_remote_errorno'] = $response['response']['code'];
switch( $response['response']['code'] )
{
case 400: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Bad Request", 'powerpress'); break;
case 401: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Unauthorized (Check that your username and password are correct)", 'powerpress'); break;
case 402: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Payment Required", 'powerpress'); break;
case 403: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Forbidden", 'powerpress'); break;
case 404: $GLOBALS['g_powerpress_remote_error'] .= ' '. __("Not Found", 'powerpress'); break;
default: $GLOBALS['g_powerpress_remote_error'] .= ' '.$response['response']['message'];
}
}
return $response['body'];
}
// Process any episodes for the specified post that have been marked for hosting and that do not have full URLs...
function powerpress_process_hosting($post_ID, $post_title)
{
$errors = array();
$Settings = get_option('powerpress_general');
$CustomFeeds = array();
if( !empty($Settings['custom_feeds']) && is_array($Settings['custom_feeds']) )
$CustomFeeds = $Settings['custom_feeds'];
if( !isset($CustomFeeds['podcast']) )
$CustomFeeds['podcast'] = 'podcast';
if( !empty($Settings['posttype_podcasting']) )
{
$FeedSlugPostTypesArray = get_option('powerpress_posttype-podcasting');
foreach( $FeedSlugPostTypesArray as $feed_slug => $null )
{
if( empty($CustomFeeds[$feed_slug]) )
$CustomFeeds[$feed_slug] = $feed_slug;
}
}
foreach( $CustomFeeds as $feed_slug => $null )
{
$field = 'enclosure';
if( $feed_slug != 'podcast' )
$field = '_'.$feed_slug.':enclosure';
$EnclosureData = get_post_meta($post_ID, $field, true);
if( $EnclosureData )
{
/*
// Old Logic, replaced with below $MetaParts so no notices appear
list($EnclosureURL, $EnclosureSize, $EnclosureType, $Serialized) = explode("\n", $EnclosureData, 4);
$EnclosureURL = trim($EnclosureURL);
$EnclosureType = trim($EnclosureType);
$EnclosureSize = trim($EnclosureSize);
$EpisodeData = unserialize($Serialized);
*/
$MetaParts = explode("\n", $EnclosureData, 4);
$EnclosureURL = '';
if( count($MetaParts) > 0 )
$EnclosureURL = trim($MetaParts[0]);
$EnclosureSize = '';
if( count($MetaParts) > 1 )
$EnclosureSize = trim($MetaParts[1]);
$EnclosureType = '';
if( count($MetaParts) > 2 )
$EnclosureType = trim($MetaParts[2]);
$EpisodeData = false;
if( count($MetaParts) > 3 )
$EpisodeData = unserialize($MetaParts[3]);
if( $EnclosureType == '' )
{
$error = __('Blubrry Hosting Error (publish)', 'powerpress') .': '. __('Error occurred obtaining enclosure content type.', 'powerpress');
powerpress_add_error($error);
}
if( strtolower(substr($EnclosureURL, 0, 7) ) != 'http://' && $EpisodeData && !empty($EpisodeData['hosting']) )
{
$program_keyword = (!empty($EpisodeData['program_keyword']) ? $EpisodeData['program_keyword'] : $Settings['blubrry_program_keyword'] );
$error = false;
// First we need to get media information...
// If we are working with an Mp3, we can write id3 tags and get the info returned...
if( ($EnclosureType == 'audio/mpg' || $EnclosureType == 'audio/mpeg') && !empty($Settings['write_tags']) )
{
$results = powerpress_write_tags($EnclosureURL, $post_title, $program_keyword);
}
else
{
$results = powerpress_get_media_info($EnclosureURL, $program_keyword);
}
if( is_array($results) && !isset($results['error']) )
{
if( isset($results['duration']) && $results['duration'] )
$EpisodeData['duration'] = $results['duration'];
if( isset($results['content-type']) && $results['content-type'] )
$EnclosureType = $results['content-type'];
if( isset($results['length']) && $results['length'] )
$EnclosureSize = $results['length'];
}
else if( isset($results['error']) )
{
$error = __('Blubrry Hosting Error (media info)', 'powerpress') .': '. $results['error'];
powerpress_add_error($error);
}
else
{
$error = sprintf( __('Blubrry Hosting Error (media info): An error occurred publishing media %s.', 'powerpress'), $EnclosureURL);
$error .= ' ';
$error .= '<a href="#" onclick="document.getElementById(\'powerpress_error_'. $rand_id .'\');this.style.display=\'none\';return false;">'. __('Display Error', 'powerpress') .'</a>';
$error .= '<div id="powerpress_error_'. $rand_id .'" style="display: none;">'. $json_data .'</div>';
powerpress_add_error($error);
}
if( $error == false )
{
// Extend the max execution time here
set_time_limit(60*20); // give it 20 minutes just in case
$json_data = false;
$api_url_array = powerpress_get_api_array();
foreach( $api_url_array as $index => $api_url )
{
$req_url = sprintf('%s/media/%s/%s?format=json&publish=true', rtrim($api_url, '/'), urlencode($program_keyword), urlencode($EnclosureURL) );
$req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:'');
$req_url .= (defined('POWERPRESS_PUBLISH_PROTECTED')?'&protected=true':'');
$json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], array(), 60*30); // give this up to 30 minutes, though 3 seocnds to 20 seconds is all one should need.
if( !$json_data && $api_url == 'https://api.blubrry.com/' ) { // Lets force cURL and see if that helps...
$json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], array(), 60*30, false, true);
}
if( $json_data != false )
break;
}
$results = powerpress_json_decode($json_data);
if( is_array($results) && !isset($results['error']) )
{
$EnclosureURL = $results['media_url'];
if (strtolower(substr($results['media_url'], 0, 4) ) != 'http') {
$error = __('Blubrry Hosting Error (publish): Please re-upload media file and re-publish post', 'powerpress');
powerpress_add_error($error);
}
unset($EpisodeData['hosting']); // we need to remove the flag since we're now using the correct FULL url
$EnclosureData = $EnclosureURL . "\n" . $EnclosureSize . "\n". $EnclosureType . "\n" . serialize($EpisodeData);
update_post_meta($post_ID, $field, $EnclosureData);
}
else if( isset($results['error']) )
{
$error = __('Blubrry Hosting Error (publish)', 'powerpress') .': '. $results['error'];
powerpress_add_error($error);
}
else
{
$rand_id = rand(100,2000);
$error = __('Blubrry Hosting Error (publish)', 'powerpress') .': '. sprintf( __('An error occurred publishing media \'%s\'.','powerpress'), $EnclosureURL);
$error .= ' <a href="#" onclick="document.getElementById(\'powerpress_error_'. $rand_id .'\').style.display=\'block\';this.style.display=\'none\';return false;">'. __('Display Error', 'powerpress') .'</a>';
$error .= '<div id="powerpress_error_'. $rand_id .'" style="display: none;">';
if( !empty($json_data) )
$error .= $json_data;
else if( !empty($GLOBALS['g_powerpress_remote_error']) )
$error .= htmlspecialchars($GLOBALS['g_powerpress_remote_error']);
else
$error .= __('Unknown error ocurred.', 'powerpress');
$error .= '</div>';
powerpress_add_error($error);
}
}
}
}
}
}
function powerpress_json_decode($value)
{
return json_decode($value, true);
}
// Import podpress settings
function powerpress_admin_import_podpress_settings()
{
// First pull in the Podpress settings
$PodpressData = get_option('podPress_config');
if( !$PodpressData )
return false;
$General = get_option('powerpress_general');
if( !$General)
$General = array();
$General['process_podpress'] = 1;
$General['display_player'] = 1;
$General['player_function'] = 1;
$General['podcast_link'] = 1;
// Lets try to copy settings from podpress
$General['default_url'] = $PodpressData['mediaWebPath'];
if( substr($General['default_url'], 0, -1) != '/' )
$General['default_url'] .= '/'; // Add the trailing slash, donno it's not there...
// Insert the blubrry redirect
if( isset($PodpressData['statBluBrryProgramKeyword']) && strlen($PodpressData['statBluBrryProgramKeyword']) > 2 )
{
$General['redirect1'] = 'http://media.blubrry.com/'.$PodpressData['statBluBrryProgramKeyword'].'/';
}
// Insert the Podtrac redirect
if( $PodpressData['enable3rdPartyStats'] == 'PodTrac' )
{
if( $General['redirect1'] )
$General['redirect2'] = 'http://www.podtrac.com/pts/redirect.mp3/';
else
$General['redirect1'] = 'http://www.podtrac.com/pts/redirect.mp3/';
}
if( $PodpressData['contentDownload'] == 'enabled' )
$General['podcast_link'] = 1;
else
$General['podcast_link'] = 0;
if( $PodpressData['contentPlayer'] == 'both' )
$General['player_function'] = 1;
else if( $PodpressData['contentPlayer'] == 'inline' )
$General['player_function'] = 2;
else if( $PodpressData['contentPlayer'] == 'popup' )
$General['player_function'] = 3;
else
$General['player_function'] = 0;
if( $PodpressData['contentPlayer'] == 'start' )
$General['display_player'] = 2;
else
$General['display_player'] = 1;
// save these imported general settings
powerpress_save_settings($General, 'powerpress_general');
$FeedSettings = get_option('powerpress_feed');
if( !$FeedSettings ) // If no feed settings, lets set defaults or copy from podpress.
$FeedSettings = array();
$FeedSettings['apply_to'] = 1; // Default, apply to all the rss2 feeds
$FeedSettings['itunes_image'] = $PodpressData['iTunes']['image'];
if( strstr($FeedSettings['itunes_image'], 'powered_by_podpress') )
$FeedSettings['itunes_image'] = ''; // We're not using podpress anymore
$FeedSettings['itunes_summary'] = $PodpressData['iTunes']['summary'];
$FeedSettings['itunes_talent_name'] = $PodpressData['iTunes']['author'];
$FeedSettings['itunes_subtitle'] = $PodpressData['iTunes']['subtitle'];
$FeedSettings['copyright'] = $PodpressData['rss_copyright'];
// Categories are tricky...
$iTunesCategories = powerpress_itunes_categories(true);
for( $x = 0; $x < 3; $x++ )
{
if( isset($PodpressData['iTunes']['category'][$x]) )
{
$CatDesc = str_replace(':', ' > ', $PodpressData['iTunes']['category'][$x]);
$CatKey = array_search($CatDesc, $iTunesCategories);
if( $CatKey )
$FeedSettings['itunes_cat_'.($x+1)] = $CatKey;
}
}
if( $PodpressData['iTunes']['explicit'] == 'No' )
$FeedSettings['itunes_explicit'] = 0;
else if( $PodpressData['iTunes']['explicit'] == 'Yes' )
$FeedSettings['itunes_explicit'] = 1;
else if( $PodpressData['iTunes']['explicit'] == 'Clean' )
$FeedSettings['itunes_explicit'] = 2;
if( !empty($PodpressData['iTunes']['FeedID']) )
$FeedSettings['itunes_url'] = 'http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id='. $PodpressData['iTunes']['FeedID'];
// Lastly, lets try to get the RSS image from the database
$RSSImage = get_option('rss_image');
if( $RSSImage )
$FeedSettings['rss2_image'] = $RSSImage;
if( strstr($FeedSettings['rss2_image'], 'powered_by_podpress') )
$FeedSettings['rss2_image'] = ''; // We're not using podpress anymore
$AdminEmail = get_option('admin_email');
if( $AdminEmail )
$FeedSettings['email'] = $AdminEmail;
// save these imported feed settings
powerpress_save_settings($FeedSettings, 'powerpress_feed');
return true;
}
// Import plugin Podcasting settings
function powerpress_admin_import_podcasting_settings()
{
$Changes = false;
$General = get_option('powerpress_general');
if( !$General)
{
$General = array();
$Changes = true;
$General['process_podpress'] = 0;
$General['display_player'] = 1;
$General['player_function'] = 1;
$General['podcast_link'] = 1;
}
$pod_player_location = get_option('pod_player_location');
if( $pod_player_location == 'top' ) // display player below posts is default in PowerPress
{
$General['display_player'] = 2; // display above posts
$Changes = true;
}
$pod_audio_width = get_option('pod_audio_width');
if( is_int( (int)$pod_audio_width) && $pod_audio_width > 100 ) // audio player width
{
$General['player_width_audio'] = $pod_audio_width;
$Changes = true;
}
$pod_player_width = get_option('pod_player_width');
if( is_int( (int)$pod_player_width) && $pod_player_width > 100 ) // video player width
{
$General['player_width'] = $pod_player_width;
$Changes = true;
}
$pod_player_height = get_option('pod_player_height');
if( is_int( (int)$pod_player_height) && $pod_player_height > 100 ) // video player width
{
$General['player_height'] = $pod_player_height;
$Changes = true;
}
if( $Changes == true )
{
// save these imported general settings
powerpress_save_settings($General, 'powerpress_general');
}
$FeedChanges = false;
// Feed settings:
$FeedSettings = get_option('powerpress_feed');
if( !$FeedSettings ) // If no feed settings, lets set defaults or copy from podpress.
{
$FeedSettings = array();
$FeedChanges = true;
}
$pod_itunes_summary = get_option('pod_itunes_summary');
if( $pod_itunes_summary )
{
$FeedSettings['itunes_summary'] = stripslashes($pod_itunes_summary);
$FeedChanges = true;
}
$pod_itunes_image = get_option('pod_itunes_image');
if( $pod_itunes_image )
{
$FeedSettings['itunes_image'] = $pod_itunes_image;
$FeedChanges = true;
}
$iTunesCategories = powerpress_itunes_categories(true);
for( $x = 1; $x <= 3; $x++ )
{
$pod_itunes_cat = get_option('pod_itunes_cat'.$x);
$find = str_replace('&amp;', '&', $pod_itunes_cat);
$CatDesc = str_replace('||', ' > ', $find);
$CatKey = array_search($CatDesc, $iTunesCategories);
if( $CatKey )
{
$FeedSettings['itunes_cat_'.$x] = $CatKey;
$FeedChanges = true;
}
}
$pod_itunes_ownername = get_option('pod_itunes_ownername');
if( $pod_itunes_ownername )
{
$FeedSettings['itunes_talent_name'] = stripslashes($pod_itunes_ownername);
$FeedChanges = true;
}
$pod_itunes_owneremail = get_option('pod_itunes_owneremail');
if( $pod_itunes_owneremail )
{
$FeedSettings['email'] = $pod_itunes_owneremail;
$FeedChanges = true;
}
$rss_language = get_option('rss_language');
if( $rss_language )
{
$FeedSettings['rss_language'] = $rss_language;
$FeedChanges = true;
}
$pod_tagline = get_option('pod_tagline');
if( $pod_tagline )
{
$FeedSettings['itunes_subtitle'] = stripslashes($pod_tagline);
$FeedChanges = true;
}
$pod_itunes_explicit = get_option('pod_itunes_explicit');
if( $pod_itunes_explicit == 'yes' )
{
$FeedSettings['itunes_explicit'] = 1;
$FeedChanges = true;
}
else if( $pod_itunes_explicit == 'clean' )
{
$FeedSettings['itunes_explicit'] = 2;
$FeedChanges = true;
}
if( $FeedChanges )
{
// save these imported feed settings
powerpress_save_settings($FeedSettings, 'powerpress_feed');
}
return ($Changes||$FeedChanges);
}
function powerpress_admin_episodes_per_feed($feed_slug, $post_type='post')
{
$field = 'enclosure';
if( $feed_slug != 'podcast' )
$field = '_'. $feed_slug .':enclosure';
global $wpdb;
if ( $results = $wpdb->get_results("SELECT COUNT(pm.post_id) AS episodes_total FROM $wpdb->posts AS p INNER JOIN $wpdb->postmeta AS pm ON pm.post_id = p.ID WHERE pm.meta_key = '$field' AND p.post_status <> 'auto-draft' AND p.post_status <> 'trash' AND p.post_status <> 'inherit' ", ARRAY_A) ) {
if( count($results) )
{
foreach( $results as $key => $row ) {
break;
}
if( $row['episodes_total'] )
return $row['episodes_total'];
}
}
return 0;
}
// Set the default settings basedon the section user is in.
function powerpress_default_settings($Settings, $Section='basic')
{
// Set the default settings if the setting does not exist...
switch($Section)
{
case 'basic': {
// Nothing needs to be pre-set in the basic settings area
if( !isset($Settings['player_options'] ) )
{
$Settings['player_options'] = 0;
if( isset($Settings['player']) && $Settings['player'] != '' && $Settings['player'] != 'default' )
$Settings['player_options'] = 1;
}
if( !isset($Settings['cat_casting'] ) )
{
$Settings['cat_casting'] = 0;
//if( isset($Settings['custom_cat_feeds']) && count($Settings['custom_cat_feeds']) > 0 )
// $Settings['cat_casting'] = 1;
}
if( !isset($Settings['channels'] ) )
$Settings['channels'] = 0;
if( isset($Settings['custom_feeds']) && count($Settings['custom_feeds']) > 0 ) // They can't delete this until they remove all the channels
$Settings['channels'] = 1;
}; break;
case 'editfeed': {
if( !isset($Settings['apply_to']) )
$Settings['apply_to'] = 1; // Make sure settings are applied to all feeds by default
//if( !isset($Settings['enhance_itunes_summary']) )
// $Settings['enhance_itunes_summary'] = 1;
}; // Let this fall through to the custom feed settings
case 'editfeed_custom': {
if( !isset($Settings['enhance_itunes_summary']) )
$Settings['enhance_itunes_summary'] = 0;
}; break;
case 'appearance': {
if( !isset($Settings['display_player']) )
$Settings['display_player'] = 1;
if( !isset($Settings['player_function']) )
$Settings['player_function'] = 1;
if( !isset($Settings['podcast_link']) )
$Settings['podcast_link'] = 1;
if( !isset($Settings['display_player_excerpt']) )
$Settings['display_player_excerpt'] = 0;
//if( !isset($Settings['display_player_disable_mobile']) )
// $Settings['display_player_disable_mobile'] = 0;
// Play in page obsolete, switching here:
if( $Settings['player_function'] == 5 )
$Settings['player_function'] = 1;
else if( $Settings['player_function'] == 4 )
$Settings['player_function'] = 2;
if(!isset($Settings['subscribe_widget_style'])) {
$General = powerpress_get_settings('powerpress_general');
if ( empty($General['timestamp']) || $General['timestamp'] > 1570366800 ) {
$Settings['subscribe_widget_style'] = 'modern';
} else {
$Settings['subscribe_widget_style'] = 'classic';
}
}
if(!isset($Settings['subscribe_widget_shape'])) {
$Settings['subscribe_widget_shape'] = 'squared';
}
if(!isset($Settings['subscribe_no_important_styling'])) {
$Settings['subscribe_no_important_styling'] = 'include';
}
}; break;
}
return $Settings;
}
function powerpress_write_tags($file, $post_title, $program_keyword = false)
{
// Use the Blubrry API to write ID3 tags. to the media...
$Settings = get_option('powerpress_general');
if( empty($program_keyword) && !empty($Settings['blubrry_program_keyword']) ) {
$program_keyword = $Settings['blubrry_program_keyword'];
}
$PostArgs = array();
$Fields = array('title','artist','album','genre','year','track','composer','copyright','url');
foreach( $Fields as $null => $field )
{
if( !empty($Settings[ 'tag_'.$field ]) )
{
if( $field == 'track' )
{
$TrackNumber = get_option('powerpress_track_number');
if( empty($TrackNumber) )
$TrackNumber = 1;
$PostArgs[ $field ] = $TrackNumber;
update_option('powerpress_track_number', ($TrackNumber+1) );
}
else
{
$PostArgs[ $field ] = $Settings[ 'tag_'.$field ];
}
}
else
{
switch($field)
{
case 'title': {
$PostArgs['title'] = $post_title;
}; break;
case 'album': {
$PostArgs['album'] = get_bloginfo('name');
}; break;
case 'genre': {
$PostArgs['genre'] = 'Podcast';
}; break;
case 'year': {
$PostArgs['year'] = date('Y');
}; break;
case 'artist':
case 'composer': {
if( !empty($Settings['itunes_talent_name']) )
$PostArgs[ $field ] = $Settings['itunes_talent_name'];
}; break;
case 'copyright': {
if( !empty($Settings['itunes_talent_name']) )
$PostArgs['copyright'] = '(c) '.$Settings['itunes_talent_name'];
}; break;
case 'url': {
$PostArgs['url'] = get_bloginfo('url');
}; break;
}
}
}
// Get meta info via API
$api_url_array = powerpress_get_api_array();
foreach( $api_url_array as $index => $api_url )
{
$req_url = sprintf('%s/media/%s/%s?format=json&id3=true', rtrim($api_url, '/'), urlencode($program_keyword), urlencode($file) );
$req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:'');
$content = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], $PostArgs );
if( !$content && $api_url == 'https://api.blubrry.com/' ) { // Lets force cURL and see if that helps...
$content = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], $PostArgs, 15, false, true);
}
if( $content != false )
break;
}
if( $content )
{
$Results = powerpress_json_decode($content);
if( $Results && is_array($Results) )
return $Results;
}
return array('error'=>__('Error occurred writing MP3 ID3 Tags.', 'powerpress') );
}
function powerpress_get_media_info($file, $program_Keyword = false)
{
$Settings = get_option('powerpress_general');
if( empty($program_Keyword) && !empty($Settings['blubrry_program_keyword']) ) {
$program_Keyword = $Settings['blubrry_program_keyword'];
}
$content = false;
$api_url_array = powerpress_get_api_array();
foreach( $api_url_array as $index => $api_url )
{
$req_url = sprintf('%s/media/%s/%s?format=json&info=true', rtrim($api_url, '/'), urlencode($program_Keyword), urlencode($file) );
$req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:'');
$content = powerpress_remote_fopen($req_url, $Settings['blubrry_auth']);
if( !$content && $api_url == 'https://api.blubrry.com/' ) { // Lets force cURL and see if that helps...
$content = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], array(), 15, false, true);
}
if( $content != false )
break;
}
if( $content )
{
$Results = powerpress_json_decode($content);
if( $Results && is_array($Results) )
return $Results;
}
return array('error'=>__('Error occurred obtaining media information.', 'powerpress') );
}
// Call this function when there is no enclosure currently detected for the post but users set the option to auto-add first media file linked within post option is checked.
function powerpress_do_enclose( $content, $post_ID, $use_last_media_link = false )
{
$ltrs = '\w';
$gunk = '/#~:.?+=&%@!\-';
$punc = '.:?\-';
$any = $ltrs . $gunk . $punc;
preg_match_all( "{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp );
if( $use_last_media_link )
$post_links_temp[0] = array_reverse($post_links_temp[0]);
$enclosure = false;
foreach ( (array) $post_links_temp[0] as $link_test ) {
$test = parse_url( $link_test );
// Wordpress also acecpts query strings, which doesn't matter to us what's more important is taht the request ends with a file extension.
// get the file extension at the end of the request:
if( preg_match('/\.([a-z0-9]{2,7})$/i', $link_test, $matches) )
{
// see if the file extension is one of the supported media types...
$content_type = powerpress_get_contenttype('test.'.$matches[1], false); // we want to strictly use the content types known for media, so pass false for second argument
if( $content_type )
{
$enclosure = $link_test;
$MediaInfo = powerpress_get_media_info_local($link_test, $content_type);
if( !isset($MediaInfo['error']) && !empty($MediaInfo['length']) )
{
// Insert enclosure here:
$EnclosureData = $link_test . "\n" . $MediaInfo['length'] . "\n". $content_type;
if( !empty($MediaInfo['duration']) )
$EnclosureData .= "\n".serialize( array('duration'=>$MediaInfo['duration']) );
add_post_meta($post_ID, 'enclosure', $EnclosureData, true);
break; // We don't wnat to insert anymore enclosures, this was it!
}
}
}
}
}
function powerpress_get_episode_count($feed_slug, $post_type = 'post')
{
global $wpdb;
$custom_field = 'enclosure';
if( $feed_slug != 'podcast' )
$custom_field = '_'. $feed_slug .':enclosure';
$query = "SELECT COUNT( * ) AS num_posts FROM {$wpdb->posts} ";
$query .= "INNER JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id ";
$query .= "WHERE {$wpdb->postmeta}.meta_key = '". $custom_field ."' AND post_type = %s AND post_status = 'publish' ";
$results = $wpdb->get_results( $wpdb->prepare( $query, $post_type ), ARRAY_A );
if( !empty($results[0]['num_posts']) )
{
return $results[0]['num_posts'];
}
return 0;
}
function powerpress_get_media_info_local($media_file, $content_type='', $file_size=0, $duration='', $return_warnings=false)
{
$error_msg = '';
$warning_msg = '';
if( $content_type == '' )
$content_type = powerpress_get_contenttype($media_file);
if( isset($GLOBALS['objWPOSFLV']) && is_object($GLOBALS['objWPOSFLV']) )
return array('error'=>__('The WP OS FLV plugin is not compatible with Blubrry PowerPress.', 'powerpress') );
$get_duration_info = ( ($content_type == 'audio/mpeg' || $content_type == 'audio/x-m4a' || $content_type == 'video/x-m4v' || $content_type == 'video/mp4' || $content_type == 'audio/ogg' ) && $duration === '');
// Lets use the mp3info class:
require_once( POWERPRESS_ABSPATH .'/mp3info.class.php');
$Mp3Info = new Mp3Info();
if( $get_duration_info )
{
if( preg_match('/video/i', $content_type) )
{
if( defined('POWERPRESS_DOWNLOAD_BYTE_LIMIT_VIDEO') )
$Mp3Info->SetDownloadBytesLimit(POWERPRESS_DOWNLOAD_BYTE_LIMIT_VIDEO);
}
else
{
if( defined('POWERPRESS_DOWNLOAD_BYTE_LIMIT') )
$Mp3Info->SetDownloadBytesLimit(POWERPRESS_DOWNLOAD_BYTE_LIMIT);
}
}
$Mp3Data = $Mp3Info->GetMp3Info($media_file, !$get_duration_info);
if( $Mp3Data )
{
if( $Mp3Info->GetRedirectCount() > 5 )
{
// Add a warning that the redirect count exceeded 5, which may prevent some podcatchers from downloading the media.
$warning = sprintf( __('Warning, the Media URL %s contains %d redirects.', 'powerpress'), $media_file, $Mp3Info->GetRedirectCount() );
$warning .= ' [<a href="http://create.blubrry.com/resources/powerpress/using-powerpress/warning-messages-explained/" title="'. __('PowerPress Warnings Explained', 'powerpress') .'" target="_blank">'. __('PowerPress Warnings Explained') .'</a>]';
if( $return_warnings )
$warning_msg .= $warning;
else
powerpress_add_error( $warning );
}
if( $file_size == 0 )
$file_size = $Mp3Info->GetContentLength();
if( $get_duration_info )
{
$playtime_string = ( !empty($Mp3Data['playtime_string']) ? $Mp3Data['playtime_string'] : '');
$duration = powerpress_readable_duration($playtime_string, true); // Fix so it looks better when viewed for editing
}
$GeneralSettings = get_option('powerpress_general');
if( empty($GeneralSettings['hide_warnings']) && count( $Mp3Info->GetWarnings() ) > 0 )
{
$Warnings = $Mp3Info->GetWarnings();
foreach( $Warnings as $null => $warning )
{
$warning = sprintf( __('Warning, Media URL %s', 'powerpress'), $media_file) .': '. $warning .' [<a href="http://create.blubrry.com/resources/powerpress/using-powerpress/warning-messages-explained/" target="_blank">'. __('PowerPress Warnings Explained', 'powerpress') .'</a>]';
if( $return_warnings )
$warning_msg .= $warning;
else
powerpress_add_error( $warning );
}
}
}
else
{
if( $Mp3Info->GetError() != '' )
return array('error'=>$Mp3Info->GetError() );
else
return array('error'=>__('Error occurred obtaining media information.', 'powerpress') );
}
if( $file_size == 0 )
return array('error'=>__('Error occurred obtaining media file size.', 'powerpress') );
if( $return_warnings && $warning_msg != '' )
return array('content-type'=>$content_type, 'length'=>$file_size, 'duration'=>$duration, 'warnings'=>$warning_msg);
return array('content-type'=>$content_type, 'length'=>$file_size, 'duration'=>$duration);
// OLD CODE FOLLOWS:
if( $content_type == 'audio/mpeg' && $duration === '' ) // if duration has a value or is set to false then we don't want to try to obtain it here...
{
// Lets use the mp3info class:
require_once( POWERPRESS_ABSPATH .'/mp3info.class.php');
$Mp3Info = new Mp3Info();
if( defined('POWERPRESS_DOWNLOAD_BYTE_LIMIT') )
$Mp3Info->SetDownloadBytesLimit(POWERPRESS_DOWNLOAD_BYTE_LIMIT);
$Mp3Data = $Mp3Info->GetMp3Info($media_file);
if( $Mp3Data )
{
if( $Mp3Info->GetRedirectCount() > 5 )
{
// Add a warning that the redirect count exceeded 5, which may prevent some podcatchers from downloading the media.
powerpress_add_error( sprintf( __('Warning, the Media URL %s contains %d redirects.', 'powerpress'), $media_file, $Mp3Info->GetRedirectCount() )
.' [<a href="http://create.blubrry.com/resources/powerpress/using-powerpress/warning-messages-explained/" target="_blank">'. __('PowerPress Warnings Explained', 'powerpress') .'</a>]'
);
}
if( $file_size == 0 )
$file_size = $Mp3Info->GetContentLength();
$playtime_string = ( !empty($Mp3Data['playtime_string']) ? $Mp3Data['playtime_string'] : '');
$duration = powerpress_readable_duration($playtime_string, true); // Fix so it looks better when viewed for editing
if( count( $Mp3Info->GetWarnings() ) > 0 )
{
$Warnings = $Mp3Info->GetWarnings();
foreach( $Warnings as $null => $warning )
powerpress_add_error( sprintf( __('Warning, Media URL %s', 'powerpress'), $media_file) .': '. $warning .' [<a href="http://create.blubrry.com/resources/powerpress/using-powerpress/warning-messages-explained/" target="_blank">'. __('PowerPress Warnings Explained', 'powerpress') .'</a>]' );
}
}
else
{
if( $Mp3Info->GetError() )
return array('error'=>$Mp3Info->GetError() );
else
return array('error'=>__('Error occurred obtaining media information.', 'powerpress') );
}
}
$wp_remote_options = array();
$wp_remote_options['user-agent'] = 'Blubrry PowerPress/'.POWERPRESS_VERSION;
$wp_remote_options['httpversion'] = '1.1';
if( $content_type != '' && $file_size == 0 )
{
$response = wp_remote_head( $media_file, array('httpversion' => 1.1) );
// Redirect 1
if( !is_wp_error( $response ) && ($response['response']['code'] == 301 || $response['response']['code'] == 302) )
{
$headers = wp_remote_retrieve_headers( $response );
$response = wp_remote_head( $headers['location'], $wp_remote_options );
}
// Redirect 2
if( !is_wp_error( $response ) && ($response['response']['code'] == 301 || $response['response']['code'] == 302) )
{
$headers = wp_remote_retrieve_headers( $response );
$response = wp_remote_head( $headers['location'], $wp_remote_options );
}
// Redirect 3
if( !is_wp_error( $response ) && ($response['response']['code'] == 301 || $response['response']['code'] == 302) )
{
$headers = wp_remote_retrieve_headers( $response );
$response = wp_remote_head( $headers['location'], $wp_remote_options );
}
// Redirect 4
if( !is_wp_error( $response ) && ($response['response']['code'] == 301 || $response['response']['code'] == 302) )
{
$headers = wp_remote_retrieve_headers( $response );
$response = wp_remote_head( $headers['location'], $wp_remote_options );
}
if ( is_wp_error( $response ) )
{
return array('error'=>$response->get_error_message() );
}
if( isset($response['response']['code']) && $response['response']['code'] < 200 || $response['response']['code'] > 290 )
{
return array('error'=> __('Error, HTTP', 'powerpress') .' '.$response['response']['code']);
}
$headers = wp_remote_retrieve_headers( $response );
if( $headers && $headers['content-length'] )
$file_size = (int) $headers['content-length'];
else
return array('error'=>__('Unable to obtain file size of media file.', 'powerpress') );
}
if( $file_size == 0 )
return array('error'=>__('Error occurred obtaining media file size.', 'powerpress') );
return array('content-type'=>$content_type, 'length'=>$file_size, 'duration'=>$duration);
}
function powerpress_add_error($error)
{
$Errors = get_option('powerpress_errors');
if( !is_array($Errors) )
$Errors = array();
$Errors[] = $error;
update_option('powerpress_errors', $Errors);
}
function powerpress_print_options($options,$selected=null, $return=false)
{
reset($options);
if( $return )
{
$html = '';
foreach( $options as $key=> $value )
{
$html .= '<option value="'. esc_attr($key) .'"'. ( ($selected !== null && strcmp($selected, $key) == 0 )?' selected':'') .'>';
$html .= htmlspecialchars($value);
$html .= "</option>\n";
}
return $html;
}
foreach( $options as $key=> $value )
{
echo '<option value="'. esc_attr($key) .'"'. ( ($selected !== null && strcmp($selected, $key) == 0 )?' selected':'') .'>';
echo htmlspecialchars($value);
echo "</option>\n";
}
}
/*
Help Link
2.0 beta
*/
function powerpress_help_link($link, $title = false )
{
if( $title == '' )
$title = __('Learn More', 'powerpress');
return ' [<a href="'. $link .'" title="'. htmlspecialchars($title) .'" target="_blank">'. htmlspecialchars($title) .'</a>] ';
}
$g_SupportUploads = null;
function powerpressadmin_support_uploads()
{
global $g_SupportUploads;
if( $g_SupportUploads != null )
return $g_SupportUploads;
$g_SupportUploads = false;
$UploadArray = wp_upload_dir();
if( false === $UploadArray['error'] )
{
$upload_path = $UploadArray['basedir'].'/powerpress/';
if( !file_exists($upload_path) )
$g_SupportUploads = @wp_mkdir_p( rtrim($upload_path, '/') );
else
$g_SupportUploads = true;
}
return $g_SupportUploads;
}
function powerpressadmin_new($style='')
{
if( empty($style) )
$style = 'color: #CC0000; font-weight: bold;';
return '<sup style="'.$style.'">'. __('new!', 'powerpress') .'</sup>';
}
function powerpressadmin_updated($updated_message)
{
return '<div style="margin: 5px;"><sup style="color: #CC0000; font-weight: bold; font-size: 85%;">'. $updated_message .'</sup></div>';
}
function powerpressadmin_notice($updated_message)
{
return '<sup style="color: #CC0000; font-weight: bold; font-size: 105%;">'. htmlspecialchars($updated_message) .'</sup>';
}
function powerpressadmin_community_news($items=4, $pp_settings=false)
{
require_once( POWERPRESS_ABSPATH. '/powerpress-player.php'); // Include, if not included already
$rss_items = powerpress_get_news(POWERPRESS_FEED_NEWS, $items);
echo '<div class="powerpress-news-dashboard">';
echo '<ul>';
if ( !$rss_items )
{
echo '<li>'. __('Error occurred retrieving news.' , 'powerpress') .'</li>';
}
else
{
$first_item = true;
foreach( $rss_items as $null=> $item)
{
preg_match_all('/<img.*?src="(.*?)"/', $item->get_content(), $matches);
if (!isset($matches[1][0])) {
$img_url = powerpress_get_root_url() . 'images/pts_cover.jpg';
} else {
$img_url = $matches[1][0];
}
$enclosure = $item->get_enclosure();
echo '<li class="pp-news-item">';
echo "<img class='pp-news-image' src=\"$img_url\" alt=\"No image\" /><div class='pp-news-details-container'>";
echo '<a class="rsswidget" href="'.esc_url( $item->get_permalink(), $protocolls=null, 'display' ).'" target="_blank">'. esc_html( $item->get_title() ) .'</a>';
echo ' <div class="rss-date">'. $item->get_date('F j, Y') .'</div>';
echo '<div class="rssSummary">'. esc_html( powerpress_feed_text_limit( strip_tags( $item->get_description() ), 150 ) );
echo '<a href="' . esc_url($item->get_permalink(), $protocolls = null, 'display') . '" target="_blank">' . __('Read more', 'powerpress') . '</a>';
echo '</div>';
if( $enclosure && !empty($enclosure->link) )
{
$poster_image = '';
$poster_tag = $item->get_item_tags('http://www.rawvoice.com/rawvoiceRssModule/', 'poster');
if( $poster_tag && !empty($poster_tag[0]['attribs']['']['url']) )
$poster_image = $item->sanitize($poster_tag[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
$embed = '';
$embed_tag = $item->get_item_tags('http://www.rawvoice.com/rawvoiceRssModule/', 'embed');
if( $embed_tag && !empty($embed_tag[0]['data']) )
$embed = $embed_tag[0]['data'];
// Only show an episode with the latest item
if( $first_item && $embed )
{
if( preg_match('/width="(\d{1,4})"/i', $embed, $matches ) && count($matches) > 1 )
{
$max_width = $matches[1];
$embed = preg_replace('/width="/i', 'style="max-width: '.$max_width.'px;" width="', $embed );
}
$embed = preg_replace('/width="(\d{1,4})"/i', 'width="100%"', $embed );
echo '<div class="powerpressNewsPlayer">';
echo $embed;
echo '</div>';
}
else if( $first_item )
{
$EpisodeData = array();
$EpisodeData['type'] = $enclosure->type;
$EpisodeData['duration'] = $enclosure->duration;
$EpisodeData['poster'] = $poster_image;
$EpisodeData['width'] = '100%';
$EpisodeData['custom_play_button'] = powerpress_get_root_url() . 'play_audio.png';
$ext = powerpressplayer_get_extension($enclosure->link);
switch($ext)
{
case 'mp4':
case 'm4v':
case 'webm': {
echo '<div class="powerpressNewsPlayer powerpressadmin-mejs-video">';
echo powerpressplayer_build_mediaelementvideo($enclosure->link, $EpisodeData);
echo '</div>';
}; break;
case 'mp3':
case 'm4a': {
echo '<div class="powerpressNewsPlayer">';
echo powerpressplayer_build_mediaelementaudio($enclosure->link, $EpisodeData);
echo '</div>';
}; break;
}
}
echo '<div style="clear: both;"></div>';
}
echo '</div>';
echo '</li>';
//$first_item = false;
}
}
echo '</ul>';
echo '<br class="clear"/>';
echo '<div style="text-align:center;"><b>';
echo __('MORE ARTICLES AT', 'powerpress');
echo '&nbsp;';
echo '<em><a href="https://blubrry.com/podcast-insider/">'. __('PODCAST INSIDER', 'powerpress') .'</a></em>';
echo '</b></div>';
echo '</div>';
}
function powerpressadmin_community_highlighted($items=8)
{
require_once( POWERPRESS_ABSPATH. '/powerpress-player.php'); // Include, if not included already
$rss_items = powerpress_get_news(POWERPRESS_FEED_HIGHLIGHTED, $items);
echo '<div class="powerpress-highlighted-dashboard">';
echo '<ul>';
if ( !$rss_items )
{
echo '<li>'. __('Error occurred retrieving highlighted items.' , 'powerpress') .'</li>';
}
else
{
foreach( $rss_items as $null=> $item)
{
echo '<li>';
echo '<a class="rsswidget" href="'.esc_url( $item->get_permalink(), $protocolls=null, 'display' ).'" target="_blank">'. esc_html( $item->get_title() ) .'</a>';
//echo ' <span class="rss-date">'. $item->get_date('F j, Y') .'</span>';
echo '<div class="rssSummary">'. esc_html( powerpress_feed_text_limit( strip_tags( $item->get_description() ), 150 ) ).'</div>';
echo '</li>';
}
}
echo '</ul>';
echo '</div>';
}
function powerpress_admin_plugin_action_links( $links, $file )
{
if( preg_match('/powerpress\.php$/', $file) )
array_push( $links, '<a href="'. admin_url("admin.php?page=powerpressadmin_basic") .'">'. __('Settings', 'powerpress') .'</a>');
return $links;
}
add_filter( 'plugin_action_links', 'powerpress_admin_plugin_action_links', 10, 2 );
function powerpress_plugin_row_meta( $links, $file ) {
if ( strpos( $file, 'powerpress.php' ) !== false ) {
$new_links = array();
$new_links[] = powerpress_get_documentation_link();
//$new_links[] = '<a href="http://create.blubrry.com/resources/powerpress/powerpress-documentation/" target="_blank">' . __( 'Support', 'powerpress' ) . '</a>';
$new_links[] = powerpress_get_review_link();
$links = array_merge( $links, $new_links );
}
return $links;
}
function powerpress_admin_get_page()
{
if( !empty($_REQUEST['page']) )
return $_REQUEST['page'];
return 'powerpressadmin_basic';
}
function powerpress_review_message($type=0)
{
if( $type == 1 )
return sprintf(__('If you appreciate PowerPress and the features provided, we would greatly appreciate it if you could <a href="%s" target="_blank">leave a review on WordPress.org</a>.', 'powerpress'), 'https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post');
return sprintf(__('Fan of PowerPress? Please show your appreciation by <a href="%s" target="_blank">leaving a review</a>.', 'powerpress'), 'https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post');
}
function powerpress_get_review_link()
{
return '<a href="https://wordpress.org/support/view/plugin-reviews/powerpress?rate=5#postform" target="_blank">' . __( 'Write a review', 'powerpress' ) . '</a>';
}
function powerpress_get_documentation_link()
{
return '<a href="http://create.blubrry.com/resources/powerpress/powerpress-documentation/" target="_blank">' . __( 'Documentation', 'powerpress' ) . '</a>';
}
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-jquery.php');
// Only include the dashboard when appropriate.
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-dashboard.php');
if( defined('WP_LOAD_IMPORTERS') ) {
require_once( POWERPRESS_ABSPATH .'/powerpressadmin-rss-import.php');
}