PluginProbe
Elementor Website Builder – more than just a page builder / 3.24.4
Elementor Website Builder – more than just a page builder v3.24.4
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.24.4, at app/modules/import-export/processes/revert.php

180 lines 4.8 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 use Elementor\App\Modules\ImportExport\Utils;
13
14 class Revert {
15
16 /**
17 * @var Revert_Runner_Base[]
18 */
19 protected $runners = [];
20
21 private $import_sessions;
22
23 private $revert_sessions;
24
25 /**
26 * @throws \Exception
27 */
28 public function __construct() {
29 $this->import_sessions = self::get_import_sessions();
30 $this->revert_sessions = self::get_revert_sessions();
31 }
32
33 /**
34 * Register a runner.
35 *
36 * @param Revert_Runner_Base $runner_instance
37 */
38 public function register( Revert_Runner_Base $runner_instance ) {
39 $this->runners[ $runner_instance::get_name() ] = $runner_instance;
40 }
41
42 public function register_default_runners() {
43 $this->register( new Site_Settings() );
44 $this->register( new Plugins() );
45 $this->register( new Templates() );
46 $this->register( new Taxonomies() );
47 $this->register( new Elementor_Content() );
48 $this->register( new Wp_Content() );
49 }
50
51 /**
52 * Execute the revert process.
53 *
54 * @throws \Exception If no revert runners have been specified.
55 */
56 public function run() {
57 if ( empty( $this->runners ) ) {
58 throw new \Exception( 'Couldn’t execute the revert process because no revert runners have been specified. Try again by specifying revert runners.' );
59 }
60
61 $import_session = $this->get_last_import_session();
62
63 if ( empty( $import_session ) ) {
64 throw new \Exception( 'Couldn’t execute the revert process because there are no import sessions to revert.' );
65 }
66
67 // fallback if the import session failed and doesn't have the runners metadata
68 if ( ! isset( $import_session['runners'] ) && isset( $import_session['instance_data'] ) ) {
69 $import_session['runners'] = $import_session['instance_data']['runners_import_metadata'] ?? [];
70 }
71
72 foreach ( $this->runners as $runner ) {
73 if ( $runner->should_revert( $import_session ) ) {
74 $runner->revert( $import_session );
75 }
76 }
77
78 $this->revert_attachments( $import_session );
79
80 $this->delete_last_import_data();
81 }
82
83 public static function get_import_sessions() {
84 $import_sessions = Utils::get_import_sessions();
85
86 if ( ! $import_sessions ) {
87 return [];
88 }
89
90 usort( $import_sessions, function( $a, $b ) {
91 return strcmp( $a['start_timestamp'], $b['start_timestamp'] );
92 } );
93
94 return $import_sessions;
95 }
96
97 public static function get_revert_sessions() {
98 $revert_sessions = get_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS );
99
100 if ( ! $revert_sessions ) {
101 return [];
102 }
103
104 return $revert_sessions;
105 }
106
107 public function get_last_import_session() {
108 $import_sessions = $this->import_sessions;
109
110 if ( empty( $import_sessions ) ) {
111 return [];
112 }
113
114 return end( $import_sessions );
115 }
116
117 public function get_penultimate_import_session() {
118 $sessions_data = $this->import_sessions;
119 $penultimate_element_value = [];
120
121 if ( empty( $sessions_data ) ) {
122 return [];
123 }
124
125 end( $sessions_data );
126
127 prev( $sessions_data );
128
129 if ( ! is_null( key( $sessions_data ) ) ) {
130 $penultimate_element_value = current( $sessions_data );
131 }
132
133 return $penultimate_element_value;
134 }
135
136 private function delete_last_import_data() {
137 $import_sessions = $this->import_sessions;
138 $revert_sessions = $this->revert_sessions;
139
140 $reverted_session = array_pop( $import_sessions );
141
142 $revert_sessions[] = [
143 'session_id' => $reverted_session['session_id'],
144 'kit_title' => $reverted_session['kit_title'],
145 'kit_name' => $reverted_session['kit_name'],
146 'kit_thumbnail' => $reverted_session['kit_thumbnail'],
147 'source' => $reverted_session['kit_source'],
148 'user_id' => get_current_user_id(),
149 'import_timestamp' => $reverted_session['start_timestamp'],
150 'revert_timestamp' => current_time( 'timestamp' ),
151 ];
152
153 update_option( Module::OPTION_KEY_ELEMENTOR_IMPORT_SESSIONS, $import_sessions, false );
154 update_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS, $revert_sessions, false );
155
156 $this->import_sessions = $import_sessions;
157 $this->revert_sessions = $revert_sessions;
158 }
159
160 private function revert_attachments( $data ) {
161 $query_args = [
162 'post_type' => 'attachment',
163 'post_status' => 'any',
164 'posts_per_page' => -1,
165 'meta_query' => [
166 [
167 'key' => Module::META_KEY_ELEMENTOR_IMPORT_SESSION_ID,
168 'value' => $data['session_id'],
169 ],
170 ],
171 ];
172
173 $query = new \WP_Query( $query_args );
174
175 foreach ( $query->posts as $post ) {
176 wp_delete_attachment( $post->ID, true );
177 }
178 }
179 }
180