PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.1.3
Adminify – White Label, Admin Menu Editor, Login Customizer v4.1.3
4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.1.17 All 164 releases
adminify / Inc / Classes / Adminify_Rollback.php

Adminify_Rollback.php in Adminify – White Label, Admin Menu Editor, Login Customizer 4.1.3, at Inc/Classes/Adminify_Rollback.php

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