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

174 lines 4.5 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 = self::get_import_sessions();
29 $this->revert_sessions = self::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 /**
51 * Execute the revert process.
52 *
53 * @throws \Exception If no revert runners have been specified.
54 */
55 public function run() {
56 if ( empty( $this->runners ) ) {
57 throw new \Exception( 'Couldn’t execute the revert process because no revert runners have been specified. Try again by specifying revert runners.' );
58 }
59
60 $data = $this->get_last_import_session();
61
62 if ( empty( $data ) ) {
63 throw new \Exception( 'Couldn’t execute the revert process because there are no import sessions to revert.' );
64 }
65
66 foreach ( $this->runners as $runner ) {
67 if ( $runner->should_revert( $data ) ) {
68 $runner->revert( $data );
69 }
70 }
71
72 $this->revert_attachments( $data );
73
74 $this->delete_last_import_data();
75 }
76
77 public static function get_import_sessions() {
78 $import_sessions = get_option( Module::OPTION_KEY_ELEMENTOR_IMPORT_SESSIONS );
79
80 if ( ! $import_sessions ) {
81 return [];
82 }
83
84 usort( $import_sessions, function( $a, $b ) {
85 return strcmp( $a['start_timestamp'], $b['start_timestamp'] );
86 } );
87
88 return $import_sessions;
89 }
90
91 public static function get_revert_sessions() {
92 $revert_sessions = get_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS );
93
94 if ( ! $revert_sessions ) {
95 return [];
96 }
97
98 return $revert_sessions;
99 }
100
101 public function get_last_import_session() {
102 $import_sessions = $this->import_sessions;
103
104 if ( empty( $import_sessions ) ) {
105 return [];
106 }
107
108 return end( $import_sessions );
109 }
110
111 public function get_penultimate_import_session() {
112 $sessions_data = $this->import_sessions;
113 $penultimate_element_value = [];
114
115 if ( empty( $sessions_data ) ) {
116 return [];
117 }
118
119 end( $sessions_data );
120
121 prev( $sessions_data );
122
123 if ( ! is_null( key( $sessions_data ) ) ) {
124 $penultimate_element_value = current( $sessions_data );
125 }
126
127 return $penultimate_element_value;
128 }
129
130 private function delete_last_import_data() {
131 $import_sessions = $this->import_sessions;
132 $revert_sessions = $this->revert_sessions;
133
134 $reverted_session = array_pop( $import_sessions );
135
136 $revert_sessions[] = [
137 'session_id' => $reverted_session['session_id'],
138 'kit_title' => $reverted_session['kit_title'],
139 'kit_name' => $reverted_session['kit_name'],
140 'kit_thumbnail' => $reverted_session['kit_thumbnail'],
141 'source' => $reverted_session['kit_source'],
142 'user_id' => get_current_user_id(),
143 'import_timestamp' => $reverted_session['start_timestamp'],
144 'revert_timestamp' => current_time( 'timestamp' ),
145 ];
146
147 update_option( Module::OPTION_KEY_ELEMENTOR_IMPORT_SESSIONS, $import_sessions, false );
148 update_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS, $revert_sessions, false );
149
150 $this->import_sessions = $import_sessions;
151 $this->revert_sessions = $revert_sessions;
152 }
153
154 private function revert_attachments( $data ) {
155 $query_args = [
156 'post_type' => 'attachment',
157 'post_status' => 'any',
158 'posts_per_page' => -1,
159 'meta_query' => [
160 [
161 'key' => Module::META_KEY_ELEMENTOR_IMPORT_SESSION_ID,
162 'value' => $data['session_id'],
163 ],
164 ],
165 ];
166
167 $query = new \WP_Query( $query_args );
168
169 foreach ( $query->posts as $post ) {
170 wp_delete_attachment( $post->ID, true );
171 }
172 }
173 }
174