$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 .= '
'. esc_html($msg) . '
'; else $g_powerpress_page_message .= '
'. ($msg) . '
'; } 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 = '
'. esc_html($msg) . '
' . $g_powerpress_page_message; else $g_powerpress_page_message = '
'. ($msg) . '
' . $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 > 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'), ''. __('Manage Plugins', 'powerpress') .''), '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 ) { ?>

$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') ." ({$MediaURL}): {$MediaInfo['error']}"; powerpress_add_error($error); //continue; } else if( empty($MediaInfo['length']) ) { $error = __('Error', 'powerpress') ." ({$MediaURL}): ". __('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('/\/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'] .= ""; } else { $EncloseData = powerpress_get_enclosure_data($postarr['ID']); if( $EncloseData && $EncloseData['url'] ) $data['post_content'] .= ""; } } 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 "\n"; ?> \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 '
'. sprintf('Test: %s', "{$media_url}"); } 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&from_categories=1&action=powerpress-editcategoryfeed&cat=') . $cat_id; $actions['powerpress'] = '' . str_replace(' ', ' ', __('Podcast Settings', 'powerpress')) . ''; } else { $edit_link = admin_url() . wp_nonce_url("admin.php?page=powerpress/powerpressadmin_categoryfeeds.php&from_categories=1&action=powerpress-addcategoryfeed&taxonomy=category&cat=".$cat_id, 'powerpress-add-taxonomy-feed'); $actions['powerpress'] = '' . str_replace(' ', ' ', __('Add Podcasting', 'powerpress')) . ''; } 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 ) ) { ?>

Podcast Settings to edit existing podcast settings.', 'powerpress'); ?>

'; powerpress_page_message_print(); } // Admin page, footer function powerpress_admin_page_footer($SaveButton=true, $form=true) { if( $SaveButton ) { ?>


|

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 .= ''. __('Display Error', 'powerpress') .''; $error .= ''; 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 .= ' '. __('Display Error', 'powerpress') .''; $error .= ''; 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('&', '&', $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 .= ' ['. __('PowerPress Warnings Explained') .']'; 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 .' ['. __('PowerPress Warnings Explained', 'powerpress') .']'; 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() ) .' ['. __('PowerPress Warnings Explained', 'powerpress') .']' ); } 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 .' ['. __('PowerPress Warnings Explained', 'powerpress') .']' ); } } 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 .= '\n"; } return $html; } foreach( $options as $key=> $value ) { echo '\n"; } } /* Help Link 2.0 beta */ function powerpress_help_link($link, $title = false ) { if( $title == '' ) $title = __('Learn More', 'powerpress'); return ' ['. htmlspecialchars($title) .'] '; } $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 ''. __('new!', 'powerpress') .''; } function powerpressadmin_updated($updated_message) { return '
'. $updated_message .'
'; } function powerpressadmin_notice($updated_message) { return ''. htmlspecialchars($updated_message) .''; } 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 '
'; echo ''; echo '
'; echo '
'; echo __('MORE ARTICLES AT', 'powerpress'); echo ' '; echo ''. __('PODCAST INSIDER', 'powerpress') .''; echo '
'; echo '
'; } 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 '
'; echo ''; echo '
'; } function powerpress_admin_plugin_action_links( $links, $file ) { if( preg_match('/powerpress\.php$/', $file) ) array_push( $links, ''. __('Settings', 'powerpress') .''); 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[] = '' . __( 'Support', 'powerpress' ) . ''; $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 leave a review on WordPress.org.', 'powerpress'), 'https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post'); return sprintf(__('Fan of PowerPress? Please show your appreciation by leaving a review.', 'powerpress'), 'https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post'); } function powerpress_get_review_link() { return '' . __( 'Write a review', 'powerpress' ) . ''; } function powerpress_get_documentation_link() { return '' . __( 'Documentation', 'powerpress' ) . ''; } 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'); }