posts} AS p "; $query .= "WHERE 1 "; $query .= "AND p.post_type != 'revision' "; $query .= "ORDER BY p.post_date DESC "; $results_data = $wpdb->get_results($query, ARRAY_A); // This could return a lot of data... if( $results_data ) { foreach( $results_data as $null => $row ) { $Media = powerpressadmin_mt_media_from_content($row['post_content']); if( count($Media) == 0 ) continue; if( $return['feeds_required'] < count( $Media ) ) $return['feeds_required'] = count( $Media ); $return[ $row['ID'] ] = array(); $return[ $row['ID'] ]['post_title'] = $row['post_title']; $return[ $row['ID'] ]['post_date'] = $row['post_date']; foreach( $Media as $index => $url ) $return[ $row['ID'] ]['enclosures'][$index]['url'] = $url; } } return $return; } function powerpressadmin_mt_is_media($url) { global $g_import_mt_extensions; $partsURL = @parse_url( trim($url) ); if( empty($partsURL['path']) ) return false; $filename = substr($partsURL['path'], strrpos($partsURL['path'], '/')+1 ); $partsFile = pathinfo($filename); if( empty($partsFile['extension']) ) return false; if( isset($_GET['include_only_ext']) && trim($_GET['include_only_ext']) != '' ) { $extensions = strtolower(preg_replace("/\s/", '', $_GET['include_only_ext'])); $ext_array = explode(',', trim($extensions, ',') ); if( in_array( strtolower($partsFile['extension']), $ext_array ) ) { if( !isset($g_import_mt_extensions[ strtolower($partsFile['extension']) ]) ) $g_import_mt_extensions[ strtolower($partsFile['extension']) ] = true; return true; } return false; } switch( strtolower($partsFile['extension']) ) { // Audio formats case 'mp3': // most common case 'mpga': case 'mp2': case 'mp2a': case 'm2a': case 'm3a': case 'm4a': case 'ogg': case 'wma': case 'wax': case 'ra': case 'ram': case 'mp4a': // Video formats case 'm4v': case 'mpeg': case 'mpg': case 'mpe': case 'm1v': case 'm2v': case 'mp4': case 'mp4v': case 'mpg4': case 'asf': case 'asx': case 'wmx': case 'avi': case 'wmv': case 'flv': case 'mov': case 'qt': case 'divx': case '3gp': // rarely used case 'mid': case 'midi': case 'wav': case 'aa': case 'torrent': { if( !isset($g_import_mt_extensions[ strtolower($partsFile['extension']) ]) ) $g_import_mt_extensions[ strtolower($partsFile['extension']) ] = true; return true; } } return false; } function powerpressadmin_mt_media_from_content($content) { $return = array(); //$content = 'test1 http://www.test.com/test2.mp3 http://www.test.com/test2.exe '; $ltrs = '\w'; $gunk = '/#~:.?+=&%@!\-'; $punc = '.:?\-'; $any = $ltrs . $gunk . $punc; preg_match_all( "{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp ); foreach( $post_links_temp[0] as $null => $url ) { if( powerpressadmin_mt_is_media($url) ) { if( !in_array($url, $return) ) $return[] = $url; } } return $return; } function powerpressadmin_mt_do_import() { $wp_remote_options = array(); $wp_remote_options['user-agent'] = 'Blubrry PowerPress/'.POWERPRESS_VERSION; $wp_remote_options['httpversion'] = '1.1'; $Import = ( isset($_POST['Import']) ? $_POST['Import'] : array() ); $Media = ( isset($_POST['Media']) ? $_POST['Media'] : array() ); $Titles = ( isset($_POST['Titles']) ? $_POST['Titles'] : array() ); set_time_limit(60 + (10* count($Import)) ); $DetectDuration = ( !empty($_POST['DetectDuration']) ? $_POST['DetectDuration'] : 0 ); if( $DetectDuration ) { require_once(POWERPRESS_ABSPATH.'/mp3info.class.php'); $Mp3Info = new Mp3Info(); if( defined('POWERPRESS_DOWNLOAD_BYTE_LIMIT') ) $Mp3Info->SetDownloadBytesLimit(POWERPRESS_DOWNLOAD_BYTE_LIMIT); } foreach( $Import as $post_id => $episode_feeds ) { foreach( $episode_feeds as $media_index => $feed_slug ) { if( $feed_slug == '' ) continue; // User decoded not to import this one.. $url = $Media[$post_id][$media_index]; //$headers = wp_remote_head($url, array('httpversion' => 1.1)); //$response = wp_remote_request($url, $options); $response = wp_remote_head( $url, 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 ); } $headers = wp_remote_retrieve_headers( $response ); if ( is_wp_error( $response ) ) { powerpressadmin_mt_import_log($Titles[ $post_id ], $url, $feed_slug, 'A system error occurred.'); } else if( $headers && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) { $EpisodeData = array(); $EpisodeData['url'] = $url; if( $headers['content-length'] ) $EpisodeData['size'] = (int) $headers['content-length']; else $EpisodeData['size'] = 0; $EpisodeData['type'] = powerpress_get_contenttype($EpisodeData['url']); $EpisodeData['duration'] = false; if( $EpisodeData['type'] == 'audio/mpeg' && $DetectDuration ) { $Mp3Data = $Mp3Info->GetMp3Info($EpisodeData['url']); if( $Mp3Data ) { $Duration = $Mp3Data['playtime_string']; $EpisodeData['duration'] = powerpress_readable_duration($Duration, true); // Fix so it looks better when viewed for editing } } $EnclosureData = $EpisodeData['url'] . "\n" . $EpisodeData['size'] . "\n". $EpisodeData['type']; if( $EpisodeData['duration'] ) $EnclosureData .= "\n".serialize( array('duration'=>$EpisodeData['duration']) ); // Save it here... if( $feed_slug == 'podcast' ) add_post_meta($post_id, 'enclosure', $EnclosureData, true); else add_post_meta($post_id, '_'. $feed_slug .':enclosure', $EnclosureData, true); powerpressadmin_mt_import_log($Titles[ $post_id ], $EpisodeData['url'], $feed_slug); } else { powerpressadmin_mt_import_log($Titles[ $post_id ], $url, $feed_slug, __('HTTP return code', 'powerpress') .' '. $response['response']['code'] .'.'); } } } } function powerpressadmin_mt_import_log($post_title, $episode_url, $feed_slug, $error = false) { global $g_mt_import_log, $g_mt_import_count, $g_mt_error_count; $filename = substr($episode_url, strrpos($episode_url, '/')+1); $g_mt_import_log .= '

'; if( $error ) { $g_mt_import_log .= '

'; $g_mt_import_log .= sprintf( __('Error importing %s for blog post %s:', 'powerpress'), '"'. htmlspecialchars($filename) .'"', ''. htmlspecialchars($post_title) .'' ); $g_mt_import_log .= ' '.$error; $g_mt_import_log .= "
\n"; } else { $g_mt_import_log .= sprintf( __('Episode %s for blog post %s imported to feed %s.', 'powerpress'), '"'. htmlspecialchars($filename) .'"', ''. htmlspecialchars($post_title) .'', ''. htmlspecialchars($feed_slug) .'' ); $g_mt_import_log .= "\n"; } $g_mt_import_log .= '

'; if( $error ) { if( $g_mt_error_count ) $g_mt_error_count++; else $g_mt_error_count = 1; } else { if( $g_mt_import_count ) $g_mt_import_count++; else $g_mt_import_count = 1; } } function powerpressadmin_mt_import_print_log() { global $g_mt_import_log, $g_mt_import_count, $g_mt_error_count; if( !$g_mt_import_log ) return; echo '
'; echo '

Import Log

'; $DetectDuration = ( !empty($_POST['DetectDuration']) ?$_POST['DetectDuration']:0); if( $DetectDuration ) { echo '

'. __('Duration of each mp3 detected.', 'powerpress') .'

'; } echo $g_mt_import_log; $g_mt_import_log=''; echo '

'. sprintf( __('Imported %d episode(s).', 'powerpress'), $g_mt_import_count ) .'

'; if( $g_mt_error_count ) echo '

'. sprintf( __('Found %d error(s).', 'powerpress'), $g_mt_error_count ) .'

'; echo '
'; } function powerpressadmin_importmt_columns($data=array()) { $Settings = powerpress_get_settings('powerpress_general', false); $data['post-title'] = __('Episode Title', 'powerpress'); $data['post-date'] = __('Date', 'powerpress'); $data['feed-podcast'] = __('Feed: (podcast)', 'powerpress'); if( !empty($Settings['custom_feeds']) && is_array($Settings['custom_feeds']) ) { foreach( $Settings['custom_feeds'] as $feed_slug => $value ) { if( $feed_slug != 'podcast' ) $data['feed-'.$feed_slug] = __('Feed', 'powerpress') .': ('.$feed_slug.')'; } } $data['exclude'] = ''. __('No Import', 'powerpress') .''; return $data; } add_filter('manage_powerpressadmin_importmt_columns', 'powerpressadmin_importmt_columns'); function powerpress_admin_mt() { $results = powerpress_get_mt_episodes(); $Settings = powerpress_get_settings('powerpress_general', false); if( !isset($Settings['custom_feeds']['podcast']) && !empty($Settings['custom_feeds']) ) $Settings['custom_feeds'] = array_merge( array('podcast'=> __('Podcast Feed (default)', 'powerpress') ), $Settings['custom_feeds'] ); else if( empty($Settings['custom_feeds']) ) $Settings['custom_feeds'] = array('podcast'=> __('Podcast Feed (default)', 'powerpress')); if( $results ) { if( $results['feeds_required'] > count($Settings['custom_feeds']) ) { powerpress_page_message_add_error( sprintf(__('We found blog posts that have as many as %d media files. You may need to create %d more Custom Feeds in order to import all of the media.', 'powerpress'), $results['feeds_required'], $results['feeds_required'] - count($Settings['custom_feeds']) ) ); powerpress_page_message_print(); } } powerpressadmin_mt_import_print_log(); ?>

$import_data ) { $edit_link = get_edit_post_link( $post_id ); if( $post_id == 'feeds_required' ) continue; $columns = powerpressadmin_importmt_columns(); $CurrentEnclosures = array(); if( is_array($Settings['custom_feeds']) ) { foreach( $Settings['custom_feeds'] as $feed_slug => $value ) { if( $feed_slug == 'podcast' ) $enclosure_data = get_post_meta($post_id, 'enclosure', true); else $enclosure_data = get_post_meta($post_id, '_'. $feed_slug .':enclosure', true); if( !$enclosure_data ) continue; @list($EnclosureURL, $EnclosureSize, $EnclosureType, $Serialized) = @explode("\n", $enclosure_data); if( $EnclosureURL ) { $CurrentEnclosures[ $feed_slug ] = array(); $CurrentEnclosures[ $feed_slug ]['url'] = trim($EnclosureURL); $CurrentEnclosures[ $feed_slug ]['imported'] = false; } $found = false; foreach( $import_data['enclosures'] as $episode_index => $episode_data ) { if( $episode_data['url'] == $CurrentEnclosures[ $feed_slug ]['url'] ) { $import_data['enclosures'][$episode_index]['imported'] = true; $CurrentEnclosures[ $feed_slug ]['imported'] = true; $found = true; break; } } reset($import_data['enclosures']); if( $found == false ) { // Add it to the media file list, prepend it... $is_enclosure_data = array(); $is_enclosure_data['url'] = $CurrentEnclosures[ $feed_slug ]['url']; $is_enclosure_data['imported'] = true; array_push($import_data['enclosures'], $is_enclosure_data); $CurrentEnclosures[ $feed_slug ]['imported'] = true; $CurrentEnclosures[ $feed_slug ]['present'] = true; } } reset($Settings['custom_feeds']); } $feed_title = ''; if( $feed_slug == 'podcast' ) $feed_title = __('Podcast Feed (default)', 'powerpress'); $feed_title = esc_html($feed_title); if( $count % 2 == 0 ) echo ''; else echo ''; $CheckedEpisodes = array(); // key = file_index, value = feed-slug $feed_index = 0; foreach($columns as $column_name=>$column_display_name) { $class = "class=\"column-$column_name\""; switch($column_name) { case 'post-title': { echo ''; }; break; case 'post-date': { echo ""; }; break; case 'feed-slug': { echo ""; }; break; default: { echo ""; $feed_index++; }; break; } } echo "\n \n"; $count++; } ?>
'; if ( current_user_can( 'edit_post', $post_id ) ) { ?>">
'; echo '
'; $index = 1; foreach( $import_data['enclosures'] as $episode_index => $episode_data ) { if( $index > $MaxFileIndex ) $MaxFileIndex = $index; $Parts = parse_url($episode_data['url']); $filename = substr($Parts['path'], strrpos($Parts['path'], '/')+1 ); if( $filename == '' ) $filename = $episode_data['url']; echo "File $index: "; echo ''; if( empty($episode_data['imported']) ) { echo ''; $StrandedEpisodes++; } else { echo ''; } if( empty($episode_data['imported']) ) echo '*'; echo $filename; echo ''; echo '
'; $index++; } if( $index > 1 ) // Do we need the post title? echo ''; reset($import_data['enclosures']); echo '
'; echo '
"; $timestamp = strtotime($import_data['post_date']); echo date('Y/m/d', $timestamp); echo "$feed_slug"; echo ""; $feed_slug = substr($column_name, 5); if( $column_name == 'exclude' ) $feed_slug = ''; $enclosure_data = false; $EnclosureURL = ''; echo '
 
'; if( isset($CurrentEnclosures[$feed_slug]) && $CurrentEnclosures[$feed_slug]['imported'] ) { $index = 1; foreach( $import_data['enclosures'] as $episode_index => $episode_data ) { echo "File $index: "; if( $CurrentEnclosures[$feed_slug]['url'] == $episode_data['url'] ) { if( !empty($CurrentEnclosures[$feed_slug]['present']) ) echo ''. __('present', 'powerpress') .''; else echo ''. __('imported', 'powerpress') .''; } else echo 'X'; echo "
\n"; $index++; } reset($import_data['enclosures']); } else { $index = 1; foreach( $import_data['enclosures'] as $episode_index => $episode_data ) { echo "File $index: "; if( !empty($episode_data['imported']) ) { echo ' X'; } else { $checked = ''; if( !isset($CheckedEpisodes[ $episode_index ]) && !in_array($feed_slug, $CheckedEpisodes) ) { $checked = 'checked'; $CheckedEpisodes[ $episode_index ] = $feed_slug; } if( !isset($CheckedEpisodes[ $episode_index ]) && $feed_slug == '' ) { $checked = 'checked'; } echo ''; } echo '
'; $index++; } reset($import_data['enclosures']); } echo '
'; echo "

'. __('red', 'powerpress') .'' ); ?>

: $feed_title ) { echo ''. htmlspecialchars($feed_title) .' | '; } reset($Settings['custom_feeds']); ?>

$null ) { if( $comma ) echo ', '; $comma = true; echo $ext; } ?>

 


()