PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-sync / src / modules / class-import.php
jetpack / jetpack_vendor / automattic / jetpack-sync / src / modules Last commit date
class-attachments.php 8 months ago class-callables.php 1 month ago class-comments.php 2 months ago class-constants.php 8 months ago class-full-sync-immediately.php 3 months ago class-full-sync.php 2 months ago class-import.php 8 months ago class-menus.php 2 months ago class-meta.php 2 months ago class-module.php 5 months ago class-network-options.php 8 months ago class-options.php 2 months ago class-plugins.php 2 months ago class-posts.php 2 months ago class-protect.php 8 months ago class-search.php 2 months ago class-stats.php 6 months ago class-term-relationships.php 8 months ago class-terms.php 2 months ago class-themes.php 2 months ago class-updates.php 8 months ago class-users.php 1 month ago class-woocommerce-hpos-orders.php 1 month ago class-woocommerce-products.php 8 months ago class-woocommerce.php 1 month ago class-wp-super-cache.php 8 months ago
class-import.php
225 lines
1 <?php
2 /**
3 * Import sync module.
4 *
5 * @package automattic/jetpack-sync
6 */
7
8 namespace Automattic\Jetpack\Sync\Modules;
9
10 use Automattic\Jetpack\Sync\Settings;
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit( 0 );
14 }
15
16 /**
17 * Class to handle sync for imports.
18 */
19 class Import extends Module {
20
21 /**
22 * Tracks which actions have already been synced for the import
23 * to prevent the same event from being triggered a second time.
24 *
25 * @var array
26 */
27 private $synced_actions = array();
28
29 /**
30 * A mapping of action types to sync action name.
31 * Keys are the name of the import action.
32 * Values are the resulting sync action.
33 *
34 * Note: import_done and import_end both intentionally map to
35 * jetpack_sync_import_end, as they both track the same type of action,
36 * the successful completion of an import. Different import plugins use
37 * differently named actions, and this is an attempt to consolidate.
38 *
39 * @var array
40 */
41 private static $import_sync_action_map = array(
42 'import_start' => 'jetpack_sync_import_start',
43 'import_done' => 'jetpack_sync_import_end',
44 'import_end' => 'jetpack_sync_import_end',
45 );
46
47 /**
48 * Sync module name.
49 *
50 * @access public
51 *
52 * @return string
53 */
54 public function name() {
55 return 'import';
56 }
57
58 /**
59 * Initialize imports action listeners.
60 *
61 * @access public
62 *
63 * @param callable $callable Action handler callable.
64 */
65 public function init_listeners( $callable ) {
66 add_action( 'export_wp', $callable );
67 add_action( 'jetpack_sync_import_start', $callable, 10, 2 );
68 add_action( 'jetpack_sync_import_end', $callable, 10, 2 );
69
70 // WordPress.
71 add_action( 'import_start', array( $this, 'sync_import_action' ) );
72
73 // Movable type, RSS, Livejournal.
74 add_action( 'import_done', array( $this, 'sync_import_action' ) );
75
76 // WordPress, Blogger, Livejournal, woo tax rate.
77 add_action( 'import_end', array( $this, 'sync_import_action' ) );
78 }
79
80 /**
81 * Set module defaults.
82 * Define an empty list of synced actions for us to fill later.
83 *
84 * @access public
85 */
86 public function set_defaults() {
87 $this->synced_actions = array();
88 }
89
90 /**
91 * Generic handler for import actions.
92 *
93 * @access public
94 *
95 * @param string $importer Either a string reported by the importer, the class name of the importer, or 'unknown'.
96 */
97 public function sync_import_action( $importer ) {
98 $import_action = current_filter();
99 // Map action to event name.
100 $sync_action = self::$import_sync_action_map[ $import_action ];
101
102 // Only sync each action once per import.
103 if ( array_key_exists( $sync_action, $this->synced_actions ) && $this->synced_actions[ $sync_action ] ) {
104 return;
105 }
106
107 // Mark this action as synced.
108 $this->synced_actions[ $sync_action ] = true;
109
110 // Prefer self-reported $importer value.
111 if ( ! $importer ) {
112 // Fall back to inferring by calling class name.
113 $importer = self::get_calling_importer_class();
114 }
115
116 // Get $importer from known_importers.
117 $known_importers = Settings::get_setting( 'known_importers' );
118 if ( is_string( $importer ) && isset( $known_importers[ $importer ] ) ) {
119 $importer = $known_importers[ $importer ];
120 }
121
122 $importer_name = $this->get_importer_name( $importer );
123
124 switch ( $sync_action ) {
125 case 'jetpack_sync_import_start':
126 /**
127 * Used for syncing the start of an import
128 *
129 * @since 1.6.3
130 * @since-jetpack 7.3.0
131 *
132 * @module sync
133 *
134 * @param string $importer Either a string reported by the importer, the class name of the importer, or 'unknown'.
135 * @param string $importer_name The name reported by the importer, or 'Unknown Importer'.
136 */
137 do_action( 'jetpack_sync_import_start', $importer, $importer_name );
138 break;
139
140 case 'jetpack_sync_import_end':
141 /**
142 * Used for syncing the end of an import
143 *
144 * @since 1.6.3
145 * @since-jetpack 7.3.0
146 *
147 * @module sync
148 *
149 * @param string $importer Either a string reported by the importer, the class name of the importer, or 'unknown'.
150 * @param string $importer_name The name reported by the importer, or 'Unknown Importer'.
151 */
152 do_action( 'jetpack_sync_import_end', $importer, $importer_name );
153 break;
154 }
155 }
156
157 /**
158 * Retrieve the name of the importer.
159 *
160 * @access private
161 *
162 * @param string $importer Either a string reported by the importer, the class name of the importer, or 'unknown'.
163 * @return string Name of the importer, or "Unknown Importer" if importer is unknown.
164 */
165 private function get_importer_name( $importer ) {
166 $importers = get_importers();
167 return isset( $importers[ $importer ] ) ? $importers[ $importer ][0] : 'Unknown Importer';
168 }
169
170 /**
171 * Determine the class that extends `WP_Importer` which is responsible for
172 * the current action. Designed to be used within an action handler.
173 *
174 * @access private
175 * @static
176 *
177 * @return string The name of the calling class, or 'unknown'.
178 */
179 private static function get_calling_importer_class() {
180 // If WP_Importer doesn't exist, neither will any importer that extends it.
181 if ( ! class_exists( 'WP_Importer', false ) ) {
182 return 'unknown';
183 }
184
185 $action = current_filter();
186 $backtrace = debug_backtrace( 0 ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
187
188 $do_action_pos = -1;
189 $backtrace_len = count( $backtrace );
190 for ( $i = 0; $i < $backtrace_len; $i++ ) {
191 // Find the location in the stack of the calling action.
192 if ( 'do_action' === $backtrace[ $i ]['function'] && $action === $backtrace[ $i ]['args'][0] ) {
193 $do_action_pos = $i;
194 break;
195 }
196 }
197
198 // If the action wasn't called, the calling class is unknown.
199 if ( -1 === $do_action_pos ) {
200 return 'unknown';
201 }
202
203 // Continue iterating the stack looking for a caller that extends WP_Importer.
204 for ( $i = $do_action_pos + 1; $i < $backtrace_len; $i++ ) {
205 // If there is no class on the trace, continue.
206 if ( ! isset( $backtrace[ $i ]['class'] ) ) {
207 continue;
208 }
209
210 $class_name = $backtrace[ $i ]['class'];
211
212 // Check if the class extends WP_Importer.
213 if ( class_exists( $class_name, false ) ) {
214 $parents = class_parents( $class_name, false );
215 if ( $parents && in_array( 'WP_Importer', $parents, true ) ) {
216 return $class_name;
217 }
218 }
219 }
220
221 // If we've exhausted the stack without a match, the calling class is unknown.
222 return 'unknown';
223 }
224 }
225