PluginProbe
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits / 3.1.2
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits v3.1.2
3.2.2 3.2.3 3.2.1 3.2.0 3.1.9 3.1.8 3.1.7 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.9 trunk 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.3 1.1.4 1.1.5 All 174 releases
master-addons / inc / classes / rollback.php

rollback.php in Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits 3.1.2, at inc/classes/rollback.php

228 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace MasterAddons\Inc\Classes;
4 use MasterAddons\Inc\Classes\Helper;
5
6 if (!defined('ABSPATH')) exit;
7
8 /**
9 * Master Addons Rollback
10 *
11 * Allows rolling back to previous versions of the free plugin from WordPress.org.
12 * This feature is only available for the free version installed from WordPress.org.
13 * Pro versions should use Freemius for version management.
14 */
15 class Rollback
16 {
17
18 protected $package_url;
19
20 protected $version;
21
22 protected $plugin_name;
23
24 protected $plugin_slug;
25
26 private static $instance = null;
27
28 public function __construct($args = [])
29 {
30 // Rollback is only available for free version from WordPress.org
31 // Pro users should use Freemius account for version management
32 if (Helper::jltma_premium()) {
33 return;
34 }
35
36 $this->plugin_name = JLTMA;
37 add_action('admin_post_master_addons_rollback', [$this, 'jltma_post_addons_rollback']);
38
39 foreach ($args as $key => $value) {
40 $this->{$key} = $value;
41 }
42 }
43
44
45 /**
46 * Rollback function
47 */
48 public function jltma_post_addons_rollback()
49 {
50
51 check_admin_referer('master_addons_rollback');
52
53 $rollback_versions = $this->get_rollback_versions();
54
55 if (empty($_GET['version']) || !in_array($_GET['version'], $rollback_versions)) {
56 wp_die(esc_html__('Error occurred, The version selected is invalid. Try selecting different version.', 'master-addons' ));
57 }
58
59 $plugin_slug = basename(JLTMA_BASE, '.php');
60 $plugin_version = sanitize_text_field( wp_unslash( $_GET['version'] ) );
61
62 $jltma_rollback = new self(
63 [
64 'version' => $plugin_version,
65 'plugin_name' => $this->plugin_name,
66 'plugin_slug' => $plugin_slug,
67 'package_url' => sprintf('https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, $plugin_version),
68 ]
69 );
70
71 $jltma_rollback->run();
72
73 wp_die('', esc_html__('Rollback to Previous Version', 'master-addons' ), ['response' => 200,]);
74 }
75
76
77
78
79 public function get_rollback_versions()
80 {
81 $rollback_versions = get_transient('master_addons_rollbacks_' . JLTMA_VER);
82 if (false === $rollback_versions) {
83 $max_versions = 30;
84
85 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
86
87 $plugin_information = plugins_api(
88 'plugin_information',
89 [
90 'slug' => 'master-addons',
91 ]
92 );
93
94 if (empty($plugin_information->versions) || !is_array($plugin_information->versions)) {
95 return [];
96 }
97
98 krsort($plugin_information->versions);
99
100 $rollback_versions = [];
101
102 $current_index = 0;
103 foreach ($plugin_information->versions as $version => $download_link) {
104 if ($max_versions <= $current_index) {
105 break;
106 }
107
108 $lowercase_version = strtolower($version);
109 $is_valid_rollback_version = !preg_match('/(trunk|beta|rc|dev)/i', $lowercase_version);
110
111 $is_valid_rollback_version = apply_filters(
112 'master_addons/options/rollback/is_valid_rollback_version',
113 $is_valid_rollback_version,
114 $lowercase_version
115 );
116
117 if (!$is_valid_rollback_version) {
118 continue;
119 }
120
121 if (version_compare($version, JLTMA_VER, '>=')) {
122 continue;
123 }
124
125 $current_index++;
126 $rollback_versions[] = $version;
127 }
128
129 set_transient('master_addons_rollbacks_' . JLTMA_VER, $rollback_versions, WEEK_IN_SECONDS);
130 }
131
132 return $rollback_versions;
133 }
134
135
136
137 private function print_inline_style()
138 {
139 ?>
140 <style>
141 .wrap {
142 overflow: hidden;
143 }
144
145 h1 {
146 background: #0347FF;
147 text-align: center;
148 color: #fff !important;
149 padding: 70px !important;
150 text-transform: uppercase;
151 letter-spacing: 1px;
152 }
153
154 h1 img {
155 max-width: 300px;
156 display: block;
157 margin: auto auto 50px;
158 }
159 </style>
160
161 <?php
162 }
163
164 protected function apply_package()
165 {
166
167 $update_plugins = get_site_transient('update_plugins');
168
169 if (!is_object($update_plugins)) {
170
171 $update_plugins = new \stdClass();
172 }
173
174 $plugin_info = new \stdClass();
175
176 $plugin_info->new_version = $this->version;
177
178 $plugin_info->slug = $this->plugin_slug;
179
180 $plugin_info->package = $this->package_url;
181
182 $plugin_info->url = 'https://master-addons.com/';
183
184 $update_plugins->response[$this->plugin_name] = $plugin_info;
185
186 set_site_transient('update_plugins', $update_plugins);
187 }
188
189 protected function upgrade()
190 {
191
192 require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
193
194 $logo_url = JLTMA_IMAGE_DIR . 'logo.png';
195
196 $upgrader_args = [
197 'url' => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode($this->plugin_name),
198 'plugin' => $this->plugin_name,
199 'nonce' => 'upgrade-plugin_' . $this->plugin_name,
200 'title' => '<img src="' . esc_url($logo_url) . '" alt="Master Addons Version Rollback">' . __('Rollback to Previous Version ', 'master-addons' ),
201 ];
202
203 $this->print_inline_style();
204
205 $upgrader = new \Plugin_Upgrader(new \Plugin_Upgrader_Skin($upgrader_args));
206
207 $upgrader->upgrade($this->plugin_name);
208 }
209
210 public function run()
211 {
212
213 $this->apply_package();
214
215 $this->upgrade();
216 }
217
218 public static function get_instance()
219 {
220 if (!self::$instance) {
221 self::$instance = new self;
222 }
223 return self::$instance;
224 }
225 }
226
227 Rollback::get_instance();
228