$response->get_error_message() ); } if( isset($response['response']['code']) && ($response['response']['code'] < 200 || $response['response']['code'] > 203) ) { return array('error'=>'Error, HTTP '.$response['response']['code'] ); } return array('error'=>false); } function powerpress_admin_migrate_get_files($clean=false, $exclude_blubrry=true) { global $wpdb; $return = array(); //$return['feeds_required'] = 0; $query = "SELECT p.ID, p.post_title, p.post_date, pm.meta_id, pm.post_id, pm.meta_key, pm.meta_value "; $query .= "FROM {$wpdb->posts} AS p "; $query .= "INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id "; $query .= "WHERE (pm.meta_key = 'enclosure' OR pm.meta_key LIKE '\_%:enclosure') "; $query .= "AND p.post_type != 'revision' "; $query .= "GROUP BY pm.meta_id "; $query .= "ORDER BY p.post_date DESC "; $results_data = $wpdb->get_results($query, ARRAY_A); if( $results_data ) { foreach( $results_data as $null => $row ) { $meta_id = $row['meta_id']; $EpisodeData = powerpress_get_enclosure_data($row['post_id'], 'podcast', $row['meta_value'], false); // Get the enclosure data with no redirect added if( $exclude_blubrry && strstr($EpisodeData['url'], 'content.blubrry.com') ) continue; // Skip media hosted on blubrry in this case if( $exclude_blubrry && strstr($EpisodeData['url'], 'ins.blubrry.com') ) continue; // Skip media hosted on blubrry in this case if( $exclude_blubrry && strstr($EpisodeData['url'], 'protected.blubrry.com') ) continue; // Skip media hosted on blubrry in this case if( !$clean ) $return[$meta_id] = $row; if( !$exclude_blubrry ) $return[$meta_id]['on_blubrry'] = ( preg_match('/(ins|protected|content)\.blubrry\.com/i',$EpisodeData['url']) == 1 ); $return[$meta_id]['src_url'] = $EpisodeData['url']; } } return $return; } function powepress_admin_migrate_add_urls($urls) { $Settings = get_option('powerpress_general'); if( empty($Settings['blubrry_auth']) ) { powerpress_page_message_add_error( sprintf(__('You must have a blubrry Podcast Hosting account to continue.', 'powerpress')) .' '. ''. __('Learn More', 'powerpress') .'', 'inline', false ); return false; } $PostArgs = array('urls'=>$urls); $json_data = false; $api_url_array = powerpress_get_api_array(); foreach( $api_url_array as $index => $api_url ) { $req_url = sprintf('%s/media/%s/migrate_add.json', rtrim($api_url, '/'), urlencode($Settings['blubrry_program_keyword']) ); $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:''); $json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], $PostArgs ); 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'], $PostArgs, 15, false, true); } if( $json_data != false ) break; } if( empty($json_data) ) { if( !empty($GLOBALS['g_powerpress_remote_errorno']) && $GLOBALS['g_powerpress_remote_errorno'] == 401 ) $error .= __('Incorrect sign-in email address or password.', 'powerpress') .' '. __('Verify your account settings then try again.', 'powerpress'); else if( !empty($GLOBALS['g_powerpress_remote_error']) ) $error .= $GLOBALS['g_powerpress_remote_error']; else $error .= __('Authentication failed.', 'powerpress'); powerpress_page_message_add_error($error); return false; } $results = powerpress_json_decode($json_data); if( empty($results) ) { $results = array(); $results['error'] = __('Unknown error occurred decoding results from server.', 'powerpress'); } if( !empty($results['error']) ) { $error = __('Blubrry Migrate Media Error', 'powerpress') .': '. $results['error']; powerpress_page_message_add_error($error); return false; } return $results; } function powerpress_admin_migrate_get_status() { $Settings = get_option('powerpress_general'); if( empty($Settings['blubrry_auth']) ) { powerpress_page_message_add_error( sprintf(__('You must have a blubrry Podcast Hosting account to continue.', 'powerpress')), 'inline', false ); return 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/migrate_status.json?status=summary&simple=true', rtrim($api_url, '/'), $Settings['blubrry_program_keyword'] ); $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:''); $json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth']); if( $json_data != false ) break; } if( !$json_data ) { $error = ''; if( !empty($GLOBALS['g_powerpress_remote_errorno']) && $GLOBALS['g_powerpress_remote_errorno'] == 401 ) $error = __('Incorrect sign-in email address or password.', 'powerpress') .' '. __('Verify your account settings then try again.', 'powerpress'); else if( !empty($GLOBALS['g_powerpress_remote_error']) ) $error = $GLOBALS['g_powerpress_remote_error']; else $error = __('Authentication failed.', 'powerpress'); powerpress_page_message_add_error($error); return false; } //mail('cio', 'ok', $json_data); $results = powerpress_json_decode($json_data); if( empty($results) ) { $results = array(); $results['error'] = __('Unknown error occurred decoding results from server.', 'powerpress'); } if( !empty($results['error']) ) { $error = __('Blubrry Migrate Media Error', 'powerpress') .': '. $results['error']; powerpress_page_message_add_error($error); return false; } return $results; } function powerpress_admin_migrate_get_migrated_by_status($status='migrated') { $Settings = get_option('powerpress_general'); if( empty($Settings['blubrry_auth']) ) { powerpress_page_message_add_error( sprintf(__('You must have a blubrry Podcast Hosting account to continue.', 'powerpress')), 'inline', false ); return 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/migrate_status.json?status=%s&limit=10000&simple=true', rtrim($api_url, '/'), $Settings['blubrry_program_keyword'], urlencode($status) ); $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:''); $json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth']); if( $json_data != false ) break; } if( !$json_data ) { if( !empty($GLOBALS['g_powerpress_remote_errorno']) && $GLOBALS['g_powerpress_remote_errorno'] == 401 ) $error .= __('Incorrect sign-in email address or password.', 'powerpress') .' '. __('Verify your account settings then try again.', 'powerpress'); else if( !empty($GLOBALS['g_powerpress_remote_error']) ) $error .= '
'. $GLOBALS['g_powerpress_remote_error']; else $error .= __('Authentication failed.', 'powerpress'); powerpress_page_message_add_error($error); return false; } $results = powerpress_json_decode($json_data); if( empty($results) ) { $error = __('Unknown error occurred decoding results from server.', 'powerpress'); powerpress_page_message_add_error($error); return false; } if( !empty($results['error']) ) { $error = __('Blubrry Migrate Media Error', 'powerpress') .': '. $results['error']; powerpress_page_message_add_error($error); return false; } return $results; } // Handle POST/GET page requests here function powerpress_admin_migrate_request() { if( !empty($_GET['migrate_step']) ) { switch( $_GET['migrate_step'] ) { case 1: { $GLOBALS['powerpress_migrate_stats'] = powerpress_admin_extension_counts(); }; break; } } if( !empty($_POST['migrate_action']) ) { check_admin_referer('powerpress-migrate-media'); switch($_POST['migrate_action']) { case 'queue_episodes': { if( !empty($_POST['Migrate']) ) { powerpress_admin_queue_files($_POST['Migrate']); // Else error message handled in functoin called above } }; break; case 'update_episodes': { // $MigrateResultsPrevious = get_option('powerpress_migrate_results'); $add_option = false; if( $MigrateResultsPrevious == false ) $add_option = true; unset($MigrateResultsPrevious); // Free up the memory //$URLs = powerpress_admin_migrate_get_migrated_by_status('completed'); $URLs = powerpress_admin_migrate_get_migrated_by_status('all'); if( !empty($URLs) ) { $URLs['updated_timestamp'] = current_time( 'timestamp' ); if( $add_option ) add_option('powerpress_migrate_results', $URLs, '', 'no'); // Make sure it is not auto loaded else update_option('powerpress_migrate_results', $URLs); if( !empty($URLs['results']) ) { $update_option = true; $CompletedResults = get_option('powerpress_migrate_completed'); if( $CompletedResults == false ) $update_option = false; if( empty($CompletedResults['completed_count']) ) $CompletedResults['completed_count'] = 0; if( empty($CompletedResults['error_count']) ) $CompletedResults['error_count'] = 0; if( empty($GLOBALS['g_powerpress_verify_failed_count']) ) $GLOBALS['g_powerpress_verify_failed_count'] = 0; if( empty($GLOBALS['g_powerpress_already_migrated']) ) $GLOBALS['g_powerpress_already_migrated'] = 0; if( empty($GLOBALS['g_powerpress_total_files_found']) ) $GLOBALS['g_powerpress_total_files_found'] = 0; if( empty($GLOBALS['g_powerpress_update_errors']) ) $GLOBALS['g_powerpress_update_errors'] = 0; $QueuedEpisodes = get_option('powerpress_migrate_queued'); // Array of key meta_id => URL value pairs $FoundCount = 0; if( !empty($QueuedEpisodes) ) { foreach( $URLs['results'] as $index => $row ) { if( $row['status'] != 'completed' ) // Not migrated continue; $source_url = $row['source_url']; $new_url = $row['new_url']; $found = array_keys($QueuedEpisodes, $source_url); if( empty($found) ) { continue; // Nothing found here } $FoundCount++; $GLOBALS['g_powerpress_total_files_found']++; foreach( $found as $null => $meta_id ) { // Get the post meta $meta_object = get_metadata_by_mid('post', $meta_id); if( !is_object($meta_object) ) continue; // Weird $meta_data = $meta_object->meta_value; $parts = explode("\n", $meta_data, 2); $other_meta_data = false; if( count($parts) == 2 ) list($current_url, $other_meta_data) = $parts; else $current_url = trim($meta_data); $current_url = trim($current_url); // We already migrated this one, or it was modified anyway if( $source_url != $current_url ) { //echo "$source_url != $current_url "; $GLOBALS['g_powerpress_already_migrated']++; continue; } // Verify the URL: if( !empty($_POST['PowerPressVerifyURLs']) ) { $verified= powerpress_admin_verify_url($new_url); if( !empty($verified['error']) ) { // TODO: Handle the error here... $GLOBALS['g_powerpress_verify_failed_count']++; continue; } } $new_meta_data = $new_url; if( $other_meta_data ) $new_meta_data .= "\n". $other_meta_data; // save the new URL if( update_metadata_by_mid( 'post', $meta_id, $new_meta_data) ) { $CompletedResults['completed_count']++; $CompletedResults['results'][ $meta_id ] = $new_url; } else { $CompletedResults['error_count']++; $GLOBALS['g_powerpress_update_errors']++; } } } if( $CompletedResults['completed_count'] > 0 ) { if( $update_option ) update_option('powerpress_migrate_completed', $CompletedResults); else add_option('powerpress_migrate_completed', $CompletedResults, '', 'no'); // Make sure we are not preloading powerpress_page_message_add_notice( sprintf(__('Episodes updated successfully.', 'powerpress')) ); return; } powerpress_page_message_add_notice( sprintf(__('No Episodes updated. Please see results.', 'powerpress')) ); return; } } else { powerpress_page_message_add_notice( sprintf(__('No episodes updated.', 'powerpress')) ); } } }; break; } } if( !empty($_GET['migrate_action']) ) { check_admin_referer('powerpress-migrate-media'); switch($_GET['migrate_action']) { case 'reset_migrate_media': { delete_option('powerpress_migrate_completed'); delete_option('powerpress_migrate_queued'); delete_option('powerpress_migrate_status'); delete_option('powerpress_migrate_results'); powerpress_page_message_add_notice( sprintf(__('Media migration reset successfully.', 'powerpress')) ); }; break; } } } function powerpress_admin_extension_counts() { $files = powerpress_admin_migrate_get_files(true, false); $extensions = array(); // 'blubrry'=>0, 'mp3'=>0, 'm4a'=>0, 'mp4'=>0, 'm4v'=>0, '*'=>0 ); foreach( $files as $meta_id => $row ) { $extension = '*'; $parts = pathinfo($row['src_url']); if( preg_match('/(mp3|m4a|mp4|m4v|mov)/i', $parts['extension']) ) $extension = strtolower($parts['extension']); if( !empty($row['on_blubrry']) ) $extension = 'blubrry'; if( empty($extensions[ $extension ]) ) $extensions[ $extension ] = 0; $extensions[ $extension ]++; } return $extensions; } function powerpress_admin_queue_files($extensions=array() ) { $add_urls = ''; $extensions_preg_match = ''; foreach( $extensions as $extension => $null ) { if( $extension == '*' ) { $extensions_preg_match = '.*'; break; // Lets just match everything } if( !empty($extensions_preg_match) ) $extensions_preg_match .= '|'; $extensions_preg_match .= $extension; } if( empty($extensions_preg_match) ) { // No files specified, no error message needed return; } $files = powerpress_admin_migrate_get_files(true, true); // Keep the URLs clean, excude blubrry media URLs $QueuedFiles = array(); $Update = false; $update_option = true; $PastResults = get_option('powerpress_migrate_queued'); if( $PastResults == false ) $update_option = false; if( is_array($PastResults) ) $QueuedFiles = $PastResults; $AddedCount = 0;; $AlreadyAddedCount = 0; foreach( $files as $meta_id => $row ) { $parts = pathinfo($row['src_url']); if( preg_match('/('.$extensions_preg_match.')/i', $parts['extension']) ) { if( !empty($QueuedFiles[ $meta_id ]) && $QueuedFiles[ $meta_id ] == $row['src_url'] ) { $AlreadyAddedCount++; continue; // Already queued } $QueuedFiles[ $meta_id ] = $row['src_url']; if( !empty($add_urls ) ) $add_urls .= "\n"; $add_urls .= $row['src_url']; $Update = true; $AddedCount++; } } if( $Update ) { // Make API CALL to add files to queue here! $UpdateResults = powepress_admin_migrate_add_urls( $add_urls ); if( empty($UpdateResults) ) $Update = false; } if( $Update ) { // IF the API call was successful, lets save the list locally if( $update_option ) update_option('powerpress_migrate_queued', $QueuedFiles); else add_option('powerpress_migrate_queued', $QueuedFiles, '', 'no'); powerpress_page_message_add_notice( sprintf(__('%d media files added to migration queue.', 'powerpress'), $AddedCount) ); } if( $AlreadyAddedCount > 0 ) { powerpress_page_message_add_notice( sprintf(__('%d media files were already added to migration queue.', 'powerpress'), $AlreadyAddedCount) ); } } function powerpress_admin_migrate_step1() { // Use check_admin_referer('powerpress-migrate-media'); when handling this post request ?>
$row ) { if( $row['source_url'] == $src_url ) { $found = $row; break; } } reset($results); return $found; } function powerpress_admin_migrate_step2($QueuedResults, $MigrateStatus, $CompletedResults) { $update_episodes = false; $count = count($QueuedResults); $MigrateResults = get_option('powerpress_migrate_results'); // $MigrateStatus['updated_timestamp'] < current_time('timestamp')-(60*30) if( empty($MigrateResults['updated_timestamp']) || $MigrateResults['updated_timestamp'] < ( current_time( 'timestamp') - (60*30) ) ) { $update_option = true; if( $MigrateResults == false ) $update_option = false; $MigrateResults = powerpress_admin_migrate_get_migrated_by_status('all'); $MigrateResults['updated_timestamp'] = current_time( 'timestamp'); if( $update_option ) update_option('powerpress_migrate_results', $MigrateResults ); else add_option('powerpress_migrate_results', $MigrateResults, '', 'no'); } $CompletedResults = get_option('powerpress_migrate_completed'); ?>'; echo sprintf(__('%d migrated files found on this site.', 'powerpress'), $GLOBALS['g_powerpress_total_files_found']); echo '
'; } if( !empty($GLOBALS['g_powerpress_already_migrated']) ) { echo ''; echo sprintf(__('%d episodes already updated with new URLs.', 'powerpress'), $GLOBALS['g_powerpress_already_migrated']); echo '
'; } if( !empty($GLOBALS['g_powerpress_update_errors']) ) { echo ''; echo sprintf(__('%d update errors.', 'powerpress'), $GLOBALS['g_powerpress_update_errors']); echo '
'; } ?>
" onclick="return confirm('');">