Astra Starter Sites - Version 1.3.10

Version Description

Download this release

Release Info

Developer vrundakansara
Plugin Icon Astra Starter Sites
Version 1.3.10
Comparing to
See all releases

Code changes from version 1.3.9 to 1.3.10

astra-sites.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
  /**
3
- * Plugin Name: Astra Starter Sites – Elementor, Beaver Builder & Gutenberg Templates
4
  * Plugin URI: http://www.wpastra.com/pro/
5
  * Description: Import free sites build with Astra theme.
6
- * Version: 1.3.9
7
  * Author: Brainstorm Force
8
  * Author URI: http://www.brainstormforce.com
9
  * Text Domain: astra-sites
@@ -19,7 +19,7 @@ if ( ! defined( 'ASTRA_SITES_NAME' ) ) {
19
  }
20
 
21
  if ( ! defined( 'ASTRA_SITES_VER' ) ) {
22
- define( 'ASTRA_SITES_VER', '1.3.9' );
23
  }
24
 
25
  if ( ! defined( 'ASTRA_SITES_FILE' ) ) {
1
  <?php
2
  /**
3
+ * Plugin Name: Astra Starter Sites
4
  * Plugin URI: http://www.wpastra.com/pro/
5
  * Description: Import free sites build with Astra theme.
6
+ * Version: 1.3.10
7
  * Author: Brainstorm Force
8
  * Author URI: http://www.brainstormforce.com
9
  * Text Domain: astra-sites
19
  }
20
 
21
  if ( ! defined( 'ASTRA_SITES_VER' ) ) {
22
+ define( 'ASTRA_SITES_VER', '1.3.10' );
23
  }
24
 
25
  if ( ! defined( 'ASTRA_SITES_FILE' ) ) {
inc/assets/css/admin.css CHANGED
@@ -225,7 +225,9 @@
225
  margin-left: 0;
226
  width: auto;
227
  float: none;
 
228
  }
 
229
  .filters-wrap {
230
  display: inline-block;
231
  }
@@ -528,13 +530,19 @@ body.loading-content .select-page-builder {
528
  visibility: hidden;
529
  }
530
 
531
- .required-plugins-list {
 
 
 
 
 
532
  margin-left: 2em;
533
  margin-top: .5em;
534
  margin-bottom: .5em;
535
  list-style-type: disc;
536
  }
537
 
 
538
  .required-plugins-list .plugin-card {
539
  background: transparent;
540
  border: none;
225
  margin-left: 0;
226
  width: auto;
227
  float: none;
228
+ margin-right: 220px;
229
  }
230
+
231
  .filters-wrap {
232
  display: inline-block;
233
  }
530
  visibility: hidden;
531
  }
532
 
533
+ .astra-sites-third-party-required-plugins-wrap .notice {
534
+ margin: 0;
535
+ }
536
+
537
+ .required-plugins-list,
538
+ .astra-sites-third-party-required-plugins {
539
  margin-left: 2em;
540
  margin-top: .5em;
541
  margin-bottom: .5em;
542
  list-style-type: disc;
543
  }
544
 
545
+ .astra-sites-third-party-required-plugins .plugin-card,
546
  .required-plugins-list .plugin-card {
547
  background: transparent;
548
  border: none;
inc/assets/js/admin-page.js CHANGED
@@ -120,7 +120,6 @@ var AstraSitesAjaxQueue = (function() {
120
  var complete = 0;
121
  var total = 0;
122
 
123
-
124
  for (var i = types.length - 1; i >= 0; i--) {
125
  var type = types[i];
126
  this.updateProgress( type, this.complete[ type ], this.data.count[ type ] );
@@ -762,7 +761,7 @@ var AstraSitesAjaxQueue = (function() {
762
  evtSource.addEventListener( 'log', function ( message ) {
763
  var data = JSON.parse( message.data );
764
  var message = data.message || '';
765
- if( message ) {
766
  message = message.replace(/"/g, function(letter) {
767
  return '';
768
  });
@@ -983,7 +982,7 @@ var AstraSitesAjaxQueue = (function() {
983
  return;
984
  }
985
 
986
- AstraSitesAdmin._log_title( 'Installing Plugin..' );
987
 
988
  if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) {
989
  wp.updates.requestFilesystemCredentials( event );
@@ -999,7 +998,7 @@ var AstraSitesAjaxQueue = (function() {
999
  } );
1000
  }
1001
 
1002
- AstraSitesAdmin._log_title( 'Installing ' + AstraSitesAdmin.ucwords( $button.data( 'name' ) ) );
1003
 
1004
  wp.updates.installPlugin( {
1005
  slug: $button.data( 'slug' )
@@ -1036,6 +1035,7 @@ var AstraSitesAjaxQueue = (function() {
1036
 
1037
  // Transform the 'Install' button into an 'Activate' button.
1038
  var $init = $( '.plugin-card-' + response.slug ).data('init');
 
1039
 
1040
  // Reset not installed plugins list.
1041
  var pluginsList = astraSitesAdmin.requiredPlugins.notinstalled;
@@ -1044,7 +1044,7 @@ var AstraSitesAjaxQueue = (function() {
1044
  // WordPress adds "Activate" button after waiting for 1000ms. So we will run our activation after that.
1045
  setTimeout( function() {
1046
 
1047
- AstraSitesAdmin._log_title( 'Activating Plugin..' );
1048
 
1049
  $.ajax({
1050
  url: astraSitesAdmin.ajaxurl,
@@ -1059,10 +1059,10 @@ var AstraSitesAjaxQueue = (function() {
1059
  .done(function (result) {
1060
 
1061
  if( result.success ) {
1062
- AstraSitesAdmin._log_title( 'Activating Plugin ' + AstraSitesAdmin.ucwords(response.name) );
1063
-
1064
  var pluginsList = astraSitesAdmin.requiredPlugins.inactive;
1065
 
 
 
1066
  // Reset not installed plugins list.
1067
  astraSitesAdmin.requiredPlugins.inactive = AstraSitesAdmin._removePluginFromQueue( response.slug, pluginsList );
1068
 
@@ -1082,8 +1082,9 @@ var AstraSitesAjaxQueue = (function() {
1082
  _installError: function( event, response ) {
1083
 
1084
  var $card = $( '.plugin-card-' + response.slug );
 
1085
 
1086
- AstraSitesAdmin._log_title( response.errorMessage + ' ' + AstraSitesAdmin.ucwords(response.name) );
1087
 
1088
 
1089
  $card
@@ -1100,8 +1101,9 @@ var AstraSitesAjaxQueue = (function() {
1100
  event.preventDefault();
1101
 
1102
  var $card = $( '.plugin-card-' + args.slug );
 
1103
 
1104
- AstraSitesAdmin._log_title( 'Installing ' + AstraSitesAdmin.ucwords(args.name ));
1105
 
1106
  $card.addClass('updating-message');
1107
 
@@ -1123,7 +1125,7 @@ var AstraSitesAjaxQueue = (function() {
1123
  return;
1124
  }
1125
 
1126
- AstraSitesAdmin._log_title( 'Activating plugin ' + AstraSitesAdmin.ucwords( $name ) );
1127
 
1128
  $button.addClass('updating-message button-primary')
1129
  .html( astraSitesAdmin.strings.btnActivating );
@@ -1145,7 +1147,7 @@ var AstraSitesAjaxQueue = (function() {
1145
 
1146
  if( result.success ) {
1147
 
1148
- AstraSitesAdmin._log_title( 'Activated ' + AstraSitesAdmin.ucwords($name) );
1149
 
1150
  var pluginsList = astraSitesAdmin.requiredPlugins.inactive;
1151
 
@@ -1221,7 +1223,7 @@ var AstraSitesAjaxQueue = (function() {
1221
  */
1222
  _activateAllPlugins: function( activate_plugins ) {
1223
 
1224
- AstraSitesAdmin._log_title( 'Activating Plugins..' );
1225
 
1226
  $.each( activate_plugins, function(index, single_plugin) {
1227
 
@@ -1263,11 +1265,11 @@ var AstraSitesAjaxQueue = (function() {
1263
  */
1264
  _installAllPlugins: function( not_installed ) {
1265
 
1266
- AstraSitesAdmin._log_title( 'Installing Plugins..' );
1267
 
1268
  $.each( not_installed, function(index, single_plugin) {
1269
 
1270
- AstraSitesAdmin._log_title( 'Installing ' + AstraSitesAdmin.ucwords( single_plugin.name ));
1271
 
1272
  var $card = $( '.plugin-card-' + single_plugin.slug );
1273
 
@@ -1661,12 +1663,20 @@ var AstraSitesAjaxQueue = (function() {
1661
 
1662
  })
1663
  .done(function ( response ) {
 
1664
 
 
 
1665
 
1666
- // Release disabled class from import button.
1667
- $('.astra-demo-import')
1668
- .removeClass('disabled not-click-able')
1669
- .attr('data-import', 'disabled');
 
 
 
 
 
1670
 
1671
  // Remove loader.
1672
  $('.required-plugins').removeClass('loading').html('');
@@ -1683,12 +1693,12 @@ var AstraSitesAjaxQueue = (function() {
1683
  *
1684
  * List of not installed required plugins.
1685
  */
1686
- if ( typeof response.data.notinstalled !== 'undefined' ) {
1687
 
1688
  // Add not have installed plugins count.
1689
- remaining_plugins += parseInt( response.data.notinstalled.length );
1690
 
1691
- $( response.data.notinstalled ).each(function( index, plugin ) {
1692
  $('.required-plugins-list').append('<li class="plugin-card plugin-card-'+plugin.slug+'" data-slug="'+plugin.slug+'" data-init="'+plugin.init+'" data-name="'+plugin.name+'">'+plugin.name+'</li>');
1693
  });
1694
  }
@@ -1698,12 +1708,12 @@ var AstraSitesAjaxQueue = (function() {
1698
  *
1699
  * List of not inactive required plugins.
1700
  */
1701
- if ( typeof response.data.inactive !== 'undefined' ) {
1702
 
1703
  // Add inactive plugins count.
1704
- remaining_plugins += parseInt( response.data.inactive.length );
1705
 
1706
- $( response.data.inactive ).each(function( index, plugin ) {
1707
  $('.required-plugins-list').append('<li class="plugin-card plugin-card-'+plugin.slug+'" data-slug="'+plugin.slug+'" data-init="'+plugin.init+'" data-name="'+plugin.name+'">'+plugin.name+'</li>');
1708
  });
1709
  }
@@ -1713,9 +1723,9 @@ var AstraSitesAjaxQueue = (function() {
1713
  *
1714
  * List of not active required plugins.
1715
  */
1716
- if ( typeof response.data.active !== 'undefined' ) {
1717
 
1718
- $( response.data.active ).each(function( index, plugin ) {
1719
  $('.required-plugins-list').append('<li class="plugin-card plugin-card-'+plugin.slug+'" data-slug="'+plugin.slug+'" data-init="'+plugin.init+'" data-name="'+plugin.name+'">'+plugin.name+'</li>');
1720
  });
1721
  }
@@ -1724,7 +1734,7 @@ var AstraSitesAjaxQueue = (function() {
1724
  * Enable Demo Import Button
1725
  * @type number
1726
  */
1727
- astraSitesAdmin.requiredPlugins = response.data;
1728
  });
1729
 
1730
  } else {
120
  var complete = 0;
121
  var total = 0;
122
 
 
123
  for (var i = types.length - 1; i >= 0; i--) {
124
  var type = types[i];
125
  this.updateProgress( type, this.complete[ type ], this.data.count[ type ] );
761
  evtSource.addEventListener( 'log', function ( message ) {
762
  var data = JSON.parse( message.data );
763
  var message = data.message || '';
764
+ if( message && 'info' === data.level ) {
765
  message = message.replace(/"/g, function(letter) {
766
  return '';
767
  });
982
  return;
983
  }
984
 
985
+ AstraSitesAdmin._log_title( 'Installing Required Plugin..' );
986
 
987
  if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) {
988
  wp.updates.requestFilesystemCredentials( event );
998
  } );
999
  }
1000
 
1001
+ AstraSitesAdmin._log_title( 'Installing Plugin - ' + AstraSitesAdmin.ucwords( $button.data( 'name' ) ) );
1002
 
1003
  wp.updates.installPlugin( {
1004
  slug: $button.data( 'slug' )
1035
 
1036
  // Transform the 'Install' button into an 'Activate' button.
1037
  var $init = $( '.plugin-card-' + response.slug ).data('init');
1038
+ var $name = $( '.plugin-card-' + response.slug ).data('name');
1039
 
1040
  // Reset not installed plugins list.
1041
  var pluginsList = astraSitesAdmin.requiredPlugins.notinstalled;
1044
  // WordPress adds "Activate" button after waiting for 1000ms. So we will run our activation after that.
1045
  setTimeout( function() {
1046
 
1047
+ AstraSitesAdmin._log_title( 'Installing Plugin - ' + AstraSitesAdmin.ucwords($name) );
1048
 
1049
  $.ajax({
1050
  url: astraSitesAdmin.ajaxurl,
1059
  .done(function (result) {
1060
 
1061
  if( result.success ) {
 
 
1062
  var pluginsList = astraSitesAdmin.requiredPlugins.inactive;
1063
 
1064
+ AstraSitesAdmin._log_title( 'Installed Plugin - ' + AstraSitesAdmin.ucwords($name) );
1065
+
1066
  // Reset not installed plugins list.
1067
  astraSitesAdmin.requiredPlugins.inactive = AstraSitesAdmin._removePluginFromQueue( response.slug, pluginsList );
1068
 
1082
  _installError: function( event, response ) {
1083
 
1084
  var $card = $( '.plugin-card-' + response.slug );
1085
+ var $name = $card.data('name');
1086
 
1087
+ AstraSitesAdmin._log_title( response.errorMessage + ' ' + AstraSitesAdmin.ucwords($name) );
1088
 
1089
 
1090
  $card
1101
  event.preventDefault();
1102
 
1103
  var $card = $( '.plugin-card-' + args.slug );
1104
+ var $name = $card.data('name');
1105
 
1106
+ AstraSitesAdmin._log_title( 'Installing Plugin - ' + AstraSitesAdmin.ucwords( $name ));
1107
 
1108
  $card.addClass('updating-message');
1109
 
1125
  return;
1126
  }
1127
 
1128
+ AstraSitesAdmin._log_title( 'Activating Plugin - ' + AstraSitesAdmin.ucwords( $name ) );
1129
 
1130
  $button.addClass('updating-message button-primary')
1131
  .html( astraSitesAdmin.strings.btnActivating );
1147
 
1148
  if( result.success ) {
1149
 
1150
+ AstraSitesAdmin._log_title( 'Activated Plugin - ' + AstraSitesAdmin.ucwords($name) );
1151
 
1152
  var pluginsList = astraSitesAdmin.requiredPlugins.inactive;
1153
 
1223
  */
1224
  _activateAllPlugins: function( activate_plugins ) {
1225
 
1226
+ AstraSitesAdmin._log_title( 'Activating Required Plugins..' );
1227
 
1228
  $.each( activate_plugins, function(index, single_plugin) {
1229
 
1265
  */
1266
  _installAllPlugins: function( not_installed ) {
1267
 
1268
+ AstraSitesAdmin._log_title( 'Installing Required Plugins..' );
1269
 
1270
  $.each( not_installed, function(index, single_plugin) {
1271
 
1272
+ AstraSitesAdmin._log_title( 'Installing Plugin - ' + AstraSitesAdmin.ucwords( single_plugin.name ));
1273
 
1274
  var $card = $( '.plugin-card-' + single_plugin.slug );
1275
 
1663
 
1664
  })
1665
  .done(function ( response ) {
1666
+ required_plugins = response.data['required_plugins'];
1667
 
1668
+ if( response.data['third_party_required_plugins'].length ) {
1669
+ $('.astra-demo-import').removeClass('button-primary').addClass('disabled');
1670
 
1671
+ $('.astra-sites-third-party-required-plugins-wrap').remove();
1672
+ var template = wp.template('astra-sites-third-party-required-plugins');
1673
+ $('.astra-sites-advanced-options-wrap').append( template( response.data['third_party_required_plugins'] ) );
1674
+ } else {
1675
+ // Release disabled class from import button.
1676
+ $('.astra-demo-import')
1677
+ .removeClass('disabled not-click-able')
1678
+ .attr('data-import', 'disabled');
1679
+ }
1680
 
1681
  // Remove loader.
1682
  $('.required-plugins').removeClass('loading').html('');
1693
  *
1694
  * List of not installed required plugins.
1695
  */
1696
+ if ( typeof required_plugins.notinstalled !== 'undefined' ) {
1697
 
1698
  // Add not have installed plugins count.
1699
+ remaining_plugins += parseInt( required_plugins.notinstalled.length );
1700
 
1701
+ $( required_plugins.notinstalled ).each(function( index, plugin ) {
1702
  $('.required-plugins-list').append('<li class="plugin-card plugin-card-'+plugin.slug+'" data-slug="'+plugin.slug+'" data-init="'+plugin.init+'" data-name="'+plugin.name+'">'+plugin.name+'</li>');
1703
  });
1704
  }
1708
  *
1709
  * List of not inactive required plugins.
1710
  */
1711
+ if ( typeof required_plugins.inactive !== 'undefined' ) {
1712
 
1713
  // Add inactive plugins count.
1714
+ remaining_plugins += parseInt( required_plugins.inactive.length );
1715
 
1716
+ $( required_plugins.inactive ).each(function( index, plugin ) {
1717
  $('.required-plugins-list').append('<li class="plugin-card plugin-card-'+plugin.slug+'" data-slug="'+plugin.slug+'" data-init="'+plugin.init+'" data-name="'+plugin.name+'">'+plugin.name+'</li>');
1718
  });
1719
  }
1723
  *
1724
  * List of not active required plugins.
1725
  */
1726
+ if ( typeof required_plugins.active !== 'undefined' ) {
1727
 
1728
+ $( required_plugins.active ).each(function( index, plugin ) {
1729
  $('.required-plugins-list').append('<li class="plugin-card plugin-card-'+plugin.slug+'" data-slug="'+plugin.slug+'" data-init="'+plugin.init+'" data-name="'+plugin.name+'">'+plugin.name+'</li>');
1730
  });
1731
  }
1734
  * Enable Demo Import Button
1735
  * @type number
1736
  */
1737
+ astraSitesAdmin.requiredPlugins = required_plugins;
1738
  });
1739
 
1740
  } else {
inc/classes/class-astra-sites-importer.php CHANGED
@@ -101,7 +101,7 @@ if ( ! class_exists( 'Astra_Sites_Importer' ) ) :
101
  }
102
 
103
  // Check is image URL of type jpg|png|gif|jpeg.
104
- if ( preg_match( '/^((https?:\/\/)|(www\.))([a-z0-9-].?)+(:[0-9]+)?\/[\w\-]+\.(jpg|png|gif|jpeg)\/?$/i', $url ) ) {
105
  $timeout_value = 30;
106
  }
107
  return $timeout_value;
101
  }
102
 
103
  // Check is image URL of type jpg|png|gif|jpeg.
104
+ if ( Astra_Sites_Image_Importer::get_instance()->is_image_url( $url ) ) {
105
  $timeout_value = 30;
106
  }
107
  return $timeout_value;
inc/classes/class-astra-sites.php CHANGED
@@ -1,600 +1,621 @@
1
- <?php
2
- /**
3
- * Astra Sites
4
- *
5
- * @since 1.0.0
6
- * @package Astra Sites
7
- */
8
-
9
- defined( 'ABSPATH' ) or exit;
10
-
11
- if ( ! class_exists( 'Astra_Sites' ) ) :
12
-
13
- /**
14
- * Astra_Sites
15
- */
16
- class Astra_Sites {
17
-
18
- /**
19
- * API URL which is used to get the response from.
20
- *
21
- * @since 1.0.0
22
- * @var (String) URL
23
- */
24
- public static $api_url;
25
-
26
- /**
27
- * Instance of Astra_Sites
28
- *
29
- * @since 1.0.0
30
- * @var (Object) Astra_Sites
31
- */
32
- private static $_instance = null;
33
-
34
- /**
35
- * Instance of Astra_Sites.
36
- *
37
- * @since 1.0.0
38
- *
39
- * @return object Class object.
40
- */
41
- public static function get_instance() {
42
- if ( ! isset( self::$_instance ) ) {
43
- self::$_instance = new self;
44
- }
45
-
46
- return self::$_instance;
47
- }
48
-
49
- /**
50
- * Constructor.
51
- *
52
- * @since 1.0.0
53
- */
54
- private function __construct() {
55
-
56
- self::set_api_url();
57
-
58
- $this->includes();
59
-
60
- add_action( 'admin_notices', array( $this, 'add_notice' ), 1 );
61
- add_action( 'admin_notices', array( $this, 'admin_notices' ) );
62
- add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
63
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
64
-
65
- // AJAX.
66
- add_action( 'wp_ajax_astra-required-plugins', array( $this, 'required_plugin' ) );
67
- add_action( 'wp_ajax_astra-required-plugin-activate', array( $this, 'required_plugin_activate' ) );
68
- add_action( 'wp_ajax_astra-sites-backup-settings', array( $this, 'backup_settings' ) );
69
- add_action( 'wp_ajax_astra-sites-set-reset-data', array( $this, 'set_reset_data' ) );
70
- add_action( 'wp_ajax_astra-sites-activate-theme', array( $this, 'activate_theme' ) );
71
- add_action( 'wp_ajax_astra-sites-getting-started-notice', array( $this, 'getting_started_notice' ) );
72
- }
73
-
74
- /**
75
- * Close getting started notice for current user
76
- *
77
- * @since 1.3.5
78
- * @return void
79
- */
80
- function getting_started_notice() {
81
- update_user_meta( get_current_user_id(), '_astra_sites_gettings_started', true );
82
- wp_send_json_success();
83
- }
84
-
85
- /**
86
- * Activate theme
87
- *
88
- * @since 1.3.2
89
- * @return void
90
- */
91
- function activate_theme() {
92
-
93
- switch_theme( 'astra' );
94
-
95
- wp_send_json_success(
96
- array(
97
- 'success' => true,
98
- 'message' => __( 'Theme Activated', 'astra-sites' ),
99
- )
100
- );
101
- }
102
-
103
- /**
104
- * Set reset data
105
- */
106
- function set_reset_data() {
107
- if ( ! current_user_can( 'manage_options' ) ) {
108
- return;
109
- }
110
-
111
- global $wpdb;
112
-
113
- $post_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_post'" );
114
- $form_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_wp_forms'" );
115
- $term_ids = $wpdb->get_col( "SELECT term_id FROM {$wpdb->termmeta} WHERE meta_key='_astra_sites_imported_term'" );
116
-
117
- wp_send_json_success(
118
- array(
119
- 'reset_posts' => $post_ids,
120
- 'reset_wp_forms' => $form_ids,
121
- 'reset_terms' => $term_ids,
122
- )
123
- );
124
- }
125
-
126
- /**
127
- * Backup our existing settings.
128
- */
129
- function backup_settings() {
130
- if ( ! current_user_can( 'manage_options' ) ) {
131
- return;
132
- }
133
-
134
- $file_name = 'astra-sites-backup-' . date( 'd-M-Y-h-i-s' ) . '.json';
135
- $old_settings = get_option( 'astra-settings', array() );
136
- $upload_dir = Astra_Sites_Importer_Log::get_instance()->log_dir();
137
- $upload_path = trailingslashit( $upload_dir['path'] );
138
- $log_file = $upload_path . $file_name;
139
- $file_system = Astra_Sites_Importer_Log::get_instance()->get_filesystem();
140
-
141
- // If file system fails? Then take a backup in site option.
142
- if ( false === $file_system->put_contents( $log_file, json_encode( $old_settings ), FS_CHMOD_FILE ) ) {
143
- update_option( 'astra_sites_' . $file_name, $old_settings );
144
- }
145
-
146
- wp_send_json_success();
147
- }
148
-
149
- /**
150
- * Add Admin Notice.
151
- */
152
- function add_notice() {
153
-
154
- $theme_status = 'astra-sites-theme-' . $this->get_theme_status();
155
-
156
- Astra_Notices::add_notice(
157
- array(
158
- 'id' => 'astra-theme-activation-nag',
159
- 'type' => 'error',
160
- 'show_if' => ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) ? true : false,
161
- /* translators: 1: theme.php file*/
162
- 'message' => sprintf( __( '<p>Astra Theme needs to be active for you to use currently installed "%1$s" plugin. <a href="#" class="%3$s" data-theme-slug="astra">Install & Activate Now</a></p>', 'astra-sites' ), ASTRA_SITES_NAME, esc_url( admin_url( 'themes.php?theme=astra' ) ), $theme_status ),
163
- 'dismissible' => true,
164
- 'dismissible-time' => WEEK_IN_SECONDS,
165
- )
166
- );
167
- }
168
-
169
- /**
170
- * Get theme install, active or inactive status.
171
- *
172
- * @since 1.3.2
173
- *
174
- * @return string Theme status
175
- */
176
- function get_theme_status() {
177
-
178
- $theme = wp_get_theme();
179
-
180
- // Theme installed and activate.
181
- if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
182
- return 'installed-and-active';
183
- }
184
-
185
- // Theme installed but not activate.
186
- foreach ( (array) wp_get_themes() as $theme_dir => $theme ) {
187
- if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
188
- return 'installed-but-inactive';
189
- }
190
- }
191
-
192
- return 'not-installed';
193
- }
194
-
195
- /**
196
- * Loads textdomain for the plugin.
197
- *
198
- * @since 1.0.1
199
- */
200
- function load_textdomain() {
201
- load_plugin_textdomain( 'astra-sites' );
202
- }
203
-
204
- /**
205
- * Admin Notices
206
- *
207
- * @since 1.0.5
208
- * @return void
209
- */
210
- function admin_notices() {
211
-
212
- if ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) {
213
- return;
214
- }
215
-
216
- add_action( 'plugin_action_links_' . ASTRA_SITES_BASE, array( $this, 'action_links' ) );
217
- }
218
-
219
- /**
220
- * Show action links on the plugin screen.
221
- *
222
- * @param mixed $links Plugin Action links.
223
- * @return array
224
- */
225
- function action_links( $links ) {
226
- $action_links = array(
227
- 'settings' => '<a href="' . admin_url( 'themes.php?page=astra-sites' ) . '" aria-label="' . esc_attr__( 'See Library', 'astra-sites' ) . '">' . esc_html__( 'See Library', 'astra-sites' ) . '</a>',
228
- );
229
-
230
- return array_merge( $action_links, $links );
231
- }
232
-
233
- /**
234
- * Setter for $api_url
235
- *
236
- * @since 1.0.0
237
- */
238
- public static function set_api_url() {
239
- self::$api_url = apply_filters( 'astra_sites_api_url', 'https://websitedemos.net/wp-json/wp/v2/' );
240
-
241
- }
242
-
243
- /**
244
- * Enqueue admin scripts.
245
- *
246
- * @since 1.3.2 Added 'install-theme.js' to install and activate theme.
247
- * @since 1.0.5 Added 'getUpgradeText' and 'getUpgradeURL' localize variables.
248
- *
249
- * @since 1.0.0
250
- *
251
- * @param string $hook Current hook name.
252
- * @return void
253
- */
254
- public function admin_enqueue( $hook = '' ) {
255
-
256
- wp_enqueue_script( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/js/install-theme.js', array( 'jquery', 'updates' ), ASTRA_SITES_VER, true );
257
- wp_enqueue_style( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/css/install-theme.css', null, ASTRA_SITES_VER, 'all' );
258
-
259
- $data = apply_filters(
260
- 'astra_sites_install_theme_localize_vars',
261
- array(
262
- 'installed' => __( 'Installed! Activating..', 'astra-sites' ),
263
- 'activating' => __( 'Activating..', 'astra-sites' ),
264
- 'activated' => __( 'Activated! Reloading..', 'astra-sites' ),
265
- 'installing' => __( 'Installing..', 'astra-sites' ),
266
- 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
267
- )
268
- );
269
- wp_localize_script( 'astra-sites-install-theme', 'AstraSitesInstallThemeVars', $data );
270
-
271
- if ( 'appearance_page_astra-sites' !== $hook ) {
272
- return;
273
- }
274
-
275
- global $is_IE, $is_edge;
276
-
277
- if ( $is_IE || $is_edge ) {
278
- wp_enqueue_script( 'astra-sites-eventsource', ASTRA_SITES_URI . 'inc/assets/js/eventsource.min.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
279
- }
280
-
281
- // Fetch.
282
- wp_register_script( 'astra-sites-fetch', ASTRA_SITES_URI . 'inc/assets/js/fetch.umd.js', array( 'jquery' ), ASTRA_SITES_VER, true );
283
-
284
- // API.
285
- wp_register_script( 'astra-sites-api', ASTRA_SITES_URI . 'inc/assets/js/astra-sites-api.js', array( 'jquery', 'astra-sites-fetch' ), ASTRA_SITES_VER, true );
286
-
287
- // Admin Page.
288
- wp_enqueue_style( 'astra-sites-admin', ASTRA_SITES_URI . 'inc/assets/css/admin.css', ASTRA_SITES_VER, true );
289
- wp_enqueue_script( 'astra-sites-admin-page', ASTRA_SITES_URI . 'inc/assets/js/admin-page.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
290
- wp_enqueue_script( 'astra-sites-render-grid', ASTRA_SITES_URI . 'inc/assets/js/render-grid.js', array( 'wp-util', 'astra-sites-api', 'imagesloaded', 'jquery' ), ASTRA_SITES_VER, true );
291
-
292
- $data = apply_filters(
293
- 'astra_sites_localize_vars',
294
- array(
295
- 'ApiURL' => self::$api_url,
296
- 'filters' => array(
297
- 'page_builder' => array(
298
- 'title' => __( 'Page Builder', 'astra-sites' ),
299
- 'slug' => 'astra-site-page-builder',
300
- 'trigger' => 'astra-api-category-loaded',
301
- ),
302
- 'categories' => array(
303
- 'title' => __( 'Categories', 'astra-sites' ),
304
- 'slug' => 'astra-site-category',
305
- 'trigger' => 'astra-api-category-loaded',
306
- ),
307
- ),
308
- )
309
- );
310
- wp_localize_script( 'astra-sites-api', 'astraSitesApi', $data );
311
-
312
- // Use this for premium demos.
313
- $request_params = apply_filters(
314
- 'astra_sites_api_params',
315
- array(
316
- 'purchase_key' => '',
317
- 'site_url' => '',
318
- 'par-page' => 30,
319
- )
320
- );
321
-
322
- $data = apply_filters(
323
- 'astra_sites_render_localize_vars',
324
- array(
325
- 'sites' => $request_params,
326
- 'page-builders' => array(),
327
- 'categories' => array(),
328
- 'settings' => array(),
329
- 'default_page_builder' => Astra_Sites_Page::get_instance()->get_setting( 'page_builder' ),
330
- )
331
- );
332
-
333
- wp_localize_script( 'astra-sites-render-grid', 'astraRenderGrid', $data );
334
-
335
- $data = apply_filters(
336
- 'astra_sites_localize_vars',
337
- array(
338
- 'debug' => ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || isset( $_GET['debug'] ) ) ? true : false,
339
- 'isPro' => defined( 'ASTRA_PRO_SITES_NAME' ) ? true : false,
340
- 'isWhiteLabeled' => Astra_Sites_White_Label::get_instance()->is_white_labeled(),
341
- 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
342
- 'siteURL' => site_url(),
343
- 'docUrl' => 'https://wpastra.com/',
344
- 'getProText' => __( 'Get Agency Bundle', 'astra-sites' ),
345
- 'getProURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
346
- 'getUpgradeText' => __( 'Upgrade', 'astra-sites' ),
347
- 'getUpgradeURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
348
- '_ajax_nonce' => wp_create_nonce( 'astra-sites' ),
349
- 'requiredPlugins' => array(),
350
- 'XMLReaderDisabled' => ! class_exists( 'XMLReader' ) ? true : false,
351
- 'strings' => array(
352
- /* translators: %s are HTML tags. */
353
- 'warningXMLReader' => sprintf( __( '%1$sRequired XMLReader PHP extension is missing on your server!%2$sAstra Sites import requires XMLReader extension to be installed. Please contact your web hosting provider and ask them to install and activate the XMLReader PHP extension.', 'astra-sites' ), '<div class="notice astra-sites-xml-notice notice-error"><p><b>', '</b></p><p>', '</p></div>' ),
354
- 'warningBeforeCloseWindow' => __( 'Warning! Astra Site Import process is not complete. Don\'t close the window until import process complete. Do you still want to leave the window?', 'astra-sites' ),
355
- 'importFailedBtnSmall' => __( 'Error!', 'astra-sites' ),
356
- 'importFailedBtnLarge' => __( 'Error! Read Possibilities.', 'astra-sites' ),
357
- 'importFailedURL' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=import-failed' ),
358
- 'viewSite' => __( 'Done! View Site', 'astra-sites' ),
359
- 'btnActivating' => __( 'Activating', 'astra-sites' ) . '&hellip;',
360
- 'btnActive' => __( 'Active', 'astra-sites' ),
361
- 'importFailBtn' => __( 'Import failed.', 'astra-sites' ),
362
- 'importFailBtnLarge' => __( 'Import failed. See error log.', 'astra-sites' ),
363
- 'importDemo' => __( 'Import This Site', 'astra-sites' ),
364
- 'importingDemo' => __( 'Importing..', 'astra-sites' ),
365
- 'DescExpand' => __( 'Read more', 'astra-sites' ) . '&hellip;',
366
- 'DescCollapse' => __( 'Hide', 'astra-sites' ),
367
- 'responseError' => __( 'There was a problem receiving a response from server.', 'astra-sites' ),
368
- 'searchNoFound' => __( 'No Demos found, Try a different search.', 'astra-sites' ),
369
- ),
370
- 'log' => array(
371
- 'installingPlugin' => __( 'Installing plugin ', 'astra-sites' ),
372
- 'installed' => __( 'Plugin installed!', 'astra-sites' ),
373
- 'activating' => __( 'Activating plugin ', 'astra-sites' ),
374
- 'activated' => __( 'Plugin activated ', 'astra-sites' ),
375
- 'bulkActivation' => __( 'Bulk plugin activation...', 'astra-sites' ),
376
- 'activate' => __( 'Plugin activate - ', 'astra-sites' ),
377
- 'activationError' => __( 'Error! While activating plugin - ', 'astra-sites' ),
378
- 'bulkInstall' => __( 'Bulk plugin installation...', 'astra-sites' ),
379
- 'api' => __( 'Site API ', 'astra-sites' ),
380
- 'importing' => __( 'Importing..', 'astra-sites' ),
381
- 'processingRequest' => __( 'Processing requests...', 'astra-sites' ),
382
- 'importCustomizer' => __( 'Importing "Customizer Settings"...', 'astra-sites' ),
383
- 'importCustomizerSuccess' => __( 'Imported customizer settings!', 'astra-sites' ),
384
- 'importWPForms' => __( 'Importing "Contact Forms"...', 'astra-sites' ),
385
- 'importWPFormsSuccess' => __( 'Imported Contact Forms!', 'astra-sites' ),
386
- 'importXMLPrepare' => __( 'Preparing "XML" Data...', 'astra-sites' ),
387
- 'importXMLPrepareSuccess' => __( 'Set XML data!', 'astra-sites' ),
388
- 'importXML' => __( 'Importing "XML"...', 'astra-sites' ),
389
- 'importXMLSuccess' => __( 'Imported XML!', 'astra-sites' ),
390
- 'importOptions' => __( 'Importing "Options"...', 'astra-sites' ),
391
- 'importOptionsSuccess' => __( 'Imported Options!', 'astra-sites' ),
392
- 'importWidgets' => __( 'Importing "Widgets"...', 'astra-sites' ),
393
- 'importWidgetsSuccess' => __( 'Imported Widgets!', 'astra-sites' ),
394
- 'serverConfiguration' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=import-error&utm_medium=wp-dashboard' ),
395
- 'success' => __( 'View site: ', 'astra-sites' ),
396
- 'gettingData' => __( 'Getting Site Information..', 'astra-sites' ),
397
- 'importingCustomizer' => __( 'Importing Customizer Settings..', 'astra-sites' ),
398
- 'importingWPForms' => __( 'Importing Contact Forms..', 'astra-sites' ),
399
- 'importXMLPreparing' => __( 'Setting up import data..', 'astra-sites' ),
400
- 'importingXML' => __( 'Importing Content..', 'astra-sites' ),
401
- 'importingOptions' => __( 'Importing Site Options..', 'astra-sites' ),
402
- 'importingWidgets' => __( 'Importing Widgets..', 'astra-sites' ),
403
- 'importComplete' => __( 'Import Complete..', 'astra-sites' ),
404
- 'preview' => __( 'Previewing ', 'astra-sites' ),
405
- 'importLogText' => __( 'See Error Log &rarr;', 'astra-sites' ),
406
- ),
407
- )
408
- );
409
-
410
- wp_localize_script( 'astra-sites-admin-page', 'astraSitesAdmin', $data );
411
-
412
- }
413
-
414
- /**
415
- * Load all the required files in the importer.
416
- *
417
- * @since 1.0.0
418
- */
419
- private function includes() {
420
-
421
- require_once ASTRA_SITES_DIR . 'inc/lib/astra-notices/class-astra-notices.php';
422
- require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-white-label.php';
423
- require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-page.php';
424
- require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/class-astra-sites-compatibility.php';
425
- require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-importer.php';
426
- }
427
-
428
- /**
429
- * Required Plugin Activate
430
- *
431
- * @since 1.0.0
432
- */
433
- public function required_plugin_activate() {
434
-
435
- if ( ! current_user_can( 'install_plugins' ) || ! isset( $_POST['init'] ) || ! $_POST['init'] ) {
436
- wp_send_json_error(
437
- array(
438
- 'success' => false,
439
- 'message' => __( 'No plugin specified', 'astra-sites' ),
440
- )
441
- );
442
- }
443
-
444
- $data = array();
445
- $plugin_init = ( isset( $_POST['init'] ) ) ? esc_attr( $_POST['init'] ) : '';
446
- $astra_site_options = ( isset( $_POST['options'] ) ) ? json_decode( stripslashes( $_POST['options'] ) ) : '';
447
- $enabled_extensions = ( isset( $_POST['enabledExtensions'] ) ) ? json_decode( stripslashes( $_POST['enabledExtensions'] ) ) : '';
448
-
449
- $data['astra_site_options'] = $astra_site_options;
450
- $data['enabled_extensions'] = $enabled_extensions;
451
-
452
- $activate = activate_plugin( $plugin_init, '', false, true );
453
-
454
- if ( is_wp_error( $activate ) ) {
455
- wp_send_json_error(
456
- array(
457
- 'success' => false,
458
- 'message' => $activate->get_error_message(),
459
- )
460
- );
461
- }
462
-
463
- do_action( 'astra_sites_after_plugin_activation', $plugin_init, $data );
464
-
465
- wp_send_json_success(
466
- array(
467
- 'success' => true,
468
- 'message' => __( 'Plugin Activated', 'astra-sites' ),
469
- )
470
- );
471
-
472
- }
473
-
474
- /**
475
- * Required Plugin
476
- *
477
- * @since 1.0.0
478
- * @return void
479
- */
480
- public function required_plugin() {
481
-
482
- // Verify Nonce.
483
- check_ajax_referer( 'astra-sites', '_ajax_nonce' );
484
-
485
- $response = array(
486
- 'active' => array(),
487
- 'inactive' => array(),
488
- 'notinstalled' => array(),
489
- );
490
-
491
- if ( ! current_user_can( 'customize' ) ) {
492
- wp_send_json_error( $response );
493
- }
494
-
495
- $required_plugins = ( isset( $_POST['required_plugins'] ) ) ? $_POST['required_plugins'] : array();
496
-
497
- if ( count( $required_plugins ) > 0 ) {
498
- foreach ( $required_plugins as $key => $plugin ) {
499
-
500
- /**
501
- * Has Pro Version Support?
502
- * And
503
- * Is Pro Version Installed?
504
- */
505
- $plugin_pro = self::pro_plugin_exist( $plugin['init'] );
506
- if ( $plugin_pro ) {
507
-
508
- // Pro - Active.
509
- if ( is_plugin_active( $plugin_pro['init'] ) ) {
510
- $response['active'][] = $plugin_pro;
511
-
512
- // Pro - Inactive.
513
- } else {
514
- $response['inactive'][] = $plugin_pro;
515
- }
516
- } else {
517
-
518
- // Lite - Installed but Inactive.
519
- if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) && is_plugin_inactive( $plugin['init'] ) ) {
520
-
521
- $response['inactive'][] = $plugin;
522
-
523
- // Lite - Not Installed.
524
- } elseif ( ! file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) ) {
525
-
526
- $response['notinstalled'][] = $plugin;
527
-
528
- // Lite - Active.
529
- } else {
530
- $response['active'][] = $plugin;
531
- }
532
- }
533
- }
534
- }
535
-
536
- // Send response.
537
- wp_send_json_success( $response );
538
- }
539
-
540
- /**
541
- * Has Pro Version Support?
542
- * And
543
- * Is Pro Version Installed?
544
- *
545
- * Check Pro plugin version exist of requested plugin lite version.
546
- *
547
- * Eg. If plugin 'BB Lite Version' required to import demo. Then we check the 'BB Agency Version' is exist?
548
- * If yes then we only 'Activate' Agency Version. [We couldn't install agency version.]
549
- * Else we 'Activate' or 'Install' Lite Version.
550
- *
551
- * @since 1.0.1
552
- *
553
- * @param string $lite_version Lite version init file.
554
- * @return mixed Return false if not installed or not supported by us
555
- * else return 'Pro' version details.
556
- */
557
- public static function pro_plugin_exist( $lite_version = '' ) {
558
-
559
- // Lite init => Pro init.
560
- $plugins = apply_filters(
561
- 'astra_sites_pro_plugin_exist',
562
- array(
563
- 'beaver-builder-lite-version/fl-builder.php' => array(
564
- 'slug' => 'bb-plugin',
565
- 'init' => 'bb-plugin/fl-builder.php',
566
- 'name' => 'Beaver Builder Plugin',
567
- ),
568
- 'ultimate-addons-for-beaver-builder-lite/bb-ultimate-addon.php' => array(
569
- 'slug' => 'bb-ultimate-addon',
570
- 'init' => 'bb-ultimate-addon/bb-ultimate-addon.php',
571
- 'name' => 'Ultimate Addon for Beaver Builder',
572
- ),
573
- 'wpforms-lite/wpforms.php' => array(
574
- 'slug' => 'wpforms',
575
- 'init' => 'wpforms/wpforms.php',
576
- 'name' => 'WPForms',
577
- ),
578
- ),
579
- $lite_version
580
- );
581
-
582
- if ( isset( $plugins[ $lite_version ] ) ) {
583
-
584
- // Pro plugin directory exist?
585
- if ( file_exists( WP_PLUGIN_DIR . '/' . $plugins[ $lite_version ]['init'] ) ) {
586
- return $plugins[ $lite_version ];
587
- }
588
- }
589
-
590
- return false;
591
- }
592
-
593
- }
594
-
595
- /**
596
- * Kicking this off by calling 'get_instance()' method
597
- */
598
- Astra_Sites::get_instance();
599
-
600
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Astra Sites
4
+ *
5
+ * @since 1.0.0
6
+ * @package Astra Sites
7
+ */
8
+
9
+ defined( 'ABSPATH' ) or exit;
10
+
11
+ if ( ! class_exists( 'Astra_Sites' ) ) :
12
+
13
+ /**
14
+ * Astra_Sites
15
+ */
16
+ class Astra_Sites {
17
+
18
+ /**
19
+ * API URL which is used to get the response from.
20
+ *
21
+ * @since 1.0.0
22
+ * @var (String) URL
23
+ */
24
+ public static $api_url;
25
+
26
+ /**
27
+ * Instance of Astra_Sites
28
+ *
29
+ * @since 1.0.0
30
+ * @var (Object) Astra_Sites
31
+ */
32
+ private static $_instance = null;
33
+
34
+ /**
35
+ * Instance of Astra_Sites.
36
+ *
37
+ * @since 1.0.0
38
+ *
39
+ * @return object Class object.
40
+ */
41
+ public static function get_instance() {
42
+ if ( ! isset( self::$_instance ) ) {
43
+ self::$_instance = new self;
44
+ }
45
+
46
+ return self::$_instance;
47
+ }
48
+
49
+ /**
50
+ * Constructor.
51
+ *
52
+ * @since 1.0.0
53
+ */
54
+ private function __construct() {
55
+
56
+ self::set_api_url();
57
+
58
+ $this->includes();
59
+
60
+ add_action( 'admin_notices', array( $this, 'add_notice' ), 1 );
61
+ add_action( 'admin_notices', array( $this, 'admin_notices' ) );
62
+ add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
63
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
64
+
65
+ // AJAX.
66
+ add_action( 'wp_ajax_astra-required-plugins', array( $this, 'required_plugin' ) );
67
+ add_action( 'wp_ajax_astra-required-plugin-activate', array( $this, 'required_plugin_activate' ) );
68
+ add_action( 'wp_ajax_astra-sites-backup-settings', array( $this, 'backup_settings' ) );
69
+ add_action( 'wp_ajax_astra-sites-set-reset-data', array( $this, 'set_reset_data' ) );
70
+ add_action( 'wp_ajax_astra-sites-activate-theme', array( $this, 'activate_theme' ) );
71
+ add_action( 'wp_ajax_astra-sites-getting-started-notice', array( $this, 'getting_started_notice' ) );
72
+ }
73
+
74
+ /**
75
+ * Close getting started notice for current user
76
+ *
77
+ * @since 1.3.5
78
+ * @return void
79
+ */
80
+ function getting_started_notice() {
81
+ update_user_meta( get_current_user_id(), '_astra_sites_gettings_started', true );
82
+ wp_send_json_success();
83
+ }
84
+
85
+ /**
86
+ * Activate theme
87
+ *
88
+ * @since 1.3.2
89
+ * @return void
90
+ */
91
+ function activate_theme() {
92
+
93
+ switch_theme( 'astra' );
94
+
95
+ wp_send_json_success(
96
+ array(
97
+ 'success' => true,
98
+ 'message' => __( 'Theme Activated', 'astra-sites' ),
99
+ )
100
+ );
101
+ }
102
+
103
+ /**
104
+ * Set reset data
105
+ */
106
+ function set_reset_data() {
107
+ if ( ! current_user_can( 'manage_options' ) ) {
108
+ return;
109
+ }
110
+
111
+ global $wpdb;
112
+
113
+ $post_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_post'" );
114
+ $form_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_astra_sites_imported_wp_forms'" );
115
+ $term_ids = $wpdb->get_col( "SELECT term_id FROM {$wpdb->termmeta} WHERE meta_key='_astra_sites_imported_term'" );
116
+
117
+ wp_send_json_success(
118
+ array(
119
+ 'reset_posts' => $post_ids,
120
+ 'reset_wp_forms' => $form_ids,
121
+ 'reset_terms' => $term_ids,
122
+ )
123
+ );
124
+ }
125
+
126
+ /**
127
+ * Backup our existing settings.
128
+ */
129
+ function backup_settings() {
130
+ if ( ! current_user_can( 'manage_options' ) ) {
131
+ return;
132
+ }
133
+
134
+ $file_name = 'astra-sites-backup-' . date( 'd-M-Y-h-i-s' ) . '.json';
135
+ $old_settings = get_option( 'astra-settings', array() );
136
+ $upload_dir = Astra_Sites_Importer_Log::get_instance()->log_dir();
137
+ $upload_path = trailingslashit( $upload_dir['path'] );
138
+ $log_file = $upload_path . $file_name;
139
+ $file_system = Astra_Sites_Importer_Log::get_instance()->get_filesystem();
140
+
141
+ // If file system fails? Then take a backup in site option.
142
+ if ( false === $file_system->put_contents( $log_file, json_encode( $old_settings ), FS_CHMOD_FILE ) ) {
143
+ update_option( 'astra_sites_' . $file_name, $old_settings );
144
+ }
145
+
146
+ wp_send_json_success();
147
+ }
148
+
149
+ /**
150
+ * Add Admin Notice.
151
+ */
152
+ function add_notice() {
153
+
154
+ $theme_status = 'astra-sites-theme-' . $this->get_theme_status();
155
+
156
+ Astra_Notices::add_notice(
157
+ array(
158
+ 'id' => 'astra-theme-activation-nag',
159
+ 'type' => 'error',
160
+ 'show_if' => ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) ? true : false,
161
+ /* translators: 1: theme.php file*/
162
+ 'message' => sprintf( __( '<p>Astra Theme needs to be active for you to use currently installed "%1$s" plugin. <a href="#" class="%3$s" data-theme-slug="astra">Install & Activate Now</a></p>', 'astra-sites' ), ASTRA_SITES_NAME, esc_url( admin_url( 'themes.php?theme=astra' ) ), $theme_status ),
163
+ 'dismissible' => true,
164
+ 'dismissible-time' => WEEK_IN_SECONDS,
165
+ )
166
+ );
167
+ }
168
+
169
+ /**
170
+ * Get theme install, active or inactive status.
171
+ *
172
+ * @since 1.3.2
173
+ *
174
+ * @return string Theme status
175
+ */
176
+ function get_theme_status() {
177
+
178
+ $theme = wp_get_theme();
179
+
180
+ // Theme installed and activate.
181
+ if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
182
+ return 'installed-and-active';
183
+ }
184
+
185
+ // Theme installed but not activate.
186
+ foreach ( (array) wp_get_themes() as $theme_dir => $theme ) {
187
+ if ( 'Astra' === $theme->name || 'Astra' === $theme->parent_theme ) {
188
+ return 'installed-but-inactive';
189
+ }
190
+ }
191
+
192
+ return 'not-installed';
193
+ }
194
+
195
+ /**
196
+ * Loads textdomain for the plugin.
197
+ *
198
+ * @since 1.0.1
199
+ */
200
+ function load_textdomain() {
201
+ load_plugin_textdomain( 'astra-sites' );
202
+ }
203
+
204
+ /**
205
+ * Admin Notices
206
+ *
207
+ * @since 1.0.5
208
+ * @return void
209
+ */
210
+ function admin_notices() {
211
+
212
+ if ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) {
213
+ return;
214
+ }
215
+
216
+ add_action( 'plugin_action_links_' . ASTRA_SITES_BASE, array( $this, 'action_links' ) );
217
+ }
218
+
219
+ /**
220
+ * Show action links on the plugin screen.
221
+ *
222
+ * @param mixed $links Plugin Action links.
223
+ * @return array
224
+ */
225
+ function action_links( $links ) {
226
+ $action_links = array(
227
+ 'settings' => '<a href="' . admin_url( 'themes.php?page=astra-sites' ) . '" aria-label="' . esc_attr__( 'See Library', 'astra-sites' ) . '">' . esc_html__( 'See Library', 'astra-sites' ) . '</a>',
228
+ );
229
+
230
+ return array_merge( $action_links, $links );
231
+ }
232
+
233
+ /**
234
+ * Setter for $api_url
235
+ *
236
+ * @since 1.0.0
237
+ */
238
+ public static function set_api_url() {
239
+ self::$api_url = apply_filters( 'astra_sites_api_url', 'https://websitedemos.net/wp-json/wp/v2/' );
240
+
241
+ }
242
+
243
+ /**
244
+ * Enqueue admin scripts.
245
+ *
246
+ * @since 1.3.2 Added 'install-theme.js' to install and activate theme.
247
+ * @since 1.0.5 Added 'getUpgradeText' and 'getUpgradeURL' localize variables.
248
+ *
249
+ * @since 1.0.0
250
+ *
251
+ * @param string $hook Current hook name.
252
+ * @return void
253
+ */
254
+ public function admin_enqueue( $hook = '' ) {
255
+
256
+ wp_enqueue_script( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/js/install-theme.js', array( 'jquery', 'updates' ), ASTRA_SITES_VER, true );
257
+ wp_enqueue_style( 'astra-sites-install-theme', ASTRA_SITES_URI . 'inc/assets/css/install-theme.css', null, ASTRA_SITES_VER, 'all' );
258
+
259
+ $data = apply_filters(
260
+ 'astra_sites_install_theme_localize_vars',
261
+ array(
262
+ 'installed' => __( 'Installed! Activating..', 'astra-sites' ),
263
+ 'activating' => __( 'Activating..', 'astra-sites' ),
264
+ 'activated' => __( 'Activated! Reloading..', 'astra-sites' ),
265
+ 'installing' => __( 'Installing..', 'astra-sites' ),
266
+ 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
267
+ )
268
+ );
269
+ wp_localize_script( 'astra-sites-install-theme', 'AstraSitesInstallThemeVars', $data );
270
+
271
+ if ( 'appearance_page_astra-sites' !== $hook ) {
272
+ return;
273
+ }
274
+
275
+ global $is_IE, $is_edge;
276
+
277
+ if ( $is_IE || $is_edge ) {
278
+ wp_enqueue_script( 'astra-sites-eventsource', ASTRA_SITES_URI . 'inc/assets/js/eventsource.min.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
279
+ }
280
+
281
+ // Fetch.
282
+ wp_register_script( 'astra-sites-fetch', ASTRA_SITES_URI . 'inc/assets/js/fetch.umd.js', array( 'jquery' ), ASTRA_SITES_VER, true );
283
+
284
+ // API.
285
+ wp_register_script( 'astra-sites-api', ASTRA_SITES_URI . 'inc/assets/js/astra-sites-api.js', array( 'jquery', 'astra-sites-fetch' ), ASTRA_SITES_VER, true );
286
+
287
+ // Admin Page.
288
+ wp_enqueue_style( 'astra-sites-admin', ASTRA_SITES_URI . 'inc/assets/css/admin.css', ASTRA_SITES_VER, true );
289
+ wp_enqueue_script( 'astra-sites-admin-page', ASTRA_SITES_URI . 'inc/assets/js/admin-page.js', array( 'jquery', 'wp-util', 'updates' ), ASTRA_SITES_VER, true );
290
+ wp_enqueue_script( 'astra-sites-render-grid', ASTRA_SITES_URI . 'inc/assets/js/render-grid.js', array( 'wp-util', 'astra-sites-api', 'imagesloaded', 'jquery' ), ASTRA_SITES_VER, true );
291
+
292
+ $data = apply_filters(
293
+ 'astra_sites_localize_vars',
294
+ array(
295
+ 'ApiURL' => self::$api_url,
296
+ 'filters' => array(
297
+ 'page_builder' => array(
298
+ 'title' => __( 'Page Builder', 'astra-sites' ),
299
+ 'slug' => 'astra-site-page-builder',
300
+ 'trigger' => 'astra-api-category-loaded',
301
+ ),
302
+ 'categories' => array(
303
+ 'title' => __( 'Categories', 'astra-sites' ),
304
+ 'slug' => 'astra-site-category',
305
+ 'trigger' => 'astra-api-category-loaded',
306
+ ),
307
+ ),
308
+ )
309
+ );
310
+ wp_localize_script( 'astra-sites-api', 'astraSitesApi', $data );
311
+
312
+ // Use this for premium demos.
313
+ $request_params = apply_filters(
314
+ 'astra_sites_api_params',
315
+ array(
316
+ 'purchase_key' => '',
317
+ 'site_url' => '',
318
+ 'par-page' => 30,
319
+ )
320
+ );
321
+
322
+ $data = apply_filters(
323
+ 'astra_sites_render_localize_vars',
324
+ array(
325
+ 'sites' => $request_params,
326
+ 'page-builders' => array(),
327
+ 'categories' => array(),
328
+ 'settings' => array(),
329
+ 'default_page_builder' => Astra_Sites_Page::get_instance()->get_setting( 'page_builder' ),
330
+ )
331
+ );
332
+
333
+ wp_localize_script( 'astra-sites-render-grid', 'astraRenderGrid', $data );
334
+
335
+ $data = apply_filters(
336
+ 'astra_sites_localize_vars',
337
+ array(
338
+ 'debug' => ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || isset( $_GET['debug'] ) ) ? true : false,
339
+ 'isPro' => defined( 'ASTRA_PRO_SITES_NAME' ) ? true : false,
340
+ 'isWhiteLabeled' => Astra_Sites_White_Label::get_instance()->is_white_labeled(),
341
+ 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
342
+ 'siteURL' => site_url(),
343
+ 'docUrl' => 'https://wpastra.com/',
344
+ 'getProText' => __( 'Get Agency Bundle', 'astra-sites' ),
345
+ 'getProURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
346
+ 'getUpgradeText' => __( 'Upgrade', 'astra-sites' ),
347
+ 'getUpgradeURL' => esc_url( 'https://wpastra.com/agency/?utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=wp-dashboard' ),
348
+ '_ajax_nonce' => wp_create_nonce( 'astra-sites' ),
349
+ 'requiredPlugins' => array(),
350
+ 'XMLReaderDisabled' => ! class_exists( 'XMLReader' ) ? true : false,
351
+ 'strings' => array(
352
+ /* translators: %s are HTML tags. */
353
+ 'warningXMLReader' => sprintf( __( '%1$sRequired XMLReader PHP extension is missing on your server!%2$sAstra Sites import requires XMLReader extension to be installed. Please contact your web hosting provider and ask them to install and activate the XMLReader PHP extension.', 'astra-sites' ), '<div class="notice astra-sites-xml-notice notice-error"><p><b>', '</b></p><p>', '</p></div>' ),
354
+ 'warningBeforeCloseWindow' => __( 'Warning! Astra Site Import process is not complete. Don\'t close the window until import process complete. Do you still want to leave the window?', 'astra-sites' ),
355
+ 'importFailedBtnSmall' => __( 'Error!', 'astra-sites' ),
356
+ 'importFailedBtnLarge' => __( 'Error! Read Possibilities.', 'astra-sites' ),
357
+ 'importFailedURL' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=astra-sites&utm_medium=import-failed' ),
358
+ 'viewSite' => __( 'Done! View Site', 'astra-sites' ),
359
+ 'btnActivating' => __( 'Activating', 'astra-sites' ) . '&hellip;',
360
+ 'btnActive' => __( 'Active', 'astra-sites' ),
361
+ 'importFailBtn' => __( 'Import failed.', 'astra-sites' ),
362
+ 'importFailBtnLarge' => __( 'Import failed. See error log.', 'astra-sites' ),
363
+ 'importDemo' => __( 'Import This Site', 'astra-sites' ),
364
+ 'importingDemo' => __( 'Importing..', 'astra-sites' ),
365
+ 'DescExpand' => __( 'Read more', 'astra-sites' ) . '&hellip;',
366
+ 'DescCollapse' => __( 'Hide', 'astra-sites' ),
367
+ 'responseError' => __( 'There was a problem receiving a response from server.', 'astra-sites' ),
368
+ 'searchNoFound' => __( 'No Demos found, Try a different search.', 'astra-sites' ),
369
+ ),
370
+ 'log' => array(
371
+ 'installingPlugin' => __( 'Installing plugin ', 'astra-sites' ),
372
+ 'installed' => __( 'Plugin installed!', 'astra-sites' ),
373
+ 'activating' => __( 'Activating plugin ', 'astra-sites' ),
374
+ 'activated' => __( 'Plugin activated ', 'astra-sites' ),
375
+ 'bulkActivation' => __( 'Bulk plugin activation...', 'astra-sites' ),
376
+ 'activate' => __( 'Plugin activate - ', 'astra-sites' ),
377
+ 'activationError' => __( 'Error! While activating plugin - ', 'astra-sites' ),
378
+ 'bulkInstall' => __( 'Bulk plugin installation...', 'astra-sites' ),
379
+ 'api' => __( 'Site API ', 'astra-sites' ),
380
+ 'importing' => __( 'Importing..', 'astra-sites' ),
381
+ 'processingRequest' => __( 'Processing requests...', 'astra-sites' ),
382
+ 'importCustomizer' => __( 'Importing "Customizer Settings"...', 'astra-sites' ),
383
+ 'importCustomizerSuccess' => __( 'Imported customizer settings!', 'astra-sites' ),
384
+ 'importWPForms' => __( 'Importing "Contact Forms"...', 'astra-sites' ),
385
+ 'importWPFormsSuccess' => __( 'Imported Contact Forms!', 'astra-sites' ),
386
+ 'importXMLPrepare' => __( 'Preparing "XML" Data...', 'astra-sites' ),
387
+ 'importXMLPrepareSuccess' => __( 'Set XML data!', 'astra-sites' ),
388
+ 'importXML' => __( 'Importing "XML"...', 'astra-sites' ),
389
+ 'importXMLSuccess' => __( 'Imported XML!', 'astra-sites' ),
390
+ 'importOptions' => __( 'Importing "Options"...', 'astra-sites' ),
391
+ 'importOptionsSuccess' => __( 'Imported Options!', 'astra-sites' ),
392
+ 'importWidgets' => __( 'Importing "Widgets"...', 'astra-sites' ),
393
+ 'importWidgetsSuccess' => __( 'Imported Widgets!', 'astra-sites' ),
394
+ 'serverConfiguration' => esc_url( 'https://wpastra.com/docs/?p=1314&utm_source=demo-import-panel&utm_campaign=import-error&utm_medium=wp-dashboard' ),
395
+ 'success' => __( 'View site: ', 'astra-sites' ),
396
+ 'gettingData' => __( 'Getting Site Information..', 'astra-sites' ),
397
+ 'importingCustomizer' => __( 'Importing Customizer Settings..', 'astra-sites' ),
398
+ 'importingWPForms' => __( 'Importing Contact Forms..', 'astra-sites' ),
399
+ 'importXMLPreparing' => __( 'Setting up import data..', 'astra-sites' ),
400
+ 'importingXML' => __( 'Importing Content..', 'astra-sites' ),
401
+ 'importingOptions' => __( 'Importing Site Options..', 'astra-sites' ),
402
+ 'importingWidgets' => __( 'Importing Widgets..', 'astra-sites' ),
403
+ 'importComplete' => __( 'Import Complete..', 'astra-sites' ),
404
+ 'preview' => __( 'Previewing ', 'astra-sites' ),
405
+ 'importLogText' => __( 'See Error Log &rarr;', 'astra-sites' ),
406
+ ),
407
+ )
408
+ );
409
+
410
+ wp_localize_script( 'astra-sites-admin-page', 'astraSitesAdmin', $data );
411
+
412
+ }
413
+
414
+ /**
415
+ * Load all the required files in the importer.
416
+ *
417
+ * @since 1.0.0
418
+ */
419
+ private function includes() {
420
+
421
+ require_once ASTRA_SITES_DIR . 'inc/lib/astra-notices/class-astra-notices.php';
422
+ require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-white-label.php';
423
+ require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-page.php';
424
+ require_once ASTRA_SITES_DIR . 'inc/classes/compatibility/class-astra-sites-compatibility.php';
425
+ require_once ASTRA_SITES_DIR . 'inc/classes/class-astra-sites-importer.php';
426
+ }
427
+
428
+ /**
429
+ * Required Plugin Activate
430
+ *
431
+ * @since 1.0.0
432
+ */
433
+ public function required_plugin_activate() {
434
+
435
+ if ( ! current_user_can( 'install_plugins' ) || ! isset( $_POST['init'] ) || ! $_POST['init'] ) {
436
+ wp_send_json_error(
437
+ array(
438
+ 'success' => false,
439
+ 'message' => __( 'No plugin specified', 'astra-sites' ),
440
+ )
441
+ );
442
+ }
443
+
444
+ $data = array();
445
+ $plugin_init = ( isset( $_POST['init'] ) ) ? esc_attr( $_POST['init'] ) : '';
446
+ $astra_site_options = ( isset( $_POST['options'] ) ) ? json_decode( stripslashes( $_POST['options'] ) ) : '';
447
+ $enabled_extensions = ( isset( $_POST['enabledExtensions'] ) ) ? json_decode( stripslashes( $_POST['enabledExtensions'] ) ) : '';
448
+
449
+ $data['astra_site_options'] = $astra_site_options;
450
+ $data['enabled_extensions'] = $enabled_extensions;
451
+
452
+ $activate = activate_plugin( $plugin_init, '', false, true );
453
+
454
+ if ( is_wp_error( $activate ) ) {
455
+ wp_send_json_error(
456
+ array(
457
+ 'success' => false,
458
+ 'message' => $activate->get_error_message(),
459
+ )
460
+ );
461
+ }
462
+
463
+ do_action( 'astra_sites_after_plugin_activation', $plugin_init, $data );
464
+
465
+ wp_send_json_success(
466
+ array(
467
+ 'success' => true,
468
+ 'message' => __( 'Plugin Activated', 'astra-sites' ),
469
+ )
470
+ );
471
+
472
+ }
473
+
474
+ /**
475
+ * Required Plugin
476
+ *
477
+ * @since 1.0.0
478
+ * @return void
479
+ */
480
+ public function required_plugin() {
481
+
482
+ // Verify Nonce.
483
+ check_ajax_referer( 'astra-sites', '_ajax_nonce' );
484
+
485
+ $response = array(
486
+ 'active' => array(),
487
+ 'inactive' => array(),
488
+ 'notinstalled' => array(),
489
+ );
490
+
491
+ if ( ! current_user_can( 'customize' ) ) {
492
+ wp_send_json_error( $response );
493
+ }
494
+
495
+ $required_plugins = ( isset( $_POST['required_plugins'] ) ) ? $_POST['required_plugins'] : array();
496
+ $third_party_required_plugins = array();
497
+ $third_party_plugins = array(
498
+ 'learndash-course-grid' => array(
499
+ 'init' => 'learndash-course-grid/learndash_course_grid.php',
500
+ 'name' => 'LearnDash Course Grid',
501
+ ),
502
+ 'sfwd-lms' => array(
503
+ 'init' => 'sfwd-lms/sfwd_lms.php',
504
+ 'name' => 'LearnDash LMS',
505
+ ),
506
+ );
507
+
508
+ if ( count( $required_plugins ) > 0 ) {
509
+ foreach ( $required_plugins as $key => $plugin ) {
510
+
511
+ /**
512
+ * Has Pro Version Support?
513
+ * And
514
+ * Is Pro Version Installed?
515
+ */
516
+ $plugin_pro = self::pro_plugin_exist( $plugin['init'] );
517
+ if ( $plugin_pro ) {
518
+
519
+ // Pro - Active.
520
+ if ( is_plugin_active( $plugin_pro['init'] ) ) {
521
+ $response['active'][] = $plugin_pro;
522
+
523
+ // Pro - Inactive.
524
+ } else {
525
+ $response['inactive'][] = $plugin_pro;
526
+ }
527
+ } else {
528
+
529
+ // Lite - Installed but Inactive.
530
+ if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) && is_plugin_inactive( $plugin['init'] ) ) {
531
+
532
+ $response['inactive'][] = $plugin;
533
+
534
+ // Lite - Not Installed.
535
+ } elseif ( ! file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) ) {
536
+
537
+ $response['notinstalled'][] = $plugin;
538
+
539
+ // Added premium plugins which need to install first.
540
+ if ( array_key_exists( $plugin['slug'], $third_party_plugins ) ) {
541
+ $third_party_required_plugins[] = $plugin;
542
+ }
543
+
544
+ // Lite - Active.
545
+ } else {
546
+ $response['active'][] = $plugin;
547
+ }
548
+ }
549
+ }
550
+ }
551
+
552
+ // Send response.
553
+ wp_send_json_success(
554
+ array(
555
+ 'required_plugins' => $response,
556
+ 'third_party_required_plugins' => $third_party_required_plugins,
557
+ )
558
+ );
559
+ }
560
+
561
+ /**
562
+ * Has Pro Version Support?
563
+ * And
564
+ * Is Pro Version Installed?
565
+ *
566
+ * Check Pro plugin version exist of requested plugin lite version.
567
+ *
568
+ * Eg. If plugin 'BB Lite Version' required to import demo. Then we check the 'BB Agency Version' is exist?
569
+ * If yes then we only 'Activate' Agency Version. [We couldn't install agency version.]
570
+ * Else we 'Activate' or 'Install' Lite Version.
571
+ *
572
+ * @since 1.0.1
573
+ *
574
+ * @param string $lite_version Lite version init file.
575
+ * @return mixed Return false if not installed or not supported by us
576
+ * else return 'Pro' version details.
577
+ */
578
+ public static function pro_plugin_exist( $lite_version = '' ) {
579
+
580
+ // Lite init => Pro init.
581
+ $plugins = apply_filters(
582
+ 'astra_sites_pro_plugin_exist',
583
+ array(
584
+ 'beaver-builder-lite-version/fl-builder.php' => array(
585
+ 'slug' => 'bb-plugin',
586
+ 'init' => 'bb-plugin/fl-builder.php',
587
+ 'name' => 'Beaver Builder Plugin',
588
+ ),
589
+ 'ultimate-addons-for-beaver-builder-lite/bb-ultimate-addon.php' => array(
590
+ 'slug' => 'bb-ultimate-addon',
591
+ 'init' => 'bb-ultimate-addon/bb-ultimate-addon.php',
592
+ 'name' => 'Ultimate Addon for Beaver Builder',
593
+ ),
594
+ 'wpforms-lite/wpforms.php' => array(
595
+ 'slug' => 'wpforms',
596
+ 'init' => 'wpforms/wpforms.php',
597
+ 'name' => 'WPForms',
598
+ ),
599
+ ),
600
+ $lite_version
601
+ );
602
+
603
+ if ( isset( $plugins[ $lite_version ] ) ) {
604
+
605
+ // Pro plugin directory exist?
606
+ if ( file_exists( WP_PLUGIN_DIR . '/' . $plugins[ $lite_version ]['init'] ) ) {
607
+ return $plugins[ $lite_version ];
608
+ }
609
+ }
610
+
611
+ return false;
612
+ }
613
+
614
+ }
615
+
616
+ /**
617
+ * Kicking this off by calling 'get_instance()' method
618
+ */
619
+ Astra_Sites::get_instance();
620
+
621
+ endif;
inc/importers/batch-processing/class-astra-sites-batch-processing.php CHANGED
@@ -1,227 +1,249 @@
1
- <?php
2
- /**
3
- * Batch Processing
4
- *
5
- * @package Astra Sites
6
- * @since 1.0.14
7
- */
8
-
9
- if ( ! class_exists( 'Astra_Sites_Batch_Processing' ) ) :
10
-
11
- /**
12
- * Astra_Sites_Batch_Processing
13
- *
14
- * @since 1.0.14
15
- */
16
- class Astra_Sites_Batch_Processing {
17
-
18
- /**
19
- * Instance
20
- *
21
- * @since 1.0.14
22
- * @var object Class object.
23
- * @access private
24
- */
25
- private static $instance;
26
-
27
- /**
28
- * Process All
29
- *
30
- * @since 1.0.14
31
- * @var object Class object.
32
- * @access public
33
- */
34
- public static $process_all;
35
-
36
- /**
37
- * Initiator
38
- *
39
- * @since 1.0.14
40
- * @return object initialized object of class.
41
- */
42
- public static function get_instance() {
43
- if ( ! isset( self::$instance ) ) {
44
- self::$instance = new self;
45
- }
46
- return self::$instance;
47
- }
48
-
49
- /**
50
- * Constructor
51
- *
52
- * @since 1.0.14
53
- */
54
- public function __construct() {
55
-
56
- // Core Helpers - Image.
57
- // @todo This file is required for Elementor.
58
- // Once we implement our logic for updating elementor data then we'll delete this file.
59
- require_once ABSPATH . 'wp-admin/includes/image.php';
60
-
61
- // Core Helpers - Image Downloader.
62
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-astra-sites-image-importer.php';
63
-
64
- // Core Helpers - Batch Processing.
65
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-wp-async-request.php';
66
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-wp-background-process.php';
67
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-wp-background-process-astra.php';
68
-
69
- // Prepare Widgets.
70
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-widgets.php';
71
-
72
- // Prepare Page Builders.
73
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-beaver-builder.php';
74
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-elementor.php';
75
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-gutenberg.php';
76
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-brizy.php';
77
-
78
- // Prepare Misc.
79
- require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-misc.php';
80
-
81
- self::$process_all = new WP_Background_Process_Astra();
82
-
83
- // Start image importing after site import complete.
84
- add_filter( 'astra_sites_image_importer_skip_image', array( $this, 'skip_image' ), 10, 2 );
85
- add_action( 'astra_sites_import_complete', array( $this, 'start_process' ) );
86
- }
87
-
88
- /**
89
- * Skip Image from Batch Processing.
90
- *
91
- * @since 1.0.14
92
- *
93
- * @param boolean $can_process Batch process image status.
94
- * @param array $attachment Batch process image input.
95
- * @return boolean
96
- */
97
- function skip_image( $can_process, $attachment ) {
98
-
99
- if ( isset( $attachment['url'] ) && ! empty( $attachment['url'] ) ) {
100
- if (
101
- strpos( $attachment['url'], 'brainstormforce.com' ) !== false ||
102
- strpos( $attachment['url'], 'wpastra.com' ) !== false ||
103
- strpos( $attachment['url'], 'sharkz.in' ) !== false ||
104
- strpos( $attachment['url'], 'websitedemos.net' ) !== false
105
- ) {
106
- return false;
107
- }
108
- }
109
-
110
- return true;
111
- }
112
-
113
- /**
114
- * Start Image Import
115
- *
116
- * @since 1.0.14
117
- *
118
- * @return void
119
- */
120
- public function start_process() {
121
-
122
- Astra_Sites_Importer_Log::add( 'Batch Process Started!' );
123
- Astra_Sites_Importer_Log::add( Astra_Sites_White_Label::get_instance()->page_title( ASTRA_SITES_NAME ) . ' - Importing Images for Blog name \'' . get_bloginfo( 'name' ) . '\' (' . get_current_blog_id() . ')' );
124
-
125
- // Add "widget" in import [queue].
126
- if ( class_exists( 'Astra_Sites_Batch_Processing_Widgets' ) ) {
127
- self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Widgets::get_instance() );
128
- }
129
-
130
- // Add "gutenberg" in import [queue].
131
- self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Gutenberg::get_instance() );
132
-
133
- // Add "brizy" in import [queue].
134
- if ( is_plugin_active( 'brizy/brizy.php' ) ) {
135
- self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Brizy::get_instance() );
136
- }
137
-
138
- // Add "bb-plugin" in import [queue].
139
- // Add "beaver-builder-lite-version" in import [queue].
140
- if ( is_plugin_active( 'beaver-builder-lite-version/fl-builder.php' ) || is_plugin_active( 'bb-plugin/fl-builder.php' ) ) {
141
- self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Beaver_Builder::get_instance() );
142
- }
143
-
144
- // Add "elementor" in import [queue].
145
- // @todo Remove required `allow_url_fopen` support.
146
- if ( ini_get( 'allow_url_fopen' ) ) {
147
- if ( is_plugin_active( 'elementor/elementor.php' ) ) {
148
- $import = new \Elementor\TemplateLibrary\Astra_Sites_Batch_Processing_Elementor();
149
- self::$process_all->push_to_queue( $import );
150
- }
151
- } else {
152
- Astra_Sites_Importer_Log::add( 'Couldn\'t not import image due to allow_url_fopen() is disabled!' );
153
- }
154
-
155
- // Add "astra-addon" in import [queue].
156
- if ( is_plugin_active( 'astra-addon/astra-addon.php' ) ) {
157
- if ( class_exists( 'Astra_Sites_Compatibility_Astra_Pro' ) ) {
158
- self::$process_all->push_to_queue( Astra_Sites_Compatibility_Astra_Pro::get_instance() );
159
- }
160
- }
161
-
162
- // Add "misc" in import [queue].
163
- self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Misc::get_instance() );
164
-
165
- // Dispatch Queue.
166
- self::$process_all->save()->dispatch();
167
- }
168
-
169
- /**
170
- * Get all post id's
171
- *
172
- * @since 1.0.14
173
- *
174
- * @param array $post_types Post types.
175
- * @return array
176
- */
177
- public static function get_pages( $post_types = array() ) {
178
-
179
- if ( $post_types ) {
180
- $args = array(
181
- 'post_type' => $post_types,
182
-
183
- // Query performance optimization.
184
- 'fields' => 'ids',
185
- 'no_found_rows' => true,
186
- 'post_status' => 'publish',
187
- 'posts_per_page' => -1,
188
- );
189
-
190
- $query = new WP_Query( $args );
191
-
192
- // Have posts?
193
- if ( $query->have_posts() ) :
194
-
195
- return $query->posts;
196
-
197
- endif;
198
- }
199
-
200
- return null;
201
- }
202
-
203
- /**
204
- * Get Supporting Post Types..
205
- *
206
- * @since 1.3.7
207
- * @param integer $feature Feature.
208
- * @return array
209
- */
210
- public static function get_post_types_supporting( $feature ) {
211
- global $_wp_post_type_features;
212
-
213
- $post_types = array_keys(
214
- wp_filter_object_list( $_wp_post_type_features, array( $feature => true ) )
215
- );
216
-
217
- return $post_types;
218
- }
219
-
220
- }
221
-
222
- /**
223
- * Kicking this off by calling 'get_instance()' method
224
- */
225
- Astra_Sites_Batch_Processing::get_instance();
226
-
227
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Batch Processing
4
+ *
5
+ * @package Astra Sites
6
+ * @since 1.0.14
7
+ */
8
+
9
+ if ( ! class_exists( 'Astra_Sites_Batch_Processing' ) ) :
10
+
11
+ /**
12
+ * Astra_Sites_Batch_Processing
13
+ *
14
+ * @since 1.0.14
15
+ */
16
+ class Astra_Sites_Batch_Processing {
17
+
18
+ /**
19
+ * Instance
20
+ *
21
+ * @since 1.0.14
22
+ * @var object Class object.
23
+ * @access private
24
+ */
25
+ private static $instance;
26
+
27
+ /**
28
+ * Process All
29
+ *
30
+ * @since 1.0.14
31
+ * @var object Class object.
32
+ * @access public
33
+ */
34
+ public static $process_all;
35
+
36
+ /**
37
+ * Initiator
38
+ *
39
+ * @since 1.0.14
40
+ * @return object initialized object of class.
41
+ */
42
+ public static function get_instance() {
43
+ if ( ! isset( self::$instance ) ) {
44
+ self::$instance = new self;
45
+ }
46
+ return self::$instance;
47
+ }
48
+
49
+ /**
50
+ * Constructor
51
+ *
52
+ * @since 1.0.14
53
+ */
54
+ public function __construct() {
55
+
56
+ // Core Helpers - Image.
57
+ // @todo This file is required for Elementor.
58
+ // Once we implement our logic for updating elementor data then we'll delete this file.
59
+ require_once ABSPATH . 'wp-admin/includes/image.php';
60
+
61
+ // Core Helpers - Image Downloader.
62
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-astra-sites-image-importer.php';
63
+
64
+ // Core Helpers - Batch Processing.
65
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-wp-async-request.php';
66
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-wp-background-process.php';
67
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/helpers/class-wp-background-process-astra.php';
68
+
69
+ // Prepare Widgets.
70
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-widgets.php';
71
+
72
+ // Prepare Page Builders.
73
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-beaver-builder.php';
74
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-elementor.php';
75
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-gutenberg.php';
76
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-brizy.php';
77
+
78
+ // Prepare Misc.
79
+ require_once ASTRA_SITES_DIR . 'inc/importers/batch-processing/class-astra-sites-batch-processing-misc.php';
80
+
81
+ self::$process_all = new WP_Background_Process_Astra();
82
+
83
+ // Start image importing after site import complete.
84
+ add_filter( 'astra_sites_image_importer_skip_image', array( $this, 'skip_image' ), 10, 2 );
85
+ add_action( 'astra_sites_import_complete', array( $this, 'start_process' ) );
86
+ add_filter( 'http_request_timeout', array( $this, 'set_http_timeout' ), 10, 2 );
87
+ }
88
+
89
+ /**
90
+ * Set the timeout for the HTTP request for the images which serve from domain `websitedemos.net`.
91
+ *
92
+ * @since 1.3.10
93
+ *
94
+ * @param int $default Time in seconds until a request times out. Default 5.
95
+ * @param string $url The request URL.
96
+ */
97
+ function set_http_timeout( $default, $url ) {
98
+
99
+ if ( strpos( $url, 'websitedemos.net' ) === false ) {
100
+ return $default;
101
+ }
102
+
103
+ if ( Astra_Sites_Image_Importer::get_instance()->is_image_url( $url ) ) {
104
+ $default = 30;
105
+ }
106
+
107
+ return $default;
108
+ }
109
+
110
+ /**
111
+ * Skip Image from Batch Processing.
112
+ *
113
+ * @since 1.0.14
114
+ *
115
+ * @param boolean $can_process Batch process image status.
116
+ * @param array $attachment Batch process image input.
117
+ * @return boolean
118
+ */
119
+ function skip_image( $can_process, $attachment ) {
120
+
121
+ if ( isset( $attachment['url'] ) && ! empty( $attachment['url'] ) ) {
122
+ if (
123
+ strpos( $attachment['url'], 'brainstormforce.com' ) !== false ||
124
+ strpos( $attachment['url'], 'wpastra.com' ) !== false ||
125
+ strpos( $attachment['url'], 'sharkz.in' ) !== false ||
126
+ strpos( $attachment['url'], 'websitedemos.net' ) !== false
127
+ ) {
128
+ return false;
129
+ }
130
+ }
131
+
132
+ return true;
133
+ }
134
+
135
+ /**
136
+ * Start Image Import
137
+ *
138
+ * @since 1.0.14
139
+ *
140
+ * @return void
141
+ */
142
+ public function start_process() {
143
+
144
+ Astra_Sites_Importer_Log::add( 'Batch Process Started!' );
145
+ Astra_Sites_Importer_Log::add( Astra_Sites_White_Label::get_instance()->page_title( ASTRA_SITES_NAME ) . ' - Importing Images for Blog name \'' . get_bloginfo( 'name' ) . '\' (' . get_current_blog_id() . ')' );
146
+
147
+ // Add "widget" in import [queue].
148
+ if ( class_exists( 'Astra_Sites_Batch_Processing_Widgets' ) ) {
149
+ self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Widgets::get_instance() );
150
+ }
151
+
152
+ // Add "gutenberg" in import [queue].
153
+ self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Gutenberg::get_instance() );
154
+
155
+ // Add "brizy" in import [queue].
156
+ if ( is_plugin_active( 'brizy/brizy.php' ) ) {
157
+ self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Brizy::get_instance() );
158
+ }
159
+
160
+ // Add "bb-plugin" in import [queue].
161
+ // Add "beaver-builder-lite-version" in import [queue].
162
+ if ( is_plugin_active( 'beaver-builder-lite-version/fl-builder.php' ) || is_plugin_active( 'bb-plugin/fl-builder.php' ) ) {
163
+ self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Beaver_Builder::get_instance() );
164
+ }
165
+
166
+ // Add "elementor" in import [queue].
167
+ // @todo Remove required `allow_url_fopen` support.
168
+ if ( ini_get( 'allow_url_fopen' ) ) {
169
+ if ( is_plugin_active( 'elementor/elementor.php' ) ) {
170
+ $import = new \Elementor\TemplateLibrary\Astra_Sites_Batch_Processing_Elementor();
171
+ self::$process_all->push_to_queue( $import );
172
+ }
173
+ } else {
174
+ Astra_Sites_Importer_Log::add( 'Couldn\'t not import image due to allow_url_fopen() is disabled!' );
175
+ }
176
+
177
+ // Add "astra-addon" in import [queue].
178
+ if ( is_plugin_active( 'astra-addon/astra-addon.php' ) ) {
179
+ if ( class_exists( 'Astra_Sites_Compatibility_Astra_Pro' ) ) {
180
+ self::$process_all->push_to_queue( Astra_Sites_Compatibility_Astra_Pro::get_instance() );
181
+ }
182
+ }
183
+
184
+ // Add "misc" in import [queue].
185
+ self::$process_all->push_to_queue( Astra_Sites_Batch_Processing_Misc::get_instance() );
186
+
187
+ // Dispatch Queue.
188
+ self::$process_all->save()->dispatch();
189
+ }
190
+
191
+ /**
192
+ * Get all post id's
193
+ *
194
+ * @since 1.0.14
195
+ *
196
+ * @param array $post_types Post types.
197
+ * @return array
198
+ */
199
+ public static function get_pages( $post_types = array() ) {
200
+
201
+ if ( $post_types ) {
202
+ $args = array(
203
+ 'post_type' => $post_types,
204
+
205
+ // Query performance optimization.
206
+ 'fields' => 'ids',
207
+ 'no_found_rows' => true,
208
+ 'post_status' => 'publish',
209
+ 'posts_per_page' => -1,
210
+ );
211
+
212
+ $query = new WP_Query( $args );
213
+
214
+ // Have posts?
215
+ if ( $query->have_posts() ) :
216
+
217
+ return $query->posts;
218
+
219
+ endif;
220
+ }
221
+
222
+ return null;
223
+ }
224
+
225
+ /**
226
+ * Get Supporting Post Types..
227
+ *
228
+ * @since 1.3.7
229
+ * @param integer $feature Feature.
230
+ * @return array
231
+ */
232
+ public static function get_post_types_supporting( $feature ) {
233
+ global $_wp_post_type_features;
234
+
235
+ $post_types = array_keys(
236
+ wp_filter_object_list( $_wp_post_type_features, array( $feature => true ) )
237
+ );
238
+
239
+ return $post_types;
240
+ }
241
+
242
+ }
243
+
244
+ /**
245
+ * Kicking this off by calling 'get_instance()' method
246
+ */
247
+ Astra_Sites_Batch_Processing::get_instance();
248
+
249
+ endif;
inc/importers/batch-processing/helpers/class-astra-sites-image-importer.php CHANGED
@@ -1,243 +1,263 @@
1
- <?php
2
- /**
3
- * Image Importer
4
- *
5
- * => How to use?
6
- *
7
- * $image = array(
8
- * 'url' => '<image-url>',
9
- * 'id' => '<image-id>',
10
- * );
11
- *
12
- * $downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
13
- *
14
- * @package Astra Sites
15
- * @since 1.0.14
16
- */
17
-
18
- if ( ! class_exists( 'Astra_Sites_Image_Importer' ) ) :
19
-
20
- /**
21
- * Astra Sites Image Importer
22
- *
23
- * @since 1.0.14
24
- */
25
- class Astra_Sites_Image_Importer {
26
-
27
- /**
28
- * Instance
29
- *
30
- * @since 1.0.14
31
- * @var object Class object.
32
- * @access private
33
- */
34
- private static $instance;
35
-
36
- /**
37
- * Images IDs
38
- *
39
- * @var array The Array of already image IDs.
40
- * @since 1.0.14
41
- */
42
- private $already_imported_ids = array();
43
-
44
- /**
45
- * Initiator
46
- *
47
- * @since 1.0.14
48
- * @return object initialized object of class.
49
- */
50
- public static function get_instance() {
51
- if ( ! isset( self::$instance ) ) {
52
- self::$instance = new self;
53
- }
54
- return self::$instance;
55
- }
56
-
57
- /**
58
- * Constructor
59
- *
60
- * @since 1.0.14
61
- */
62
- public function __construct() {
63
-
64
- if ( ! function_exists( 'WP_Filesystem' ) ) {
65
- require_once ABSPATH . 'wp-admin/includes/file.php';
66
- }
67
-
68
- WP_Filesystem();
69
- }
70
-
71
- /**
72
- * Process Image Download
73
- *
74
- * @since 1.0.14
75
- * @param array $attachments Attachment array.
76
- * @return array Attachment array.
77
- */
78
- public function process( $attachments ) {
79
-
80
- $downloaded_images = array();
81
-
82
- foreach ( $attachments as $key => $attachment ) {
83
- $downloaded_images[] = $this->import( $attachment );
84
- }
85
-
86
- return $downloaded_images;
87
- }
88
-
89
- /**
90
- * Get Hash Image.
91
- *
92
- * @since 1.0.14
93
- * @param string $attachment_url Attachment URL.
94
- * @return string Hash string.
95
- */
96
- private function get_hash_image( $attachment_url ) {
97
- return sha1( $attachment_url );
98
- }
99
-
100
- /**
101
- * Get Saved Image.
102
- *
103
- * @since 1.0.14
104
- * @param string $attachment Attachment Data.
105
- * @return string Hash string.
106
- */
107
- private function get_saved_image( $attachment ) {
108
-
109
- if ( apply_filters( 'astra_sites_image_importer_skip_image', false, $attachment ) ) {
110
- Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image - {from filter} - ' . $attachment['url'] . ' - Filter name `astra_sites_image_importer_skip_image`.' );
111
- return $attachment;
112
- }
113
-
114
- global $wpdb;
115
-
116
- // Already imported? Then return!
117
- if ( isset( $this->already_imported_ids[ $attachment['id'] ] ) ) {
118
- Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from batch process} - ' . $attachment['url'] . ' - already imported.' );
119
- return $this->already_imported_ids[ $attachment['id'] ];
120
- }
121
-
122
- // 1. Is already imported in Batch Import Process?
123
- $post_id = $wpdb->get_var(
124
- $wpdb->prepare(
125
- 'SELECT `post_id` FROM `' . $wpdb->postmeta . '`
126
- WHERE `meta_key` = \'_astra_sites_image_hash\'
127
- AND `meta_value` = %s
128
- ;',
129
- $this->get_hash_image( $attachment['url'] )
130
- )
131
- );
132
-
133
- // 2. Is image already imported though XML?
134
- if ( empty( $post_id ) ) {
135
-
136
- // Get file name without extension.
137
- // To check it exist in attachment.
138
- $filename = basename( $attachment['url'] );
139
-
140
- $post_id = $wpdb->get_var(
141
- $wpdb->prepare(
142
- "SELECT post_id FROM {$wpdb->postmeta}
143
- WHERE meta_key = '_wp_attached_file'
144
- AND meta_value LIKE %s",
145
- '%' . $filename . '%'
146
- )
147
- );
148
-
149
- Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from xml} - ' . $attachment['url'] );
150
- }
151
-
152
- if ( $post_id ) {
153
- $new_attachment = array(
154
- 'id' => $post_id,
155
- 'url' => wp_get_attachment_url( $post_id ),
156
- );
157
- $this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
158
-
159
- return $new_attachment;
160
- }
161
-
162
- return false;
163
- }
164
-
165
- /**
166
- * Import Image
167
- *
168
- * @since 1.0.14
169
- * @param array $attachment Attachment array.
170
- * @return array Attachment array.
171
- */
172
- public function import( $attachment ) {
173
-
174
- $saved_image = $this->get_saved_image( $attachment );
175
- if ( $saved_image ) {
176
- return $saved_image;
177
- }
178
-
179
- $file_content = wp_remote_retrieve_body(
180
- wp_safe_remote_get(
181
- $attachment['url'],
182
- array(
183
- 'timeout' => '60',
184
- 'sslverify' => false,
185
- )
186
- )
187
- );
188
-
189
- // Empty file content?
190
- if ( empty( $file_content ) ) {
191
- Astra_Sites_Importer_Log::add( 'BATCH - FAIL Image {Error: Failed wp_remote_retrieve_body} - ' . $attachment['url'] );
192
- return $attachment;
193
- }
194
-
195
- // Extract the file name and extension from the URL.
196
- $filename = basename( $attachment['url'] );
197
-
198
- $upload = wp_upload_bits(
199
- $filename,
200
- null,
201
- $file_content
202
- );
203
-
204
- $post = array(
205
- 'post_title' => $filename,
206
- 'guid' => $upload['url'],
207
- );
208
-
209
- $info = wp_check_filetype( $upload['file'] );
210
- if ( $info ) {
211
- $post['post_mime_type'] = $info['type'];
212
- } else {
213
- // For now just return the origin attachment.
214
- return $attachment;
215
- }
216
-
217
- $post_id = wp_insert_attachment( $post, $upload['file'] );
218
- wp_update_attachment_metadata(
219
- $post_id,
220
- wp_generate_attachment_metadata( $post_id, $upload['file'] )
221
- );
222
- update_post_meta( $post_id, '_astra_sites_image_hash', $this->get_hash_image( $attachment['url'] ) );
223
-
224
- $new_attachment = array(
225
- 'id' => $post_id,
226
- 'url' => $upload['url'],
227
- );
228
-
229
- Astra_Sites_Importer_Log::add( 'BATCH - SUCCESS Image {Imported} - ' . $new_attachment['url'] );
230
-
231
- $this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
232
-
233
- return $new_attachment;
234
- }
235
-
236
- }
237
-
238
- /**
239
- * Kicking this off by calling 'get_instance()' method
240
- */
241
- Astra_Sites_Image_Importer::get_instance();
242
-
243
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Image Importer
4
+ *
5
+ * => How to use?
6
+ *
7
+ * $image = array(
8
+ * 'url' => '<image-url>',
9
+ * 'id' => '<image-id>',
10
+ * );
11
+ *
12
+ * $downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( $image );
13
+ *
14
+ * @package Astra Sites
15
+ * @since 1.0.14
16
+ */
17
+
18
+ if ( ! class_exists( 'Astra_Sites_Image_Importer' ) ) :
19
+
20
+ /**
21
+ * Astra Sites Image Importer
22
+ *
23
+ * @since 1.0.14
24
+ */
25
+ class Astra_Sites_Image_Importer {
26
+
27
+ /**
28
+ * Instance
29
+ *
30
+ * @since 1.0.14
31
+ * @var object Class object.
32
+ * @access private
33
+ */
34
+ private static $instance;
35
+
36
+ /**
37
+ * Images IDs
38
+ *
39
+ * @var array The Array of already image IDs.
40
+ * @since 1.0.14
41
+ */
42
+ private $already_imported_ids = array();
43
+
44
+ /**
45
+ * Initiator
46
+ *
47
+ * @since 1.0.14
48
+ * @return object initialized object of class.
49
+ */
50
+ public static function get_instance() {
51
+ if ( ! isset( self::$instance ) ) {
52
+ self::$instance = new self;
53
+ }
54
+ return self::$instance;
55
+ }
56
+
57
+ /**
58
+ * Constructor
59
+ *
60
+ * @since 1.0.14
61
+ */
62
+ public function __construct() {
63
+
64
+ if ( ! function_exists( 'WP_Filesystem' ) ) {
65
+ require_once ABSPATH . 'wp-admin/includes/file.php';
66
+ }
67
+
68
+ WP_Filesystem();
69
+ }
70
+
71
+ /**
72
+ * Process Image Download
73
+ *
74
+ * @since 1.0.14
75
+ * @param array $attachments Attachment array.
76
+ * @return array Attachment array.
77
+ */
78
+ public function process( $attachments ) {
79
+
80
+ $downloaded_images = array();
81
+
82
+ foreach ( $attachments as $key => $attachment ) {
83
+ $downloaded_images[] = $this->import( $attachment );
84
+ }
85
+
86
+ return $downloaded_images;
87
+ }
88
+
89
+ /**
90
+ * Get Hash Image.
91
+ *
92
+ * @since 1.0.14
93
+ * @param string $attachment_url Attachment URL.
94
+ * @return string Hash string.
95
+ */
96
+ private function get_hash_image( $attachment_url ) {
97
+ return sha1( $attachment_url );
98
+ }
99
+
100
+ /**
101
+ * Get Saved Image.
102
+ *
103
+ * @since 1.0.14
104
+ * @param string $attachment Attachment Data.
105
+ * @return string Hash string.
106
+ */
107
+ private function get_saved_image( $attachment ) {
108
+
109
+ if ( apply_filters( 'astra_sites_image_importer_skip_image', false, $attachment ) ) {
110
+ Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image - {from filter} - ' . $attachment['url'] . ' - Filter name `astra_sites_image_importer_skip_image`.' );
111
+ return $attachment;
112
+ }
113
+
114
+ global $wpdb;
115
+
116
+ // Already imported? Then return!
117
+ if ( isset( $this->already_imported_ids[ $attachment['id'] ] ) ) {
118
+ Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from batch process} - ' . $attachment['url'] . ' - already imported.' );
119
+ return $this->already_imported_ids[ $attachment['id'] ];
120
+ }
121
+
122
+ // 1. Is already imported in Batch Import Process?
123
+ $post_id = $wpdb->get_var(
124
+ $wpdb->prepare(
125
+ 'SELECT `post_id` FROM `' . $wpdb->postmeta . '`
126
+ WHERE `meta_key` = \'_astra_sites_image_hash\'
127
+ AND `meta_value` = %s
128
+ ;',
129
+ $this->get_hash_image( $attachment['url'] )
130
+ )
131
+ );
132
+
133
+ // 2. Is image already imported though XML?
134
+ if ( empty( $post_id ) ) {
135
+
136
+ // Get file name without extension.
137
+ // To check it exist in attachment.
138
+ $filename = basename( $attachment['url'] );
139
+
140
+ $post_id = $wpdb->get_var(
141
+ $wpdb->prepare(
142
+ "SELECT post_id FROM {$wpdb->postmeta}
143
+ WHERE meta_key = '_wp_attached_file'
144
+ AND meta_value LIKE %s",
145
+ '%' . $filename . '%'
146
+ )
147
+ );
148
+
149
+ Astra_Sites_Importer_Log::add( 'BATCH - SKIP Image {already imported from xml} - ' . $attachment['url'] );
150
+ }
151
+
152
+ if ( $post_id ) {
153
+ $new_attachment = array(
154
+ 'id' => $post_id,
155
+ 'url' => wp_get_attachment_url( $post_id ),
156
+ );
157
+ $this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
158
+
159
+ return $new_attachment;
160
+ }
161
+
162
+ return false;
163
+ }
164
+
165
+ /**
166
+ * Import Image
167
+ *
168
+ * @since 1.0.14
169
+ * @param array $attachment Attachment array.
170
+ * @return array Attachment array.
171
+ */
172
+ public function import( $attachment ) {
173
+
174
+ $saved_image = $this->get_saved_image( $attachment );
175
+ if ( $saved_image ) {
176
+ return $saved_image;
177
+ }
178
+
179
+ $file_content = wp_remote_retrieve_body(
180
+ wp_safe_remote_get(
181
+ $attachment['url'],
182
+ array(
183
+ 'timeout' => '60',
184
+ 'sslverify' => false,
185
+ )
186
+ )
187
+ );
188
+
189
+ // Empty file content?
190
+ if ( empty( $file_content ) ) {
191
+ Astra_Sites_Importer_Log::add( 'BATCH - FAIL Image {Error: Failed wp_remote_retrieve_body} - ' . $attachment['url'] );
192
+ return $attachment;
193
+ }
194
+
195
+ // Extract the file name and extension from the URL.
196
+ $filename = basename( $attachment['url'] );
197
+
198
+ $upload = wp_upload_bits(
199
+ $filename,
200
+ null,
201
+ $file_content
202
+ );
203
+
204
+ $post = array(
205
+ 'post_title' => $filename,
206
+ 'guid' => $upload['url'],
207
+ );
208
+
209
+ $info = wp_check_filetype( $upload['file'] );
210
+ if ( $info ) {
211
+ $post['post_mime_type'] = $info['type'];
212
+ } else {
213
+ // For now just return the origin attachment.
214
+ return $attachment;
215
+ }
216
+
217
+ $post_id = wp_insert_attachment( $post, $upload['file'] );
218
+ wp_update_attachment_metadata(
219
+ $post_id,
220
+ wp_generate_attachment_metadata( $post_id, $upload['file'] )
221
+ );
222
+ update_post_meta( $post_id, '_astra_sites_image_hash', $this->get_hash_image( $attachment['url'] ) );
223
+
224
+ $new_attachment = array(
225
+ 'id' => $post_id,
226
+ 'url' => $upload['url'],
227
+ );
228
+
229
+ Astra_Sites_Importer_Log::add( 'BATCH - SUCCESS Image {Imported} - ' . $new_attachment['url'] );
230
+
231
+ $this->already_imported_ids[ $attachment['id'] ] = $new_attachment;
232
+
233
+ return $new_attachment;
234
+ }
235
+
236
+ /**
237
+ * Is Image URL
238
+ *
239
+ * @since 1.3.10
240
+ *
241
+ * @param string $url URL.
242
+ * @return boolean
243
+ */
244
+ function is_image_url( $url = '' ) {
245
+ if ( empty( $url ) ) {
246
+ return false;
247
+ }
248
+
249
+ if ( preg_match( '/^((https?:\/\/)|(www\.))([a-z0-9-].?)+(:[0-9]+)?\/[\w\-]+\.(jpg|png|svg|gif|jpeg)\/?$/i', $url ) ) {
250
+ return true;
251
+ }
252
+
253
+ return false;
254
+ }
255
+
256
+ }
257
+
258
+ /**
259
+ * Kicking this off by calling 'get_instance()' method
260
+ */
261
+ Astra_Sites_Image_Importer::get_instance();
262
+
263
+ endif;
inc/importers/class-astra-sites-helper.php CHANGED
@@ -1,311 +1,311 @@
1
- <?php
2
- /**
3
- * Astra Site Helper
4
- *
5
- * @since 1.0.0
6
- * @package Astra Sites
7
- */
8
-
9
- if ( ! class_exists( 'Astra_Sites_Helper' ) ) :
10
-
11
- /**
12
- * Astra_Sites_Helper
13
- *
14
- * @since 1.0.0
15
- */
16
- class Astra_Sites_Helper {
17
-
18
- /**
19
- * Instance
20
- *
21
- * @access private
22
- * @var object Instance
23
- * @since 1.0.0
24
- */
25
- private static $instance;
26
-
27
- /**
28
- * Initiator
29
- *
30
- * @since 1.0.0
31
- * @return object initialized object of class.
32
- */
33
- public static function get_instance() {
34
- if ( ! isset( self::$instance ) ) {
35
- self::$instance = new self;
36
- }
37
- return self::$instance;
38
- }
39
-
40
- /**
41
- * Constructor
42
- *
43
- * @since 1.0.0
44
- */
45
- public function __construct() {
46
- add_filter( 'wie_import_data', array( $this, 'custom_menu_widget' ) );
47
- add_filter( 'wp_prepare_attachment_for_js', array( $this, 'add_svg_image_support' ), 10, 3 );
48
- }
49
-
50
- /**
51
- * Add svg image support
52
- *
53
- * @since 1.1.5
54
- *
55
- * @param array $response Attachment response.
56
- * @param object $attachment Attachment object.
57
- * @param array $meta Attachment meta data.
58
- */
59
- function add_svg_image_support( $response, $attachment, $meta ) {
60
- if ( ! function_exists( 'simplexml_load_file' ) ) {
61
- return $response;
62
- }
63
-
64
- if ( ! empty( $response['sizes'] ) ) {
65
- return $response;
66
- }
67
-
68
- if ( 'image/svg+xml' !== $response['mime'] ) {
69
- return $response;
70
- }
71
-
72
- $svg_path = get_attached_file( $attachment->ID );
73
-
74
- $dimensions = self::get_svg_dimensions( $svg_path );
75
-
76
- $response['sizes'] = array(
77
- 'full' => array(
78
- 'url' => $response['url'],
79
- 'width' => $dimensions->width,
80
- 'height' => $dimensions->height,
81
- 'orientation' => $dimensions->width > $dimensions->height ? 'landscape' : 'portrait',
82
- ),
83
- );
84
-
85
- return $response;
86
- }
87
-
88
- /**
89
- * Get SVG Dimensions
90
- *
91
- * @since 1.1.5
92
- *
93
- * @param string $svg SVG file path.
94
- * @return array Return SVG file height & width for valid SVG file.
95
- */
96
- public static function get_svg_dimensions( $svg ) {
97
-
98
- $svg = simplexml_load_file( $svg );
99
-
100
- if ( false === $svg ) {
101
- $width = '0';
102
- $height = '0';
103
- } else {
104
- $attributes = $svg->attributes();
105
- $width = (string) $attributes->width;
106
- $height = (string) $attributes->height;
107
- }
108
-
109
- return (object) array(
110
- 'width' => $width,
111
- 'height' => $height,
112
- );
113
- }
114
-
115
- /**
116
- * Custom Menu Widget
117
- *
118
- * In widget export we set the nav menu slug instead of ID.
119
- * So, In import process we check get menu id by slug and set
120
- * it in import widget process.
121
- *
122
- * @since 1.0.7
123