PluginProbe
PowerPress Podcasting plugin by Blubrry / trunk
PowerPress Podcasting plugin by Blubrry vtrunk
11.17.9 11.17.8 11.17.7 11.17.6 11.17.4 11.17.3 11.17.2 11.17.1 11.17 11.16.11 11.16.10 11.16.9 11.16.8 11.16.7 11.16.6 11.16.5 11.16.4 11.16.3 11.16.2 11.16.1 11.9.13 11.9.14 11.9.15 11.9.16 11.9.17 All 383 releases
powerpress / powerpressadmin-migrate.php

powerpressadmin-migrate.php in PowerPress Podcasting plugin by Blubrry trunk, at powerpressadmin-migrate.php

1,266 lines 51.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3
4 function powerpress_admin_verify_url($url)
5 {
6 $wp_remote_options = array();
7 $wp_remote_options['user-agent'] = 'Blubrry PowerPress/'.POWERPRESS_VERSION;
8 $wp_remote_options['httpversion'] = '1.1';
9 $response = wp_remote_head( $url, $wp_remote_options );
10
11 for( $x = 0; $x < 5; $x++ )
12 {
13 // Redirect 1-5
14 if( !is_wp_error( $response ) && ($response['response']['code'] == 301 || $response['response']['code'] == 302) )
15 {
16 $headers = wp_remote_retrieve_headers( $response );
17 $response = wp_remote_head( $headers['location'], $wp_remote_options );
18 }
19 else
20 {
21 break;// Either we had an error or the response code is no longer a redirect
22 }
23 }
24
25 if ( is_wp_error( $response ) )
26 {
27 return array('error'=>$response->get_error_message() );
28 }
29
30 if( isset($response['response']['code']) && ($response['response']['code'] < 200 || $response['response']['code'] > 203) )
31 {
32 return array('error'=>'Error, HTTP '.$response['response']['code'] );
33 }
34
35 return array('error'=>false);
36 }
37
38 function powerpress_admin_migrate_get_files($clean=false, $exclude_blubrry=true)
39 {
40 global $wpdb;
41
42 $return = array();
43 //$return['feeds_required'] = 0;
44 $query = "SELECT p.ID, p.post_title, p.post_date, pm.meta_id, pm.post_id, pm.meta_key, pm.meta_value ";
45 $query .= "FROM {$wpdb->posts} AS p ";
46 $query .= "INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id ";
47 $query .= "WHERE (pm.meta_key = 'enclosure' OR pm.meta_key LIKE '\_%:enclosure') ";
48 $query .= "AND p.post_type != 'revision' ";
49 $query .= "GROUP BY pm.meta_id ";
50 $query .= "ORDER BY p.post_date DESC ";
51
52 $results_data = $wpdb->get_results($query, ARRAY_A);
53 if( $results_data )
54 {
55 foreach( $results_data as $null => $row )
56 {
57 $meta_id = $row['meta_id'];
58 $EpisodeData = powerpress_get_enclosure_data($row['post_id'], 'podcast', $row['meta_value'], false); // Get the enclosure data with no redirect added
59
60 if( $exclude_blubrry && preg_match('/(content[0-9]*|mc|ins|protected)\.blubrry\.(com|biz)/i', $EpisodeData['url']) )
61 continue; // Skip media hosted on blubrry in this case
62
63 if( !$clean )
64 $return[$meta_id] = $row;
65 if( !$exclude_blubrry )
66 $return[$meta_id]['on_blubrry'] = ( preg_match('/(content[0-9]*|mc|ins|protected)\.blubrry\.(com|biz)/i', $EpisodeData['url']) == 1 );
67 $return[$meta_id]['src_url'] = $EpisodeData['url'];
68 }
69 }
70 return $return;
71 }
72
73
74 function powepress_admin_migrate_add_urls($urls)
75 {
76 $Settings = get_option('powerpress_general');
77 $creds = get_option('powerpress_creds');
78 require_once(POWERPRESS_ABSPATH .'/powerpressadmin-auth.class.php');
79 $auth = new PowerPressAuth();
80 if( empty($Settings['blubrry_auth']) && !$creds )
81 {
82 powerpress_page_message_add_error( sprintf(__('You must have a blubrry Podcast Hosting account to continue.', 'powerpress')) .' '. '<a href="https://blubrry.com/services/podcast-hosting/" target="_blank">'. __('Learn More', 'powerpress') .'</a>', 'inline', false );
83 return false;
84 }
85
86 $PostArgs = array('urls'=>$urls);
87
88 $json_data = false;
89 $api_url_array = powerpress_get_api_array();
90 if (is_plugin_active('powerpress-hosting/powerpress-hosting.php')) {
91 $website_detection_string = "?wp_blubrry_hosted=true";
92 } else {
93 $website_detection_string = "?wp_admin_url=" . urlencode(admin_url());
94 }
95 if ($creds) {
96 $accessToken = powerpress_getAccessToken();
97 $req_url = sprintf('/2/media/%s/migrate_add.json%s', urlencode($Settings['blubrry_program_keyword']), $website_detection_string);
98 $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'&'. POWERPRESS_BLUBRRY_API_QSA:'');
99 $results = $auth->api($accessToken, $req_url, $PostArgs);
100 } else {
101 foreach ($api_url_array as $index => $api_url) {
102 $req_url = sprintf('%s/media/%s/migrate_add.json%s', rtrim($api_url, '/'), urlencode($Settings['blubrry_program_keyword']), $website_detection_string);
103 $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA') ? '&' . POWERPRESS_BLUBRRY_API_QSA : '');
104
105 $json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], $PostArgs);
106 if (!$json_data && $api_url == 'https://api.blubrry.com/') { // Lets force cURL and see if that helps...
107 $json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth'], $PostArgs, 15, false, true);
108 }
109 if ($json_data != false)
110 break;
111 }
112 $results = powerpress_json_decode($json_data);
113
114 if (empty($results)) {
115 $results = array();
116 $results['error'] = __('Unknown error occurred decoding results from server.', 'powerpress');
117 }
118 }
119
120 if( !empty($results['error']) )
121 {
122 $error = __('Blubrry Migrate Media Error', 'powerpress') .': '. $results['error'];
123 powerpress_page_message_add_error($error);
124 return false;
125 } else if( empty($results) )
126 {
127 if( !empty($GLOBALS['g_powerpress_remote_errorno']) && $GLOBALS['g_powerpress_remote_errorno'] == 401 )
128 $error = __('Incorrect sign-in email address or password.', 'powerpress') .' '. __('Verify your account settings then try again.', 'powerpress');
129 else if( !empty($GLOBALS['g_powerpress_remote_error']) )
130 $error = $GLOBALS['g_powerpress_remote_error'];
131 else
132 $error = __('Authentication failed.', 'powerpress');
133 powerpress_page_message_add_error($error);
134 return false;
135 }
136
137 // unlikely to be necessary for most sites
138 // i discovered in testing that this value needs cleared and won't automatically overwrite
139 // in the event of someone doing another migration for a different program
140 $prev_saved_val = get_option('blubrry_manage_media');
141 if ($prev_saved_val) {
142 delete_option('blubrry_manage_media');
143 }
144
145 if (!empty($results['publisher'])) {
146 add_option('blubrry_manage_media', $results['publisher']);
147 } else {
148 add_option('blubrry_manage_media', 'https://publish.blubrry.com/');
149 }
150
151 return $results;
152 }
153
154
155 function powerpress_admin_migrate_get_status()
156 {
157 $Settings = get_option('powerpress_general');
158 $creds = get_option('powerpress_creds');
159 require_once(POWERPRESS_ABSPATH .'/powerpressadmin-auth.class.php');
160 $auth = new PowerPressAuth();
161 if( empty($Settings['blubrry_auth']) && !$creds )
162 {
163 powerpress_page_message_add_error( sprintf(__('You must have a blubrry Podcast Hosting account to continue.', 'powerpress')), 'inline', false );
164 return false;
165 }
166
167
168 $json_data = false;
169 $api_url_array = powerpress_get_api_array();
170 if ($creds) {
171 $accessToken = powerpress_getAccessToken();
172 $req_url = sprintf('/2/media/%s/migrate_status.json?status=summary&simple=true', urlencode($Settings['blubrry_program_keyword']));
173 $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'?'. POWERPRESS_BLUBRRY_API_QSA:'');
174 $results = $auth->api($accessToken, $req_url);
175 } else {
176 foreach ($api_url_array as $index => $api_url) {
177 $req_url = sprintf('%s/media/%s/migrate_status.json?status=summary&simple=true', rtrim($api_url, '/'), $Settings['blubrry_program_keyword']);
178 $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA') ? '&' . POWERPRESS_BLUBRRY_API_QSA : '');
179 $json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth']);
180 if ($json_data != false)
181 break;
182 }
183
184 if (!$json_data) {
185 $error = '';
186 if (!empty($GLOBALS['g_powerpress_remote_errorno']) && $GLOBALS['g_powerpress_remote_errorno'] == 401)
187 $error = __('Incorrect sign-in email address or password.', 'powerpress') . ' ' . __('Verify your account settings then try again.', 'powerpress');
188 else if (!empty($GLOBALS['g_powerpress_remote_error']))
189 $error = $GLOBALS['g_powerpress_remote_error'];
190 else
191 $error = __('Authentication failed.', 'powerpress');
192 powerpress_page_message_add_error($error);
193 return false;
194 }
195 //mail('cio', 'ok', $json_data);
196 $results = powerpress_json_decode($json_data);
197
198 if (empty($results)) {
199 $results = array();
200 $results['error'] = __('Unknown error occurred decoding results from server.', 'powerpress');
201 }
202 }
203
204 if( !empty($results['error']) )
205 {
206 $error = __('Blubrry Migrate Media Error', 'powerpress') .': '. $results['error'];
207 powerpress_page_message_add_error($error);
208 return false;
209 }
210
211 return $results;
212 }
213
214
215 function powerpress_admin_migrate_get_migrated_by_status($status='migrated')
216 {
217 $Settings = get_option('powerpress_general');
218 $creds = get_option('powerpress_creds');
219 require_once(POWERPRESS_ABSPATH .'/powerpressadmin-auth.class.php');
220 $auth = new PowerPressAuth();
221 if( empty($Settings['blubrry_auth']) && !$creds )
222 {
223 powerpress_page_message_add_error( sprintf(__('You must have a blubrry Podcast Hosting account to continue.', 'powerpress')), 'inline', false );
224 return false;
225 }
226
227
228 $json_data = false;
229 $api_url_array = powerpress_get_api_array();
230 if ($creds) {
231 $accessToken = powerpress_getAccessToken();
232 $req_url = sprintf('/2/media/%s/migrate_status.json?status=%s&limit=10000&simple=true', urlencode($Settings['blubrry_program_keyword']), urlencode($status));
233 $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'?'. POWERPRESS_BLUBRRY_API_QSA:'');
234 $results = $auth->api($accessToken, $req_url);
235 } else {
236 foreach ($api_url_array as $index => $api_url) {
237 $req_url = sprintf('%s/media/%s/migrate_status.json?status=%s&limit=10000&simple=true', rtrim($api_url, '/'), $Settings['blubrry_program_keyword'], urlencode($status));
238 $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA') ? '&' . POWERPRESS_BLUBRRY_API_QSA : '');
239 $json_data = powerpress_remote_fopen($req_url, $Settings['blubrry_auth']);
240 if ($json_data != false)
241 break;
242 }
243
244 if (!$json_data) {
245 if (!empty($GLOBALS['g_powerpress_remote_errorno']) && $GLOBALS['g_powerpress_remote_errorno'] == 401)
246 $error = __('Incorrect sign-in email address or password.', 'powerpress') . ' ' . __('Verify your account settings then try again.', 'powerpress');
247 else if (!empty($GLOBALS['g_powerpress_remote_error']))
248 $error = '<p>' . $GLOBALS['g_powerpress_remote_error'];
249 else
250 $error = __('Authentication failed.', 'powerpress');
251 powerpress_page_message_add_error($error);
252 return false;
253 }
254
255 $results = powerpress_json_decode($json_data);
256 if (empty($results)) {
257 $error = __('Unknown error occurred decoding results from server.', 'powerpress');
258 powerpress_page_message_add_error($error);
259 return false;
260 }
261 }
262 if( !empty($results['error']) )
263 {
264 $error = __('Blubrry Migrate Media Error', 'powerpress') .': '. $results['error'];
265 powerpress_page_message_add_error($error);
266 return false;
267 }
268
269 return $results;
270 }
271
272
273 // Handle POST/GET page requests here
274 function powerpress_admin_migrate_request()
275 {
276 if( !empty($_GET['migrate_step']) )
277 {
278 switch( $_GET['migrate_step'] )
279 {
280 case 1: {
281 $GLOBALS['powerpress_migrate_stats'] = powerpress_admin_extension_counts();
282 }; break;
283
284 }
285 }
286
287 if( !empty($_POST['migrate_action']) )
288 {
289 check_admin_referer('powerpress-migrate-media');
290
291 switch($_POST['migrate_action'])
292 {
293 case 'queue_episodes': {
294
295 if( !empty($_POST['Migrate']) )
296 {
297 powerpress_admin_queue_files($_POST['Migrate']);
298
299 // Else error message handled in function called above
300 }
301 }; break;
302 case 'update_episodes': { // <input type="hidden" name="migrate_action" value="update_episodes" />
303
304 $MigrateResultsPrevious = get_option('powerpress_migrate_results');
305 $add_option = false;
306 if( $MigrateResultsPrevious == false )
307 $add_option = true;
308 unset($MigrateResultsPrevious); // Free up the memory
309
310 //$URLs = powerpress_admin_migrate_get_migrated_by_status('completed');
311 $URLs = powerpress_admin_migrate_get_migrated_by_status('all');
312 if( !empty($URLs) )
313 {
314 $URLs['updated_timestamp'] = current_time( 'timestamp' );
315
316 if( $add_option )
317 add_option('powerpress_migrate_results', $URLs, '', 'no'); // Make sure it is not auto loaded
318 else
319 update_option('powerpress_migrate_results', $URLs);
320
321 if( !empty($URLs['results']) )
322 {
323 $update_option = true;
324 $CompletedResults = get_option('powerpress_migrate_completed');
325 if( $CompletedResults == false )
326 $update_option = false;
327 if( empty($CompletedResults['completed_count']) )
328 $CompletedResults['completed_count'] = 0;
329 if( empty($CompletedResults['error_count']) )
330 $CompletedResults['error_count'] = 0;
331 if( empty($GLOBALS['g_powerpress_verify_failed_count']) )
332 $GLOBALS['g_powerpress_verify_failed_count'] = 0;
333 if( empty($GLOBALS['g_powerpress_already_migrated']) )
334 $GLOBALS['g_powerpress_already_migrated'] = 0;
335 if( empty($GLOBALS['g_powerpress_total_files_found']) )
336 $GLOBALS['g_powerpress_total_files_found'] = 0;
337 if( empty($GLOBALS['g_powerpress_update_errors']) )
338 $GLOBALS['g_powerpress_update_errors'] = 0;
339 $QueuedEpisodes = get_option('powerpress_migrate_queued'); // Array of key meta_id => URL value pairs
340
341 $FoundCount = 0;
342 if( !empty($QueuedEpisodes) )
343 {
344 foreach( $URLs['results'] as $index => $row )
345 {
346 if( $row['status'] != 'completed' ) // Not migrated
347 continue;
348
349 $source_url = $row['source_url'];
350 $new_url = $row['new_url'];
351 $found = array_keys($QueuedEpisodes, $source_url);
352
353 if( empty($found) )
354 {
355 continue; // Nothing found here
356 }
357
358 $FoundCount++;
359 $GLOBALS['g_powerpress_total_files_found']++;
360
361 foreach( $found as $null => $meta_id )
362 {
363 // Get the post meta
364 $meta_object = get_metadata_by_mid('post', $meta_id);
365 if( !is_object($meta_object) )
366 continue; // Weird
367
368 $meta_data = $meta_object->meta_value;
369
370 $parts = explode("\n", $meta_data, 2);
371 $other_meta_data = false;
372 if( count($parts) == 2 )
373 list($current_url, $other_meta_data) = $parts;
374 else
375 $current_url = trim($meta_data);
376
377 $current_url = trim($current_url);
378
379 // We already migrated this one, or it was modified anyway
380 if( $source_url != $current_url )
381 {
382 //echo "$source_url != $current_url ";
383 $GLOBALS['g_powerpress_already_migrated']++;
384 continue;
385 }
386
387 // Verify the URL:
388 if( !empty($_POST['PowerPressVerifyURLs']) )
389 {
390 $verified= powerpress_admin_verify_url($new_url);
391 if( !empty($verified['error']) )
392 {
393 // TODO: Handle the error here...
394 $GLOBALS['g_powerpress_verify_failed_count']++;
395 continue;
396 }
397 }
398
399 $new_meta_data = $new_url;
400 if( $other_meta_data )
401 $new_meta_data .= "\n". $other_meta_data;
402
403 // save the new URL
404 if( update_metadata_by_mid( 'post', $meta_id, $new_meta_data) )
405 {
406 $CompletedResults['completed_count']++;
407 $CompletedResults['results'][ $meta_id ] = $new_url;
408 }
409 else
410 {
411 $CompletedResults['error_count']++;
412 $GLOBALS['g_powerpress_update_errors']++;
413 }
414 }
415 }
416
417 if( $CompletedResults['completed_count'] > 0 )
418 {
419 if( $update_option )
420 update_option('powerpress_migrate_completed', $CompletedResults);
421 else
422 add_option('powerpress_migrate_completed', $CompletedResults, '', 'no'); // Make sure we are not preloading
423 powerpress_page_message_add_notice( sprintf(__('Episodes updated successfully.', 'powerpress')) );
424 return;
425 }
426
427 powerpress_page_message_add_notice( sprintf(__('No Episodes updated. Please see results.', 'powerpress')) );
428 return;
429 }
430 }
431 else
432 {
433 powerpress_page_message_add_notice( sprintf(__('No episodes updated.', 'powerpress')) );
434 }
435 }
436
437 // delete the cron task that check for the migration status
438 $timestamp = wp_next_scheduled( 'powerpress_admin_migration_hook' );
439 wp_unschedule_event( $timestamp, 'powerpress_admin_migration_hook' );
440 }; break;
441 }
442 }
443
444 if( !empty($_GET['migrate_action']) )
445 {
446 check_admin_referer('powerpress-migrate-media');
447
448 switch($_GET['migrate_action'])
449 {
450 case 'reset_migrate_media': {
451 delete_option('powerpress_migrate_completed');
452 delete_option('powerpress_migrate_queued');
453 delete_option('powerpress_migrate_status');
454 delete_option('powerpress_migrate_results');
455 powerpress_page_message_add_notice( sprintf(__('Media migration reset successfully.', 'powerpress')) );
456 }; break;
457 }
458 }
459 }
460
461 function powerpress_admin_extension_counts()
462 {
463 $files = powerpress_admin_migrate_get_files(true, false);
464 $extensions = array(); // 'blubrry'=>0, 'mp3'=>0, 'm4a'=>0, 'mp4'=>0, 'm4v'=>0, '*'=>0 );
465 foreach( $files as $meta_id => $row )
466 {
467 $extension = '*';
468
469 $parts = pathinfo($row['src_url']);
470 if (empty($parts['extension'])) {
471 continue;
472 }
473 if (strpos($parts['extension'], '?') !== false) {
474 $ext_query_string = explode('?', $parts['extension']);
475 $parts['extension'] = $ext_query_string[0];
476 }
477 if( preg_match('/(mp3|m4a|mp4|m4v|mov)/i', $parts['extension']) )
478 $extension = strtolower($parts['extension']);
479
480 if( !empty($row['on_blubrry']) )
481 $extension = 'blubrry';
482
483 if( empty($extensions[ $extension ]) )
484 $extensions[ $extension ] = 0;
485
486 $extensions[ $extension ]++;
487 }
488 return $extensions;
489 }
490
491 function powerpress_admin_queue_files($extensions=array() )
492 {
493 $add_urls = '';
494 $extensions_preg_match = '';
495 foreach( $extensions as $extension => $null )
496 {
497 if( $extension == '*' )
498 {
499 $extensions_preg_match = '.*';
500 break; // Lets just match everything
501 }
502 if( !empty($extensions_preg_match) )
503 $extensions_preg_match .= '|';
504 $extensions_preg_match .= preg_quote($extension);
505 }
506
507 if( empty($extensions_preg_match) )
508 {
509 // No files specified, no error message needed
510 return;
511 }
512
513 $files = powerpress_admin_migrate_get_files(true, true); // Keep the URLs clean, excude blubrry media URLs
514
515 $QueuedFiles = array();
516 $Update = false;
517 $update_option = true;
518 $PastResults = get_option('powerpress_migrate_queued');
519 if( $PastResults == false )
520 $update_option = false;
521 if( is_array($PastResults) )
522 $QueuedFiles = $PastResults;
523 $AddedCount = 0;;
524 $AlreadyAddedCount = 0;
525
526 foreach( $files as $meta_id => $row )
527 {
528 $parts = pathinfo($row['src_url']);
529 if (empty($parts['extension'])) {
530 continue;
531 }
532 if (strpos($parts['extension'], '?') !== false) {
533 $ext_query_string = explode('?', $parts['extension']);
534 $parts['extension'] = $ext_query_string[0];
535 }
536 if( preg_match('/('.$extensions_preg_match.')/i', $parts['extension']) )
537 {
538 if( !empty($QueuedFiles[ $meta_id ]) && $QueuedFiles[ $meta_id ] == $row['src_url'] )
539 {
540 $AlreadyAddedCount++;
541 continue; // Already queued
542 }
543
544 $QueuedFiles[ $meta_id ] = $row['src_url'];
545 if( !empty($add_urls ) )
546 $add_urls .= "\n";
547 $add_urls .= $row['src_url'];
548 $Update = true;
549 $AddedCount++;
550 }
551 }
552
553 if( $Update )
554 {
555 // Make API CALL to add files to queue here!
556 $UpdateResults = powepress_admin_migrate_add_urls( $add_urls );
557
558 if( empty($UpdateResults) )
559 $Update = false;
560 }
561
562 if( $Update )
563 {
564 // IF the API call was successful, lets save the list locally
565 if( $update_option )
566 update_option('powerpress_migrate_queued', $QueuedFiles);
567 else
568 add_option('powerpress_migrate_queued', $QueuedFiles, '', 'no');
569 powerpress_page_message_add_notice( sprintf(__('%d media files added to migration queue.', 'powerpress'), $AddedCount) );
570 }
571
572 if( $AlreadyAddedCount > 0 )
573 {
574 powerpress_page_message_add_notice( sprintf(__('%d media files were already added to migration queue.', 'powerpress'), $AlreadyAddedCount) );
575 }
576
577
578
579 if( !wp_next_scheduled('powerpress_admin_migration_hook')) {
580 add_action( 'powerpress_admin_migration_hook', 'powerpress_admin_migration_cron' );
581 wp_schedule_event(time(), 'hourly', 'powerpress_admin_migration_hook');
582 }
583 }
584
585
586 function powerpress_admin_migrate_step1()
587 {
588 // Use check_admin_referer('powerpress-migrate-media'); when handling this post request
589 ?>
590 <form enctype="multipart/form-data" method="post" action="<?php echo admin_url( 'admin.php?page=powerpress/powerpressadmin_migrate.php'); ?>">
591 <?php wp_nonce_field('powerpress-migrate-media'); ?>
592 <input type="hidden" name="action" value="powerpress-migrate-media" />
593 <input type="hidden" name="migrate_action" value="queue_episodes" />
594 <h2><?php echo __('Migrate Media to your Blubrry Podcast Media Hosting Account', 'powerpress'); ?></h2>
595
596 <div id="powerpress_steps" class="pp-migrate-container">
597 <div class="pp-migrate-container-heading">
598 <h1><div class="powerpress-step-blue">1</div><?php echo __('Select Media to Migrate', 'powerpress'); ?></h1>
599 </div>
600 <div class="pp-migrate-content">
601
602 <ul>
603 <?php
604 if( count($GLOBALS['powerpress_migrate_stats']) == 0 )
605 {
606 ?>
607 <li>
608 <?php echo __('No media found to migrate', 'powerpress'); ?>
609 </li>
610 <?php
611 }
612 $types = array('mp3', 'm4a', 'mp4', 'm4v', 'mov', '*', 'blubrry');
613 foreach( $types as $null => $extension )
614 {
615 if( empty($GLOBALS['powerpress_migrate_stats'][$extension]) )
616 continue;
617 $count = $GLOBALS['powerpress_migrate_stats'][$extension];
618 $checked = ' checked';
619 switch( $extension )
620 {
621 case 'mp3': $label = __('mp3 audio files', 'powerpress'); break;
622 case 'm4a': $label = __('m4a audio files', 'powerpress'); break;
623 case 'mp4': $label = __('mp4 video files', 'powerpress'); break;
624 case 'm4v': $label = __('m4v video files', 'powerpress'); break;
625 case 'mov': $label = __('mov video files', 'powerpress'); break;
626 case 'blubrry': $label = __('media hosted by Blubrry', 'powerpress'); break;
627 default: $label = __('Other media formats', 'powerpress'); $checked = '';
628 }
629
630 ?>
631 <li>
632 <?php if( $extension == 'blubrry' ) { ?>
633 <h4><input type="checkbox" name="NULL[<?php echo $extension; ?>]" value="0" disabled /><?php echo $label; ?>
634 <?php } else { ?>
635 <h4><input type="checkbox" name="Migrate[<?php echo $extension; ?>]" value="1" <?php echo $checked; ?> /> <?php echo $label; ?>
636 <?php } ?>
637 <?php echo sprintf( __('(%d found)', 'powerpress'), $count); ?></h4>
638 </li>
639 <?php } ?>
640 </ul>
641 <?php
642 if( count($GLOBALS['powerpress_migrate_stats']) )
643 ?><p class="submit"><button type="submit" class="pp_button" name="Submit"><span><?php echo __('Request Migration', 'powerpress'); ?></span></button></p><?php
644 ?>
645 </div></div>
646 </form>
647
648 <p style="margin-bottom: 40px;">&#8592; <a href="<?php echo admin_url( 'admin.php?page=powerpress/powerpressadmin_migrate.php'); ?>"><?php echo __('Migrate Media', 'powerpress'); ?></a></p>
649 <?php
650 }
651
652 function powerpress_admin_migrate_find_in_results(&$results, $src_url)
653 {
654 $found = false;
655 foreach( $results as $index => $row )
656 {
657 if( $row['source_url'] == $src_url )
658 {
659 $found = $row;
660 break;
661 }
662 }
663 reset($results);
664
665 return $found;
666 }
667
668 function powerpress_admin_migrate_step2($QueuedResults, $MigrateStatus, $CompletedResults)
669 {
670 $update_episodes = false;
671 $count = count($QueuedResults);
672 $MigrateResults = get_option('powerpress_migrate_results');
673 // allow a refresh every three minutes (was previously every thirty, but now we're allowing them to check details while migration is in progress, so we'll need to update more often)
674 if( empty($MigrateResults['updated_timestamp']) || $MigrateResults['updated_timestamp'] < ( current_time( 'timestamp') - (60*3) ) )
675 {
676 $update_option = true;
677 if( $MigrateResults == false )
678 $update_option = false;
679
680 $MigrateResults = powerpress_admin_migrate_get_migrated_by_status('all');
681 $MigrateResults['updated_timestamp'] = current_time( 'timestamp');
682 if( $update_option )
683 update_option('powerpress_migrate_results', $MigrateResults );
684 else
685 add_option('powerpress_migrate_results', $MigrateResults, '', 'no');
686 }
687
688 $CompletedResults = get_option('powerpress_migrate_completed');
689 ?>
690 <h2><?php echo __('Migrate Media to your Blubrry Podcast Media Hosting Account', 'powerpress'); ?></h2>
691
692
693 <div id="powerpress_single_step">
694 <h3><?php echo __('List of requested media', 'powerpress'); ?></h3>
695 </div>
696 <!-- <p><?php echo sprintf( __('%d files requested', 'powerpress'), $count); ?></p> -->
697 <?php if( !empty($MigrateStatus['queued']) && false ) { ?><p><?php echo sprintf( __('%d files in queue', 'powerpress'), $MigrateStatus['queued']); ?></p><?php } ?>
698 <?php if( !empty($MigrateStatus['completed']) && false ) { ?><p><?php echo sprintf( __('%d migrated files available', 'powerpress'), $MigrateStatus['completed']); ?></p><?php } ?>
699 <?php if( !empty($MigrateStatus['skipped']) && false ) { ?><p><?php echo sprintf( __('%d skipped', 'powerpress'), $MigrateStatus['skipped']); ?></p><?php } ?>
700 <?php if( !empty($MigrateStatus['failed']) && false ) { ?><p><?php echo sprintf( __('%d failed', 'powerpress'), $MigrateStatus['failed']); ?></p><?php } ?>
701 <?php if( !empty($CompletedResults['completed_count']) && false ) { ?><p><?php echo sprintf( __('%d episodes updated', 'powerpress'), $CompletedResults['completed_count']); ?></p><?php } ?>
702 <style type="text/css">
703 table.powerpress-migration-table {
704 min-width: 80%;
705 }
706 table.powerpress-migration-table th {
707 text-align: left;
708 }
709 table.powerpress-migration-table td {
710 padding-left: 6px;
711 text-overflow: ellipsis;
712 overflow: hidden;
713 white-space: nowrap;
714 max-width: 400px;
715 }
716 table.powerpress-migration-table tr:hover {
717 background-color: #DDDDDD;
718 }
719 .powerpress-migrate-e,
720 .powerpress-migrate-s {
721 width: 18%;
722 }
723 </style>
724 <table class="powerpress-migration-table">
725 <tr>
726 <th class="powerpress-migrate-f"><?php echo __('File', 'powerpress'); ?></th>
727 <th class="powerpress-migrate-s"><?php echo __('Migration Status', 'powerpress'); ?></th>
728 <th class="powerpress-migrate-e"><?php echo __('Episode Updated', 'powerpress'); ?></th>
729 </tr>
730 <?php
731 foreach( $QueuedResults as $meta_id => $url )
732 {
733 $status = __('Requested', 'powerpress');
734 $updated = '-';
735 $file = basename($url);
736
737 if( !empty($CompletedResults['results'][$meta_id]) )
738 {
739 $found = array('status'=>'completed', 'new_url'=>$CompletedResults['results'][$meta_id]);
740 $updated = __('Yes', 'powerpress');
741 }
742 else
743 {
744 $found = powerpress_admin_migrate_find_in_results($MigrateResults['results'], $url );
745 }
746
747 if( !empty($found['status']) )
748 {
749 switch($found['status'])
750 {
751 case 'completed': {
752 $status = __('Completed', 'powerpress');
753 if( empty($CompletedResults['results'][$meta_id]) )
754 {
755 $updated = __('No', 'powerpress');
756 $update_episodes = true;
757 }
758 }; break;
759 case 'skipped': $status = __('Skipped', 'powerpress'); break;
760 case 'error': $status = __('Error', 'powerpress'); break;
761 }
762 }
763 ?>
764 <tr>
765 <td><?php echo htmlspecialchars($file); ?> &nbsp;</td>
766 <td><?php echo $status; ?></td>
767 <td><?php echo $updated; ?></td>
768 </tr>
769 <?php
770 }
771 ?>
772 </table>
773
774
775 <?php
776 }
777
778 function powerpress_admin_migrate_step3($MigrateStatus, $CompletedResults)
779 {
780 // $MigrateStatus['completed']
781 ?>
782 <form enctype="multipart/form-data" method="post" action="<?php echo admin_url( 'admin.php?page=powerpress/powerpressadmin_migrate.php'); ?>">
783 <?php wp_nonce_field('powerpress-migrate-media'); ?>
784 <input type="hidden" name="action" value="powerpress-migrate-media" />
785 <input type="hidden" name="migrate_action" value="update_episodes" />
786 <h2><?php echo __('Migrate Media to your Blubrry Podcast Media Hosting Account', 'powerpress'); ?></h2>
787
788 <div id="powerpress_single_step">
789 <h3><?php echo __('Step 3', 'powerpress'); ?> - <?php echo __('Update your Episodes', 'powerpress'); ?></h3>
790 </div>
791
792
793 <?php if( !empty($MigrateStatus['completed']) ) { ?><p><?php echo sprintf( __('%d migrated files available', 'powerpress'), $MigrateStatus['completed']); ?></p><?php } ?>
794 <?php if( !empty($CompletedResults['completed_count']) ) { ?><p><?php echo sprintf( __('%d episodes updated', 'powerpress'), $CompletedResults['completed_count']); ?></p><?php } ?>
795 <p><?php echo __('', 'powerpress'); ?></p>
796
797 <p style="margin: 30px 0;"><?php echo __('We recommend backing up your database before proceeding.', 'powerpress'); ?></p>
798
799
800 <p class="submit">
801 <input type="submit" name="Submit" id="powerpress_save_button" class="button-primary button-blubrry" value="<?php echo __('Update Episodes', 'powerpress'); ?>" onclick="" />
802 &nbsp;
803 <input type="checkbox" name="PowerPressVerifyURLs" value="1" checked />
804 <strong><?php echo __('Verify URLs', 'powerpress'); ?></strong>
805 (<?php echo __('Does not change URL if invalid', 'powerpress'); ?>)</p>
806 </p>
807
808
809 </form>
810 <p style="margin-bottom: 40px;">&#8592; <a href="<?php echo admin_url( 'admin.php?page=powerpress/powerpressadmin_migrate.php'); ?>"><?php echo __('Migrate Media', 'powerpress'); ?></a></p>
811 <?php
812 }
813
814
815 function powerpress_admin_migrate()
816 {
817 add_thickbox();
818 $General = powerpress_get_settings('powerpress_general');
819 $files = powerpress_admin_migrate_get_files();
820
821 // styles for create episode and PP settings buttons
822 if (defined('WP_DEBUG')) {
823 if (WP_DEBUG) {
824 wp_enqueue_style('powerpress_onboarding_styles', plugin_dir_url(__FILE__) . 'css/onboarding.css', array(), POWERPRESS_VERSION);
825 } else {
826 wp_enqueue_style('powerpress_onboarding_styles', plugin_dir_url(__FILE__) . 'css/onboarding.min.css', array(), POWERPRESS_VERSION);
827 }
828 } else {
829 wp_enqueue_style('powerpress_onboarding_styles', plugin_dir_url(__FILE__) . 'css/onboarding.min.css', array(), POWERPRESS_VERSION);
830 }
831
832 if( !empty($_REQUEST['migrate_step']) && $_REQUEST['migrate_step'] == 1 )
833 {
834 powerpress_admin_migrate_step1();
835 return;
836 }
837
838 $Step = 0;
839 $RequestedCount = 0;
840 $BlubrryQueuedCount = 0;
841 $MigratedCount = 0;
842 $FailedCount = 0;
843 $SkippedCount = 0;
844 $QueuedResults = get_option('powerpress_migrate_queued');
845 if( is_array($QueuedResults) )
846 {
847 $RequestedCount = count($QueuedResults);
848 if( $RequestedCount > 0 )
849 $Step = 1;
850 }
851
852 $MigrateStatus = false;
853 if( $Step >= 1 || !empty($_GET['refresh_migrate_status']) )
854 {
855 $MigrateStatus = get_option('powerpress_migrate_status');
856 if( empty($MigrateStatus) || $MigrateStatus['updated_timestamp'] < current_time('timestamp')-(60*30) || !empty($_GET['refresh_migrate_status']) ) // Check every 30 minutes
857 {
858 $update_option = true;
859 if( $MigrateStatus == false )
860 $update_option = false;
861
862 $MigrateStatus = powerpress_admin_migrate_get_status();
863 if( is_array($MigrateStatus) )
864 {
865 $MigrateStatus['updated_timestamp'] = current_time( 'timestamp' );
866 if( $update_option )
867 update_option('powerpress_migrate_status', $MigrateStatus);
868 else
869 add_option('powerpress_migrate_status', $MigrateStatus, '', 'no' );
870 }
871 }
872 }
873
874 if( !empty($MigrateStatus['completed']) )
875 {
876 $Step = 3;
877 $MigratedCount = $MigrateStatus['completed'];
878 }
879 if( !empty($MigrateStatus['failed']) )
880 {
881 $FailedCount = $MigrateStatus['failed'];
882 }
883 if( !empty($MigrateStatus['skipped']) )
884 {
885 $SkippedCount = $MigrateStatus['skipped'];
886 }
887 if( !empty($MigrateStatus['queued']) )
888 {
889 $BlubrryQueuedCount = $MigrateStatus['queued'];
890 }
891
892 $CompletedResults = get_option('powerpress_migrate_completed');
893
894 if( !empty($_REQUEST['migrate_step']) && $_REQUEST['migrate_step'] == 2 && $Step > 0 )
895 {
896 powerpress_admin_migrate_step2($QueuedResults, $MigrateStatus, $CompletedResults);
897 return;
898 }
899
900 if( !empty($_REQUEST['migrate_step']) && $_REQUEST['migrate_step'] == '3' && $Step == 3 )
901 {
902 powerpress_admin_migrate_step3($MigrateStatus, $CompletedResults);
903 return;
904 }
905
906 // If we have powerpress credentials, check if the account has been verified
907 $creds = get_option('powerpress_creds');
908 powerpress_check_credentials($creds);
909 wp_enqueue_script('powerpress-admin', powerpress_get_root_url() . 'js/admin.js', array(), POWERPRESS_VERSION );
910
911 if( !empty($CompletedResults['completed_count']) )
912 {
913 $CompletedCount = $CompletedResults['completed_count'];
914 }
915
916 ?>
917 <div id="pp-migrate-page">
918 <?php powerpress_page_message_print(); ?>
919 <?php
920 if( !empty($GLOBALS['g_powerpress_verify_failed_count']) )
921 {
922 echo '<p>';
923 echo sprintf(__('%d urls failed verification.', 'powerpress'), $GLOBALS['g_powerpress_verify_failed_count']);
924 echo '</p>';
925 }
926
927 if( !empty($GLOBALS['g_powerpress_total_files_found']) )
928 {
929 echo '<p>';
930 echo sprintf(__('%d migrated files found on this site.', 'powerpress'), $GLOBALS['g_powerpress_total_files_found']);
931 echo '</p>';
932 }
933
934 if( !empty($GLOBALS['g_powerpress_already_migrated']) )
935 {
936 echo '<p>';
937 echo sprintf(__('%d episodes already updated with new URLs.', 'powerpress'), $GLOBALS['g_powerpress_already_migrated']);
938 echo '</p>';
939 }
940
941 if( !empty($GLOBALS['g_powerpress_update_errors']) )
942 {
943 echo '<p>';
944 echo sprintf(__('%d update errors.', 'powerpress'), $GLOBALS['g_powerpress_update_errors']);
945 echo '</p>';
946 }
947 ?>
948
949 <h1 style="margin-bottom: 1em;"><b><?php echo __('MIGRATION', 'powerpress'); ?></b></h1>
950
951 <?php
952
953 if (empty($RequestedCount) && empty($BlubrryQueuedCount) && empty($MigratedCount) && empty($CompletedCount)) {
954
955 $GLOBALS['powerpress_migrate_stats'] = powerpress_admin_extension_counts();
956
957 $pp_nonce = powerpress_login_create_nonce();
958 ?>
959
960 <div id="pp-migration-marketing" class="pp-migrate-container">
961 <div class="pp-migrate-content">
962 <h4><b><?php echo __('Transfer media files to your Blubrry hosting account', 'powerpress'); ?></b></h4>
963 <div style="margin-top: 1em;">
964 <img src="<?php echo powerpress_get_root_url(); ?>images/onboarding/hosting_icon.png" alt="" class="pp-migration-image" />
965 <h4 class="pp-migrate-subtitle"><?php echo __('This makes it easy to publish episodes right from your own site. Hosting customers enjoy integrated publishing features, such as stats with PowerPress.', 'powerpress'); ?>
966 <?php // If not hosting
967 if( empty($General['blubrry_hosting']) || $General['blubrry_hosting'] === 'false' ) { ?>
968 <br />
969 <a href="<?php echo esc_attr(add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignup&onboarding_type=hosting"))); ?>">
970 <?php echo __('Try Blubrry hosting FREE', 'powerpress'); ?>
971 </a>
972 <?php } ?>
973 </h4>
974 </div>
975 </div>
976 </div>
977
978 <div id="powerpress_steps" class="pp-migrate-container">
979 <div class="pp-migrate-container-heading">
980 <h1><div class="powerpress-step-blue">1</div><?php echo __('Migrate Media', 'powerpress'); ?></h1>
981 </div>
982 <div class="pp_flex-grid pp-migrate-content">
983 <div class="powerpress-step pp_col" id="powerpreess_step_1a">
984 <?php
985 $file_count = 0;
986 foreach($GLOBALS['powerpress_migrate_stats'] as $ext => $count) {
987 $file_count += $count;
988 }?>
989 <h1>
990 <?php echo $file_count . ' ' . __('episode files found', 'powerpress'); ?>
991 </h1>
992
993 <div style="margin-top: 1em;">
994 <a href="<?php echo admin_url("admin.php?page=powerpress/powerpressadmin_migrate.php&amp;action=powerpress-migrate-media&amp;migrate_step=1"); ?>">
995 <button type="button" class="pp_button"><span><?php echo __('START MIGRATION', 'powerpress'); ?></span></button>
996 </a>
997 </div>
998
999 </div>
1000 <div class="powerpress-step pp_col divider-left" id="powerpreess_step_1b">
1001 <h2><b><?php echo __('What is this?', 'powerpress'); ?></b></h2>
1002 <p><?php echo __('We locate the files we are able to transfer to your new account.', 'powerpress'); ?></p>
1003 <br />
1004 <p class="migrate-status-red"><?php echo __('Please complete migration before deleting the source of your files.', 'powerpress'); ?></p>
1005 </div>
1006 </div>
1007 </div>
1008 <?php }
1009 if( !empty($BlubrryQueuedCount) && empty($CompletedCount) ) { ?>
1010
1011 <div id="powerpress_steps" class="pp-migrate-container">
1012 <div class="pp-migrate-container-heading">
1013 <h1><div class="powerpress-step-blue">2</div><?php echo __('Migration Status', 'powerpress'); ?></h1>
1014 </div>
1015 <div class="pp_flex-grid pp-migrate-content">
1016 <div class="powerpress-step pp_col" style="text-align: center;">
1017 <img alt="Step 2" src="<?php echo powerpress_get_root_url() . 'images/onboarding/migration_bird.png' ?>"/>
1018 <img class="loading" alt="Migrating media..." src="<?php echo powerpress_get_root_url() . 'images/onboarding/loading_bar.gif' ?>"/>
1019 <h4 class="migrate-status-yellow">
1020 <?php echo __('Migrating...', 'powerpress'); ?>
1021 </h4>
1022 <br />
1023 <h2 class="migrate-status-blue"><?php echo sprintf(__('%d files migrated', 'powerpress'), $MigratedCount); ?></h2>
1024 <div class="pp_flex-grid" style="justify-content: space-around">
1025 <?php if ($BlubrryQueuedCount) { ?><h4>
1026 <?php echo sprintf(__('%d files in queue', 'powerpress'), $BlubrryQueuedCount); ?></h4> <?php } ?>
1027 <?php if ($FailedCount) { ?><h4 class="migrate-status-red">
1028 <?php echo sprintf(__('%d files failed', 'powerpress'), $FailedCount); ?></h4><?php } ?>
1029 <?php if ($SkippedCount) { ?><h4 class="migrate-status-yellow">
1030 <?php echo sprintf(__('%d files skipped', 'powerpress'), $SkippedCount); ?></h4><?php } ?>
1031 </div>
1032
1033 </div>
1034 <div class="powerpress-step pp_col divider-left" id="powerpreess_step_1b">
1035 <h2><b><?php echo __('How long will this take?', 'powerpress'); ?></b></h2>
1036 <p><?php echo __('Times may vary, dependent on the number of files. We will notify you once the migration is complete. You can leave this page and check back later.', 'powerpress'); ?></p>
1037 <div class="pp_flex-grid" style="justify-content: space-around">
1038 <h4>
1039 <a href="<?php echo admin_url("admin.php?page=powerpress/powerpressadmin_migrate.php&amp;action=powerpress-migrate-media&amp;refresh_migrate_status=1"); ?>">
1040 <?php echo __('Refresh Page', 'powerpress'); ?>
1041 </a>
1042 </h4>
1043 <h4>
1044 <a href="<?php echo admin_url() . wp_nonce_url("admin.php?action=powerpress-jquery-migrate-queue", 'powerpress-jquery-migrate-queue'); ?>&migrate_step=2&KeepThis=true&TB_iframe=true&modal=false" class="thickbox">
1045 <?php echo __('Migration Status Details', 'powerpress'); ?>
1046 </a>
1047 </h4>
1048 </div>
1049 <br />
1050 <p class="migrate-status-red"><?php echo __('Remember, complete the migration before deleting the source of your files.', 'powerpress'); ?></p>
1051 </div>
1052 </div>
1053 </div>
1054 <style>
1055 #wpfooter {
1056 position: relative;
1057 }
1058 </style>
1059 <div id="pp-create-episode" class="pp-migrate-container">
1060 <div class="pp-migrate-content">
1061 <section id="one" class="pp_wrapper">
1062 <div class="pp_inner">
1063
1064 <div class="pp_flex-grid">
1065
1066 <div class="pp_col">
1067 <div style="border: none; margin-bottom: 0;padding-left: 8px;">
1068 <div>
1069 <div class="pp_button-container" style="margin-bottom: 1em;float: left;">
1070 <a href="<?php echo admin_url('post-new.php') ?>"><button type="button" class="pp_button"><span><?php echo __('Create a new episode', 'powerpress'); ?></span></button></a>
1071 </div>
1072 <div class="btn-caption-container">
1073 <p style="width: 100%; margin-bottom: 1ch; float: left;"><?php echo __('Release a new episode or blog post.', 'powerpress'); ?></p>
1074 </div>
1075 </div>
1076 </div>
1077 </div>
1078
1079 <div class="pp_col divider-left" style="padding-left: 2.5em;">
1080 <div style="border: none; margin-bottom: 0;">
1081 <div>
1082 <div class="pp_button-container" style="margin-bottom: 1em;float: left;">
1083 <a href="<?php echo admin_url('admin.php?page=powerpressadmin_basic') ?>">
1084 <button type="button" class="pp_button"><span><?php echo __('Go to settings', 'powerpress'); ?></span></button>
1085 </a>
1086 </div>
1087 <div class="btn-caption-container">
1088 <p style="float: left;"><?php echo __('Continue with PowerPress options for your feed and website.', 'powerpress'); ?></p>
1089 </div>
1090 </div>
1091 </div>
1092 </div>
1093
1094 </div>
1095 </div>
1096 </section>
1097 </div>
1098 </div>
1099 <?php
1100 }
1101
1102 if( empty($BlubrryQueuedCount) && !empty($MigratedCount) && empty($CompletedCount) )
1103 { ?>
1104
1105 <div id="pp-migration-marketing" class="pp-migrate-container">
1106 <div class="pp-migrate-content">
1107 <h4><b><?php echo __('Advanced Statistics provide unparalleled insight into your show', 'powerpress'); ?></b></h4>
1108 <div style="margin-top: 1em;">
1109 <img src="<?php echo powerpress_get_root_url(); ?>images/onboarding/blubrry_stats.png" alt="" class="pp-migration-image" />
1110 <h4 class="pp-migrate-subtitle"><?php echo __('Discover your listener retention data! Find out how long your audience is listening to your episodes on a regular basis. Included in any hosting plan.', 'powerpress'); ?>
1111 <br />
1112 <a href="https://secure.blubrry.com/checkout/manage-subscriptions/">
1113 <?php echo __('Upgrade to hosting here', 'powerpress'); ?>
1114 </a>
1115 </h4>
1116 </div>
1117 </div>
1118 </div>
1119
1120
1121 <div id="powerpress_steps" class="pp-migrate-container">
1122 <div class="pp-migrate-container-heading">
1123 <h1><div class="powerpress-step-blue">3</div><?php echo __('Almost Done', 'powerpress'); ?></h1>
1124 </div>
1125 <div class="pp_flex-grid pp-migrate-content">
1126 <div class="powerpress-step pp_col">
1127 <h1><?php echo sprintf(__('%d files migrated', 'powerpress'), $MigratedCount); ?></h1>
1128 <h4><a href="<?php echo admin_url() . wp_nonce_url("admin.php?action=powerpress-jquery-migrate-queue", 'powerpress-jquery-migrate-queue'); ?>&migrate_step=2&KeepThis=true&TB_iframe=true&modal=false" class="thickbox"><?php echo __('View Results', 'powerpress'); ?></a></h4>
1129 <br />
1130 <?php if ($FailedCount) { ?><h4 class="migrate-status-red">
1131 <?php echo sprintf(__('%d files failed', 'powerpress'), $FailedCount); ?></h4><?php } ?>
1132 <form enctype="multipart/form-data" method="post" action="<?php echo admin_url( 'admin.php?page=powerpress/powerpressadmin_migrate.php'); ?>">
1133 <?php wp_nonce_field('powerpress-migrate-media'); ?>
1134 <input type="hidden" name="action" value="powerpress-migrate-media" />
1135 <input type="hidden" name="migrate_action" value="update_episodes" />
1136 <input type="hidden" name="PowerPressVerifyURLs" value="1" />
1137 <div class="pp_button-container" style="margin-top: 1em; float: left;">
1138 <b><button type="submit" class="pp_button"><span><?php echo __('UPDATE EPISODES', 'powerpress'); ?></span></button></b>
1139 </div>
1140 </form>
1141 </div>
1142 <div class="powerpress-step pp_col divider-left" id="powerpreess_step_1b">
1143 <h2><b><?php echo __('What is this?', 'powerpress'); ?></b></h2>
1144 <p><?php echo __('This is your last chance to check all of your files have been migrated. If you don’t see any issues, you’re ready to update your episodes with your new Blubrry media.', 'powerpress'); ?></p>
1145 </div>
1146
1147 </div>
1148 </div>
1149 <?php } ?>
1150
1151 <?php if (!empty($CompletedCount) ) {
1152 $publisher_migration_url = get_option('blubrry_manage_media');
1153 if (!$publisher_migration_url) {
1154 $publisher_migration_url = 'https://publish.blubrry.com/';
1155 }
1156 ?>
1157 <div id="powerpress_steps" class="pp-migrate-container">
1158 <div class="pp-migrate-container-heading">
1159 <h1><div class="powerpress-step-blue">4</div><?php echo __('Migration Finished', 'powerpress'); ?></h1>
1160 </div>
1161 <div class="pp_flex-grid pp-migrate-content">
1162 <div class="powerpress-step pp_col">
1163 <h1><?php echo sprintf(__('%d files migrated', 'powerpress'), $MigratedCount); ?></h1>
1164 <h4>
1165 <a href="<?php echo admin_url() . wp_nonce_url("admin.php?action=powerpress-jquery-migrate-queue", 'powerpress-jquery-migrate-queue'); ?>&migrate_step=2&KeepThis=true&TB_iframe=true&modal=false" class="thickbox">
1166 <?php echo __('View Migrated List', 'powerpress'); ?>
1167 </a>
1168 </h4>
1169 <?php if ($FailedCount) { ?><br /><h4 class="migrate-status-red">
1170 <?php echo sprintf(__('%d files failed', 'powerpress'), $FailedCount); ?></h4><?php } ?>
1171
1172 <div class="pp_button-container" style="margin-top: 1em; float: left;">
1173 <a href="<?php echo $publisher_migration_url; ?>" target="_blank">
1174 <b><button type="button" class="pp_button"><span><?php echo __('GO TO MEDIA LIBRARY', 'powerpress'); ?></span></button></b>
1175 </a>
1176 </div>
1177 </div>
1178 <div class="powerpress-step pp_col divider-left" id="powerpreess_step_1b">
1179 <h2><b><?php echo __('Files Missing?', 'powerpress'); ?></b></h2>
1180 <p><?php echo __('This is your last chance to check all of your files have been migrated. If you don’t see any issues, you’re ready to update your episodes with your new Blubrry media.', 'powerpress'); ?></p>
1181 <br />
1182 <p class="migrate-status-red"><?php echo __('Remember, complete the migration before deleting the source of your files.', 'powerpress'); ?></p>
1183 <h4>
1184 <b><a href="<?php echo admin_url(); echo wp_nonce_url( "admin.php?page=powerpress/powerpressadmin_migrate.php&amp;migrate_action=reset_migrate_media&amp;action=powerpress-migrate-media", 'powerpress-migrate-media'); ?>" onclick="return confirm('<?php echo esc_js(__('Reset migration, are you sure?','powerpress')); ?>');"><?php echo __('RETRY MIGRATION', 'powerpress'); ?></a></b>
1185 </h4>
1186 </div>
1187
1188 </div>
1189 </div>
1190 <style>
1191 #wpfooter {
1192 position: relative;
1193 }
1194 </style>
1195 <div id="pp-create-episode" class="pp-migrate-container">
1196 <div class="pp-migrate-content">
1197 <section id="one" class="pp_wrapper">
1198 <div class="pp_inner">
1199
1200 <div class="pp_flex-grid">
1201
1202 <div class="pp_col">
1203 <div style="border: none; margin-bottom: 0;padding-left: 8px;">
1204 <div>
1205 <div class="pp_button-container" style="margin-bottom: 1em;float: left;">
1206 <a href="<?php echo admin_url('post-new.php') ?>"><button type="button" class="pp_button"><span><?php echo __('Create a new episode', 'powerpress'); ?></span></button></a>
1207 </div>
1208 <div class="btn-caption-container">
1209 <p style="width: 100%; margin-bottom: 1ch; float: left;"><?php echo __('Release a new episode or blog post.', 'powerpress'); ?></p>
1210 </div>
1211 </div>
1212 </div>
1213 </div>
1214
1215 <div class="pp_col divider-left" style="padding-left: 2.5em;">
1216 <div style="border: none; margin-bottom: 0;">
1217 <div>
1218 <div class="pp_button-container" style="margin-bottom: 1em;float: left;">
1219 <a href="<?php echo admin_url('admin.php?page=powerpressadmin_basic') ?>">
1220 <button type="button" class="pp_button"><span><?php echo __('Go to settings', 'powerpress'); ?></span></button>
1221 </a>
1222 </div>
1223 <div class="btn-caption-container">
1224 <p style="float: left;"><?php echo __('Continue with PowerPress options for your feed and website.', 'powerpress'); ?></p>
1225 </div>
1226 </div>
1227 </div>
1228 </div>
1229
1230 </div>
1231 </div>
1232 </section>
1233 </div>
1234 </div>
1235 <?php } ?>
1236 <div class="clear"></div>
1237 </div>
1238 <div class="clear"></div>
1239 </div>
1240 <?php
1241 }
1242
1243 /**
1244 * This function, called hourly by cron, will get the migration status and update the database accordingly.
1245 *
1246 * @return void
1247 */
1248 function powerpress_admin_migration_cron() {
1249 // do logic to get correct counts and update wp options
1250 $MigrateStatus = get_option('powerpress_migrate_status');
1251 if( empty($MigrateStatus) || $MigrateStatus['updated_timestamp'] < current_time('timestamp')-(60*30) || !empty($_GET['refresh_migrate_status']) ) // Check every 30 minutes
1252 {
1253 $update_option = $MigrateStatus == false ? false : true;
1254
1255 $MigrateStatus = powerpress_admin_migrate_get_status();
1256 if( is_array($MigrateStatus) )
1257 {
1258 $MigrateStatus['updated_timestamp'] = current_time( 'timestamp' );
1259 if( $update_option )
1260 update_option('powerpress_migrate_status', $MigrateStatus);
1261 else
1262 add_option('powerpress_migrate_status', $MigrateStatus, '', 'no' );
1263 }
1264 }
1265 }
1266