class.jetpack-sync-module-import.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. class Jetpack_Sync_Module_Import extends Jetpack_Sync_Module {
  3. private $import_end = false;
  4. public function name() {
  5. return 'import';
  6. }
  7. public function init_listeners( $callable ) {
  8. add_action( 'export_wp', $callable );
  9. add_action( 'jetpack_sync_import_end', $callable, 10, 2 );
  10. // Movable type, RSS, Livejournal
  11. add_action( 'import_done', array( $this, 'sync_import_done' ) );
  12. // WordPress, Blogger, Livejournal, woo tax rate
  13. add_action( 'import_end', array( $this, 'sync_import_end' ) );
  14. }
  15. public function set_defaults() {
  16. $this->import_end = false;
  17. }
  18. public function sync_import_done( $importer ) {
  19. // We already ran an send the import
  20. if ( $this->import_end ) {
  21. return;
  22. }
  23. $importer_name = $this->get_importer_name( $importer );
  24. /**
  25. * Sync Event that tells that the import is finished
  26. *
  27. * @since 5.0.0
  28. *
  29. * $param string $importer
  30. */
  31. do_action( 'jetpack_sync_import_end', $importer, $importer_name );
  32. $this->import_end = true;
  33. }
  34. public function sync_import_end() {
  35. // We already ran an send the import
  36. if ( $this->import_end ) {
  37. return;
  38. }
  39. $this->import_end = true;
  40. $importer = 'unknown';
  41. $backtrace = wp_debug_backtrace_summary( null, 0, false );
  42. if ( $this->is_importer( $backtrace, 'Blogger_Importer' ) ) {
  43. $importer = 'blogger';
  44. }
  45. if ( 'unknown' === $importer && $this->is_importer( $backtrace, 'WC_Tax_Rate_Importer' ) ) {
  46. $importer = 'woo-tax-rate';
  47. }
  48. if ( 'unknown' === $importer && $this->is_importer( $backtrace, 'WP_Import' ) ) {
  49. $importer = 'wordpress';
  50. }
  51. $importer_name = $this->get_importer_name( $importer );
  52. /** This filter is already documented in sync/class.jetpack-sync-module-posts.php */
  53. do_action( 'jetpack_sync_import_end', $importer, $importer_name );
  54. }
  55. private function get_importer_name( $importer ) {
  56. $importers = get_importers();
  57. return isset( $importers[ $importer ] ) ? $importers[ $importer ][0] : 'Unknown Importer';
  58. }
  59. private function is_importer( $backtrace, $class_name ) {
  60. foreach ( $backtrace as $trace ) {
  61. if ( strpos( $trace, $class_name ) !== false ) {
  62. return true;
  63. }
  64. }
  65. return false;
  66. }
  67. }