PluginProbe
Elementor Website Builder – more than just a page builder / 3.9.0
Elementor Website Builder – more than just a page builder v3.9.0
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / app / modules / import-export / processes / revert.php

revert.php in Elementor Website Builder – more than just a page builder 3.9.0, at app/modules/import-export/processes/revert.php

165 lines 4.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\App\Modules\ImportExport\Processes;
3
4 use Elementor\App\Modules\ImportExport\Module;
5 use Elementor\App\Modules\ImportExport\Runners\Revert\Elementor_Content;
6 use Elementor\App\Modules\ImportExport\Runners\Revert\Revert_Runner_Base;
7 use Elementor\App\Modules\ImportExport\Runners\Revert\Plugins;
8 use Elementor\App\Modules\ImportExport\Runners\Revert\Site_Settings;
9 use Elementor\App\Modules\ImportExport\Runners\Revert\Taxonomies;
10 use Elementor\App\Modules\ImportExport\Runners\Revert\Templates;
11 use Elementor\App\Modules\ImportExport\Runners\Revert\Wp_Content;
12
13 class Revert {
14
15 /**
16 * @var Revert_Runner_Base[]
17 */
18 protected $runners = [];
19
20 private $import_sessions;
21
22 private $revert_sessions;
23
24 /**
25 * @throws \Exception
26 */
27 public function __construct() {
28 $this->import_sessions = $this->get_import_sessions();
29 $this->revert_sessions = $this->get_revert_sessions();
30 }
31
32 /**
33 * Register a runner.
34 *
35 * @param Revert_Runner_Base $runner_instance
36 */
37 public function register( Revert_Runner_Base $runner_instance ) {
38 $this->runners[ $runner_instance::get_name() ] = $runner_instance;
39 }
40
41 public function register_default_runners() {
42 $this->register( new Site_Settings() );
43 $this->register( new Plugins() );
44 $this->register( new Templates() );
45 $this->register( new Taxonomies() );
46 $this->register( new Elementor_Content() );
47 $this->register( new Wp_Content() );
48 }
49
50 public function run() {
51 if ( empty( $this->runners ) ) {
52 throw new \Exception( 'Please specify revert runners.' );
53 }
54
55 $data = $this->get_last_import_session();
56
57 if ( empty( $data ) ) {
58 throw new \Exception( 'Could not find any import sessions to revert.' );
59 }
60
61 foreach ( $this->runners as $runner ) {
62 if ( $runner->should_revert( $data ) ) {
63 $runner->revert( $data );
64 }
65 }
66
67 $this->revert_attachments( $data );
68
69 $this->delete_last_import_data();
70 }
71
72 public function get_import_sessions() {
73 $import_sessions = get_option( Module::OPTION_KEY_ELEMENTOR_IMPORT_SESSIONS );
74
75 if ( ! $import_sessions ) {
76 return [];
77 }
78
79 ksort( $import_sessions, SORT_NUMERIC );
80
81 return $import_sessions;
82 }
83
84 public function get_revert_sessions() {
85 $revert_sessions = get_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS );
86
87 if ( ! $revert_sessions ) {
88 return [];
89 }
90
91 return $revert_sessions;
92 }
93
94 public function get_last_import_session() {
95 $import_sessions = $this->import_sessions;
96
97 if ( empty( $import_sessions ) ) {
98 return [];
99 }
100
101 return end( $import_sessions );
102 }
103
104 public function get_penultimate_import_session() {
105 $sessions_data = $this->import_sessions;
106 $penultimate_element_value = [];
107
108 if ( empty( $sessions_data ) ) {
109 return [];
110 }
111
112 end( $sessions_data );
113
114 prev( $sessions_data );
115
116 if ( ! is_null( key( $sessions_data ) ) ) {
117 $penultimate_element_value = current( $sessions_data );
118 }
119
120 return $penultimate_element_value;
121 }
122
123 private function delete_last_import_data() {
124 $import_sessions = $this->import_sessions;
125 $revert_sessions = $this->revert_sessions;
126
127 $reverted_session = array_pop( $import_sessions );
128
129 $revert_sessions[] = [
130 'session_id' => $reverted_session['session_id'],
131 'kit_name' => $reverted_session['kit_name'],
132 'source' => $reverted_session['kit_source'],
133 'user_id' => get_current_user_id(),
134 'import_timestamp' => $reverted_session['start_timestamp'],
135 'revert_timestamp' => current_time( 'timestamp' ),
136 ];
137
138 update_option( Module::OPTION_KEY_ELEMENTOR_IMPORT_SESSIONS, $import_sessions, false );
139 update_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS, $revert_sessions, false );
140
141 $this->import_sessions = $import_sessions;
142 $this->revert_sessions = $revert_sessions;
143 }
144
145 private function revert_attachments( $data ) {
146 $query_args = [
147 'post_type' => 'attachment',
148 'post_status' => 'any',
149 'posts_per_page' => -1,
150 'meta_query' => [
151 [
152 'key' => Module::META_KEY_ELEMENTOR_IMPORT_SESSION_ID,
153 'value' => $data['session_id'],
154 ],
155 ],
156 ];
157
158 $query = new \WP_Query( $query_args );
159
160 foreach ( $query->posts as $post ) {
161 wp_delete_attachment( $post->ID, true );
162 }
163 }
164 }
165