PluginProbe
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits / trunk
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits vtrunk
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 trunk, at inc/classes/rollback.php

232 lines 5.1 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 if (!current_user_can('update_plugins')) {
54 wp_die(esc_html__('You are not allowed to roll back this plugin.', 'master-addons'));
55 }
56
57 $rollback_versions = $this->get_rollback_versions();
58
59 if (empty($_GET['version']) || !in_array($_GET['version'], $rollback_versions)) {
60 wp_die(esc_html__('Error occurred, The version selected is invalid. Try selecting different version.', 'master-addons' ));
61 }
62
63 $plugin_slug = basename(JLTMA_BASE, '.php');
64 $plugin_version = sanitize_text_field( wp_unslash( $_GET['version'] ) );
65
66 $jltma_rollback = new self(
67 [
68 'version' => $plugin_version,
69 'plugin_name' => $this->plugin_name,
70 'plugin_slug' => $plugin_slug,
71 'package_url' => sprintf('https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, $plugin_version),
72 ]
73 );
74
75 $jltma_rollback->run();
76
77 wp_die('', esc_html__('Rollback to Previous Version', 'master-addons' ), ['response' => 200,]);
78 }
79
80
81
82
83 public function get_rollback_versions()
84 {
85 $rollback_versions = get_transient('master_addons_rollbacks_' . JLTMA_VER);
86 if (false === $rollback_versions) {
87 $max_versions = 30;
88
89 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
90
91 $plugin_information = plugins_api(
92 'plugin_information',
93 [
94 'slug' => 'master-addons',
95 ]
96 );
97
98 if (empty($plugin_information->versions) || !is_array($plugin_information->versions)) {
99 return [];
100 }
101
102 krsort($plugin_information->versions);
103
104 $rollback_versions = [];
105
106 $current_index = 0;
107 foreach ($plugin_information->versions as $version => $download_link) {
108 if ($max_versions <= $current_index) {
109 break;
110 }
111
112 $lowercase_version = strtolower($version);
113 $is_valid_rollback_version = !preg_match('/(trunk|beta|rc|dev)/i', $lowercase_version);
114
115 $is_valid_rollback_version = apply_filters(
116 'master_addons/options/rollback/is_valid_rollback_version',
117 $is_valid_rollback_version,
118 $lowercase_version
119 );
120
121 if (!$is_valid_rollback_version) {
122 continue;
123 }
124
125 if (version_compare($version, JLTMA_VER, '>=')) {
126 continue;
127 }
128
129 $current_index++;
130 $rollback_versions[] = $version;
131 }
132
133 set_transient('master_addons_rollbacks_' . JLTMA_VER, $rollback_versions, WEEK_IN_SECONDS);
134 }
135
136 return $rollback_versions;
137 }
138
139
140
141 private function print_inline_style()
142 {
143 ?>
144 <style>
145 .wrap {
146 overflow: hidden;
147 }
148
149 h1 {
150 background: #0347FF;
151 text-align: center;
152 color: #fff !important;
153 padding: 70px !important;
154 text-transform: uppercase;
155 letter-spacing: 1px;
156 }
157
158 h1 img {
159 max-width: 300px;
160 display: block;
161 margin: auto auto 50px;
162 }
163 </style>
164
165 <?php
166 }
167
168 protected function apply_package()
169 {
170
171 $update_plugins = get_site_transient('update_plugins');
172
173 if (!is_object($update_plugins)) {
174
175 $update_plugins = new \stdClass();
176 }
177
178 $plugin_info = new \stdClass();
179
180 $plugin_info->new_version = $this->version;
181
182 $plugin_info->slug = $this->plugin_slug;
183
184 $plugin_info->package = $this->package_url;
185
186 $plugin_info->url = 'https://master-addons.com/';
187
188 $update_plugins->response[$this->plugin_name] = $plugin_info;
189
190 set_site_transient('update_plugins', $update_plugins);
191 }
192
193 protected function upgrade()
194 {
195
196 require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
197
198 $logo_url = JLTMA_IMAGE_DIR . 'logo.png';
199
200 $upgrader_args = [
201 'url' => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode($this->plugin_name),
202 'plugin' => $this->plugin_name,
203 'nonce' => 'upgrade-plugin_' . $this->plugin_name,
204 'title' => '<img src="' . esc_url($logo_url) . '" alt="Master Addons Version Rollback">' . __('Rollback to Previous Version ', 'master-addons' ),
205 ];
206
207 $this->print_inline_style();
208
209 $upgrader = new \Plugin_Upgrader(new \Plugin_Upgrader_Skin($upgrader_args));
210
211 $upgrader->upgrade($this->plugin_name);
212 }
213
214 public function run()
215 {
216
217 $this->apply_package();
218
219 $this->upgrade();
220 }
221
222 public static function get_instance()
223 {
224 if (!self::$instance) {
225 self::$instance = new self;
226 }
227 return self::$instance;
228 }
229 }
230
231 Rollback::get_instance();
232