PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.0.1.2
Adminify – White Label, Admin Menu Editor, Login Customizer v4.0.1.2
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
← All changes | Libs/Addons.php +173 -369 4.2.54.0.1.2 View file →
@@ -1,7 +1,7 @@
1 1 <?php
2 2
3 -namespace PXLBSAdminify\Libs;
3 +namespace WPAdminify\Libs;
4 4
5 5 // No, Direct access Sir !!!
6 6 if (!defined('ABSPATH')) {
7 7 exit;
@@ -24,9 +24,11 @@
24 24 public $plugins_list = [];
25 25 public $sub_menu;
26 26 public $menu_order;
27 27
28 + public $server_url = 'https://coupon.wpadminify.com/';
28 29
30 +
29 31 /**
30 32 * Constructor method
31 33 *
32 34 * @param integer $menu_order .
@@ -39,223 +41,15 @@
39 41 $this->plugins_list = $this->plugins_list();
40 42
41 43 $this->includes();
42 44
43 - // Show Addons menu only on network admin for multisite, or on regular admin for single site
44 - if ( is_multisite() ) {
45 - add_action('network_admin_menu', array($this, 'admin_menu'), 1000);
46 - } else {
47 - add_action('admin_menu', array($this, 'admin_menu'), 1000);
48 - }
49 - add_action('wp_ajax_pxlbsadminify_addons_upgrade_plugin', array($this, 'pxlbsadminify_addons_upgrade_plugin'));
50 - add_action('wp_ajax_pxlbsadminify_addons_activate_plugin', array($this, 'pxlbsadminify_addons_activate_plugin'));
51 - // Notify the site admin when a renamed legacy addon is detected
52 - // alongside its replacement. Per WordPress.org plugin guidelines,
53 - // we must not deactivate or activate plugins automatically; the
54 - // user has to perform the swap themselves from the Plugins screen.
55 - add_action('admin_notices', array($this, 'maybe_renamed_addon_notice'));
56 - add_action( 'rest_api_init', array( $this , 'addons_rest_routes') );
45 + add_action('admin_menu', array($this, 'admin_menu'), 1000);
46 + // add_action('network_admin_menu', array($this, 'admin_menu'), $this->menu_order);
47 + add_action('wp_ajax_jltwp_adminify_addons_upgrade_plugin', array($this, 'jltwp_adminify_addons_upgrade_plugin'));
48 + add_action('wp_ajax_jltwp_adminify_addons_activate_plugin', array($this, 'jltwp_adminify_addons_activate_plugin'));
57 49 }
58 50
59 - public function addons_rest_routes() {
60 - register_rest_route('adminify/v1', '/get-addons-list', array(
61 - 'methods' => 'GET',
62 - 'callback' => [$this, 'get_addons_plugins_list'],
63 - 'permission_callback' => [$this, 'check_is_admin_user'],
64 - ));
65 -
66 - register_rest_route('adminify/v1', '/install-addons', array(
67 - 'methods' => 'POST',
68 - 'callback' => [$this, 'install_addons'],
69 - 'permission_callback' => [$this, 'check_verify_nonce_and_permissions'],
70 - ));
71 - }
72 -
73 - public function check_is_admin_user() {
74 - if ( is_multisite() && ! is_super_admin() ) {
75 - return new \WP_Error('rest_forbidden', __('You are not allowed to access this resource.', 'adminify'), array('status' => 403));
76 - }
77 - if ( ! current_user_can('manage_options') ) {
78 - return new \WP_Error('rest_forbidden', __('You are not allowed to access this resource.', 'adminify'), array('status' => 403));
79 - }
80 - return true;
81 - }
82 -
83 - public function check_verify_nonce_and_permissions() {
84 - // The install-addons endpoint may both install AND activate
85 - // addons depending on each addon's current status, so the
86 - // caller must hold BOTH capabilities. On multisite this also
87 - // requires super admin.
88 - if ( is_multisite() && ! is_super_admin() ) {
89 - return new \WP_Error('rest_forbidden', __('Super admin required.', 'adminify'), array('status' => 403));
90 - }
91 - if ( ! current_user_can('install_plugins') ) {
92 - return new \WP_Error('rest_forbidden', __('You are not allowed to install plugins.', 'adminify'), array('status' => 403));
93 - }
94 - if ( ! current_user_can('activate_plugins') ) {
95 - return new \WP_Error('rest_forbidden', __('You are not allowed to activate plugins.', 'adminify'), array('status' => 403));
96 - }
97 -
98 - // Nonce check from header. Sanitize and unslash before verifying.
99 - $nonce = isset($_SERVER['HTTP_X_WP_NONCE'])
100 - ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_WP_NONCE'] ) )
101 - : '';
102 - if ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {
103 - return new \WP_Error('rest_cookie_invalid_nonce', __('Invalid nonce.', 'adminify'), array('status' => 403));
104 - }
105 -
106 - return true;
107 - }
108 -
109 -
110 - public function get_addons_plugins_list() {
111 - // Fetch the catalogue on demand. This callback only runs on the
112 - // Add-ons page (a user action), so the remote request is not made on
113 - // routine admin page loads.
114 - $plugins = ( method_exists( $this, 'get_adminify_plugins_lists' ) )
115 - ? (array) $this->get_adminify_plugins_lists()
116 - : (array) $this->plugins_list;
117 - unset($plugins['master-addons']);
118 - $all_plugins = get_plugins();
119 - $active_plugins = get_option('active_plugins');
120 - foreach( $plugins as $slug => $plugin){
121 - foreach ($all_plugins as $plugin_file => $plugin_data) {
122 - if (strpos($plugin_file, $slug) !== false) {
123 - $plugins[$slug]["status"] = 'installed';
124 -
125 - if (in_array($plugin_file, $active_plugins)) {
126 - $plugins[$slug]["status"] = 'activated';
127 - }
128 - break;
129 - }
130 - }
131 - if( !isset($plugins[$slug]["status"])) $plugins[$slug]["status"] = 'not-installed';
132 -
133 - }
134 -
135 - return rest_ensure_response($plugins);
136 -
137 - }
138 -
139 -
140 - public function install_addons( $request ) {
141 - $addons = $request->get_param('addons');
142 - if ( empty($addons) || ! is_array($addons) ) {
143 - return new \WP_Error('no_addons', __('No addons were selected.', 'adminify'), array('status' => 400));
144 - }
145 -
146 - $plugins_list = $this->get_addons_plugins_list()->data;
147 - foreach( $addons as $key => $plugin ) {
148 - $plugin = sanitize_key( $plugin );
149 - if ( ! isset( $plugins_list[ $plugin ] ) ) {
150 - continue;
151 - }
152 - if ( $plugins_list[ $plugin ]['status'] === 'activated' ) {
153 - continue;
154 - }
155 - if ( $plugins_list[ $plugin ]['status'] === 'installed' ) {
156 - $this->activate_plugin_by_slug( $plugin );
157 - continue;
158 - }
159 - $params = [
160 - 'request_type' => 'rest',
161 - 'plugin' => $plugins_list[ $plugin ]['download_link'],
162 - ];
163 -
164 - $this->pxlbsadminify_addons_upgrade_plugin( $params );
165 - }
166 -
167 - return rest_ensure_response(['message' => __('Addons processed.', 'adminify'), 'addons' => $addons]);
168 - }
169 -
170 - function activate_plugin_by_slug($slug) {
171 - // Activation requires the activate_plugins capability in
172 - // addition to whatever capability gated the calling endpoint.
173 - // On multisite, activation must be performed by a super admin.
174 - if ( is_multisite() && ! is_super_admin() ) {
175 - return new \WP_Error( 'rest_forbidden', __( 'Super admin required to activate plugins.', 'adminify' ), array( 'status' => 403 ) );
176 - }
177 - if ( ! current_user_can( 'activate_plugins' ) ) {
178 - return new \WP_Error( 'rest_forbidden', __( 'You are not allowed to activate plugins.', 'adminify' ), array( 'status' => 403 ) );
179 - }
180 -
181 - // Reject any slug containing path separators / traversal so
182 - // $slug cannot escape WP_PLUGIN_DIR.
183 - if ( ! is_string( $slug ) || $slug === '' || strpbrk( $slug, "/\\" ) !== false || strpos( $slug, '..' ) !== false ) {
184 - return new \WP_Error( 'invalid_slug', __( 'Invalid plugin slug.', 'adminify' ), array( 'status' => 400 ) );
185 - }
186 -
187 - // Slug must be present in the trusted addons list.
188 - if ( ! array_key_exists( $slug, (array) $this->plugins_list ) ) {
189 - return new \WP_Error( 'invalid_slug', __( 'Invalid plugin slug.', 'adminify' ), array( 'status' => 400 ) );
190 - }
191 -
192 - $plugin_path = WP_PLUGIN_DIR . '/' . $slug;
193 -
194 - if ( ! is_dir( $plugin_path ) ) {
195 - return;
196 - }
197 -
198 - $installed_plugins = get_plugins( '/' . $slug );
199 - if ( empty( $installed_plugins ) ) {
200 - return;
201 - }
202 -
203 - $plugin_relative_path = $slug . '/' . key( $installed_plugins );
204 -
205 - if ( is_plugin_active( $plugin_relative_path ) ) {
206 - return;
207 - }
208 -
209 - activate_plugin( $plugin_relative_path );
210 - }
211 -
212 51 /**
213 - * Map of legacy addon slugs that have been renamed to a new slug.
214 - *
215 - * @return array<string,string>
216 - */
217 - protected function renamed_addons_map() {
218 - return [
219 - 'sidebar-generator/adminify-sidebar-generator.php' => 'adminify-sidebar-generator/adminify-sidebar-generator.php',
220 - ];
221 - }
222 -
223 - /**
224 - * Show a non-blocking admin notice if a legacy (renamed) addon is
225 - * still installed. We never deactivate or activate plugins on the
226 - * user's behalf; the notice points them to the Plugins screen so
227 - * they can perform the swap themselves.
228 - */
229 - public function maybe_renamed_addon_notice() {
230 - if ( ! current_user_can('activate_plugins') ) {
231 - return;
232 - }
233 -
234 - $messages = [];
235 -
236 - foreach ($this->renamed_addons_map() as $old_plugin => $new_plugin) {
237 - $old_exists = file_exists(WP_PLUGIN_DIR . '/' . $old_plugin);
238 - if ( ! $old_exists ) {
239 - continue;
240 - }
241 -
242 - $messages[] = sprintf(
243 - /* translators: 1: old plugin slug, 2: new plugin slug */
244 - esc_html__('"%1$s" has been renamed to "%2$s". Please deactivate and remove the old version, then install the new one from the Adminify Addons screen.', 'adminify'),
245 - esc_html(dirname($old_plugin)),
246 - esc_html(dirname($new_plugin))
247 - );
248 - }
249 -
250 - if ( empty($messages) ) {
251 - return;
252 - }
253 -
254 - echo '<div class="notice notice-warning"><p><strong>' . esc_html__('Adminify', 'adminify') . ':</strong> ' . esc_html(implode('<br>', $messages)) . '</p></div>';
255 - }
256 -
257 - /**
258 52 * Includes
259 53 *
260 54 * @author Jewel Theme <support@jeweltheme.com>
261 55 */
@@ -260,18 +54,17 @@
260 54 * @author Jewel Theme <support@jeweltheme.com>
261 55 */
262 56 public function includes()
263 57 {
264 - // wp-load.php must never be required from within a plugin: the
265 - // plugin already runs inside WordPress. The wp-admin includes
266 - // below are required for plugin install/upgrade APIs used by
267 - // this class and are loaded with require_once immediately
268 - // before the functions from each file are called.
269 - require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
270 - require_once ABSPATH . 'wp-admin/includes/file.php';
271 - require_once ABSPATH . 'wp-admin/includes/misc.php';
272 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
273 - require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
58 + // if (!function_exists('install_plugin_install_status')) {
59 + // require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
60 + require_once(ABSPATH . '/wp-load.php');
61 + require_once(ABSPATH . 'wp-admin/includes/plugin-install.php');
62 + require_once(ABSPATH . 'wp-admin/includes/file.php');
63 + require_once(ABSPATH . 'wp-admin/includes/misc.php');
64 + require_once(ABSPATH . 'wp-admin/includes/plugin.php');
65 + require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
66 + // }
274 67 }
275 68
276 69 /**
277 70 * Menu Items
@@ -319,10 +112,26 @@
319 112 *
320 113 * @return void
321 114 */
322 115
323 - public function addons_check()
116 + public function jltwp_adminify_addons_check()
324 117 {
118 +
119 + $license = jltwp_adminify()->_get_license();
120 +
121 + if (!is_object($license) || !$license->is_valid() || !$license->is_active()) return;
122 +
123 + if ( $this->is_eligible_for_coupon() ) {
124 + // Get the coupon
125 + $coupon = $this->maybe_create_and_get_coupon();
126 + if (!empty($coupon) && !empty($coupon['code'])) {
127 + echo sprintf(
128 + __('<h3>Coupon Code: <strong style="color: red">%s</strong> Redeem this coupon code to get free access to all our premium addons (Except Admin Bar Editor, RoleMaster Suite and Master Addons). Learn how to <a href="https://wpadminify.com/redeem-addons-using-coupon-code/" target="_blank">redeem coupon code?</a></h3> ', 'adminify'),
129 + esc_attr($coupon['code'])
130 + );
131 + }
132 + }
133 +
325 134 echo '<style>
326 135 #fs_addons .fs-cards-list{ display: flex; }
327 136 #fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button{
328 137 top: 112px;
@@ -331,10 +140,73 @@
331 140 border-radius: 3px !important;
332 141 }</style>';
333 142 }
334 143
144 + public function is_eligible_for_coupon() {
335 145
146 + $is_eligible = get_option('wp_adminify_addon__is_eligible_for_coupon', null);
336 147
148 + if ( $is_eligible !== null ) return wp_validate_boolean($is_eligible);
149 + $args = [
150 + 'license' => base64_encode(json_encode(jltwp_adminify()->_get_license())),
151 + 'action' => 'check_eligibility'
152 + ];
153 +
154 + $request_uri = add_query_arg($args, $this->server_url);
155 +
156 + $response = wp_remote_get($request_uri);
157 +
158 + if (!is_wp_error($response) && $response['response']['code'] === 200) {
159 + $file_contents = wp_remote_retrieve_body($response);
160 + $is_eligible = json_decode($file_contents, true);
161 + update_option('wp_adminify_addon__is_eligible_for_coupon', wp_validate_boolean($is_eligible));
162 + return $is_eligible;
163 + }
164 +
165 + return false;
166 + }
167 +
168 + public function maybe_delete_corrupted_coupon(){
169 + $coupon_delete_check = get_option('wp_adminify_addon__coupon_is_deleted', false);
170 + if($coupon_delete_check != true){
171 + delete_option('wp_adminify_addon__coupon');
172 + update_option('wp_adminify_addon__coupon_is_deleted', true);
173 + }
174 + }
175 +
176 + public function maybe_create_and_get_coupon()
177 + {
178 + $this->maybe_delete_corrupted_coupon();
179 + $coupon = get_option('wp_adminify_addon__coupon');
180 +
181 + if (!empty($coupon)) return $coupon;
182 +
183 + // communicate hit hserver get coupon
184 + $args = [
185 + 'license' => base64_encode(json_encode(jltwp_adminify()->_get_license())),
186 + 'action' => 'get_coupon'
187 + ];
188 +
189 + $response = wp_remote_get(add_query_arg($args, $this->server_url));
190 +
191 + if (!is_wp_error($response) && $response['response']['code'] === 200) {
192 +
193 + $file_contents = wp_remote_retrieve_body($response);
194 + $response_data = json_decode($file_contents, true);
195 +
196 + if (!empty($response_data) && is_array($response_data) && !empty($response_data['id']) && !empty($response_data['code']) ) {
197 + $coupon = [
198 + 'id' => $response_data['id'],
199 + 'code' => $response_data['code']
200 + ];
201 + update_option('wp_adminify_addon__coupon', $coupon);
202 + }
203 + }
204 +
205 + return $coupon;
206 + }
207 +
208 +
337 209 /**
338 210 * Header
339 211 */
340 212 public function header()
@@ -342,11 +214,11 @@
342 214 ?>
343 215 <div class='wp-adminify-addons-header'>
344 216 <div class='wp-adminify-addons-title'>
345 217 <h2>
346 - <?php echo esc_html__('Add Ons for Adminify', 'adminify'); ?>
218 + <?php echo esc_html__('Add Ons for WP Adminify', 'adminify'); ?>
347 219 </h2>
348 - <?php $this->addons_check(); ?>
220 + <?php $this->jltwp_adminify_addons_check(); ?>
349 221 </div>
350 222 <div class='wp-adminify-addons-menu'>
351 223 <div class="wp-filter">
352 224 <ul class="filter-links">
@@ -399,19 +271,10 @@
399 271 * Body
400 272 */
401 273 public function plugins()
402 274 {
403 - // $this->plugins_list is populated at construction only from the
404 - // cached catalogue, which is empty until a live fetch runs. The
405 - // Add-ons page render is itself an explicit user action, so fall
406 - // back to the bundled catalogue here so the cards always show.
407 - $plugins_list = $this->plugins_list;
408 275
409 - if ( empty( $plugins_list ) && method_exists( $this, 'get_adminify_plugins_lists' ) ) {
410 - $plugins_list = (array) $this->get_adminify_plugins_lists();
411 - }
412 -
413 - foreach ($plugins_list as $key => $plugin) {
276 + foreach ($this->plugins_list as $key => $plugin) {
414 277 $install_status = \install_plugin_install_status($plugin);
415 278 $classes = implode(' ', $plugin['type']);
416 279
417 280 $more_details = self_admin_url(
@@ -524,9 +387,9 @@
524 387 <?php
525 388 } elseif (current_user_can('activate_plugin', $install_status['file'])) {
526 389 ?>
527 390 <button class="button activate-now" data-plugin-file="<?php echo esc_attr($install_status['file']); ?>">
528 - <?php echo esc_html__('Activate Now', 'adminify'); ?>
391 + <?php echo esc_html__('Activate', 'adminify'); ?>
529 392 </button>
530 393 <?php
531 394 } else {
532 395 ?>
@@ -551,9 +414,9 @@
551 414 * Activate Plugins
552 415 *
553 416 * @author Jewel Theme <support@jeweltheme.com>
554 417 */
555 - public function pxlbsadminify_addons_activate_plugin()
418 + public function jltwp_adminify_addons_activate_plugin()
556 419 {
557 420 if (empty($_POST['plugin'])) {
558 421 return;
559 422 }
@@ -559,35 +422,23 @@
559 422 }
560 423 try {
561 424 $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
562 425
563 - if (!wp_verify_nonce($nonce, 'pxlbsadminify_addons_nonce')) {
426 + if (!wp_verify_nonce($nonce, 'jltwp_adminify_addons_nonce')) {
564 427 wp_send_json_error(array('mess' => __('Nonce is invalid', 'adminify')));
565 428 }
566 429
567 - // Security check - only administrators can activate plugins
568 - if (!current_user_can('activate_plugins')) {
569 - wp_send_json_error(array('mess' => __('You do not have permission to perform this action.', 'adminify')));
570 - }
430 + // if ((is_multisite() && !is_network_admin()) || !current_user_can('install_plugins')) {
431 + // wp_send_json_error(array('mess' => __('Invalid access', 'adminify')));
432 + // }
571 433
572 434 $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
573 435 $plugin_links = array_values(wp_list_pluck($this->plugins_list, 'slug'));
574 436
575 - if (!in_array(dirname($plugin), $plugin_links, true)) {
437 + if (!in_array(dirname($plugin), $plugin_links)) {
576 438 wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify')));
577 439 }
578 440
579 - // Resolve against the list of actually installed plugins so that
580 - // only a known plugin file is ever passed to activate_plugin().
581 - if (!function_exists('get_plugins')) {
582 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
583 - }
584 - $installed_plugins = array_keys(get_plugins());
585 -
586 - if (!in_array($plugin, $installed_plugins, true)) {
587 - wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify')));
588 - }
589 -
590 441 $result = activate_plugin($plugin);
591 442
592 443 if (is_wp_error($result)) {
593 444 wp_send_json_error(
@@ -645,11 +496,11 @@
645 496 * Upgrade Plugins required Libraries
646 497 *
647 498 * @author Jewel Theme <support@jeweltheme.com>
648 499 */
649 - public function pxlbsadminify_addons_upgrade_plugin( $params = null )
500 + public function jltwp_adminify_addons_upgrade_plugin()
650 501 {
651 - if ($params == null && empty($_POST['plugin'])) {
502 + if (empty($_POST['plugin'])) {
652 503 return;
653 504 }
654 505
655 506 try {
@@ -657,73 +508,48 @@
657 508 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
658 509 require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
659 510 require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
660 511
661 - if($params == null){
662 - $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
512 + $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
663 513
664 - if (!wp_verify_nonce($nonce, 'pxlbsadminify_addons_nonce')) {
665 - wp_send_json_error(array('mess' => __('Nonce is invalid', 'adminify')));
666 - }
667 - $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
668 - }else{
669 - $plugin = $params['plugin'];
514 + if (!wp_verify_nonce($nonce, 'jltwp_adminify_addons_nonce')) {
515 + wp_send_json_error(array('mess' => __('Nonce is invalid', 'adminify')));
670 516 }
671 517
672 - // Security check - only administrators can install plugins
673 - if (!current_user_can('install_plugins')) {
674 - wp_send_json_error(array('mess' => __('You do not have permission to perform this action.', 'adminify')));
675 - }
518 + // if ((is_multisite() && !is_network_admin()) || !current_user_can('install_plugins')) {
519 + // wp_send_json_error(array('mess' => __('Invalid access', 'adminify')));
520 + // }
676 521
522 + $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
523 +
677 524 $plugin_slug = $this->get_the_plugin_slug( $plugin );
678 525
679 - if ( ! array_key_exists( $plugin_slug, $this->plugins_list ) ) {
526 + if ( ! array_key_exists( $plugin_slug, $this->plugins_list) ) {
680 527 wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify')));
681 528 }
682 529
683 - // Replace the user-supplied $plugin value with values derived
684 - // from our trusted internal addons list, so that arbitrary
685 - // input never reaches Plugin_Upgrader::install()/upgrade() or
686 - // activate_plugin().
687 - $trusted_install_source = isset($this->plugins_list[$plugin_slug]['download_link'])
688 - ? $this->plugins_list[$plugin_slug]['download_link']
689 - : '';
690 -
691 - if($params == null){
692 - $type = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : 'install';
693 - }else{
694 - $type = 'install';
695 - }
530 + $type = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : 'install';
696 531 $skin = new \WP_Ajax_Upgrader_Skin();
697 532 $upgrader = new \Plugin_Upgrader($skin);
698 533
699 534 if ('install' === $type) {
700 535
701 - if ( empty( $trusted_install_source ) ) {
702 - wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify')));
536 + $result = $upgrader->install($plugin);
537 +
538 + if (empty($result) || empty($upgrader->result)) {
539 + wp_send_json_error(
540 + array(
541 + 'mess' => 'Something is wrong',
542 + )
543 + );
703 544 }
704 545
705 - $result = $upgrader->install( $trusted_install_source );
706 - if ($params == null){
707 - if (empty($result) || empty($upgrader->result)) {
708 - wp_send_json_error(
709 - array(
710 - 'mess' => 'Something is wrong',
711 - )
712 - );
713 - }
714 -
715 - if (is_wp_error($result)) {
716 - wp_send_json_error(
717 - array(
718 - 'mess' => $result->get_error_message(),
719 - )
720 - );
721 - }
722 - }else{
723 - if(empty($result) || empty($upgrader->result)){
724 - return;
725 - }
546 + if (is_wp_error($result)) {
547 + wp_send_json_error(
548 + array(
549 + 'mess' => $result->get_error_message(),
550 + )
551 + );
726 552 }
727 553
728 554 $plugins = get_plugins('/' . $upgrader->result['destination_name']);
729 555 $plugin_data = end($plugins);
@@ -734,91 +560,69 @@
734 560
735 561 $install_status = \install_plugin_install_status($plugin_data);
736 562
737 563 $active_plugin = activate_plugin($install_status['file']);
738 -
739 - if ($params == null){
740 - if (is_wp_error($active_plugin)) {
741 - wp_send_json_error(
742 - array(
743 - 'mess' => $active_plugin->get_error_message(),
744 - )
745 - );
746 - } else {
747 - wp_send_json_success(
748 - array(
749 - 'mess' => __('Install success', 'adminify'),
750 - )
751 - );
752 - }
753 - }
754 - } else {
755 - if ($params == null){
564 +
565 + if (is_wp_error($active_plugin)) {
756 566 wp_send_json_error(
757 567 array(
758 - 'mess' => 'Error',
568 + 'mess' => $active_plugin->get_error_message(),
759 569 )
760 570 );
571 + } else {
572 + wp_send_json_success(
573 + array(
574 + 'mess' => __('Install success', 'adminify'),
575 + )
576 + );
577 + }
578 + } else {
761 579
762 - }
580 + wp_send_json_error(
581 + array(
582 + 'mess' => 'Error',
583 + )
584 + );
763 585 }
764 586 } else {
765 587
766 - // Resolve the trusted plugin file path from the validated
767 - // slug instead of trusting the raw $_POST value, so that
768 - // is_plugin_active(), Plugin_Upgrader::upgrade() and
769 - // activate_plugin() never receive attacker-supplied paths.
770 - $installed_plugins = get_plugins( '/' . $plugin_slug );
771 - if ( empty( $installed_plugins ) ) {
772 - wp_send_json_error(array('mess' => __('Plugin not installed.', 'adminify')));
773 - }
774 - $trusted_plugin_file = $plugin_slug . '/' . key( $installed_plugins );
588 + $is_active = is_plugin_active($plugin);
589 + $result = $upgrader->upgrade($plugin);
775 590
776 - $is_active = is_plugin_active( $trusted_plugin_file );
777 - $result = $upgrader->upgrade( $trusted_plugin_file );
778 -
779 - if ($params == null){
780 - if ( empty($result) || is_wp_error($result) ) {
781 - wp_send_json_error(
782 - array(
783 - 'mess' => is_wp_error($result) ? $result->get_error_message() : __('Couldn\'t upgrade', 'adminify')
784 - )
785 - );
786 - }
591 + if ( empty($result) || is_wp_error($result) ) {
592 + wp_send_json_error(
593 + array(
594 + 'mess' => is_wp_error($result) ? $result->get_error_message() : __('Couldn\'t upgrade', 'adminify')
595 + )
596 + );
787 597 }
788 598
789 - $active_status = activate_plugin( $trusted_plugin_file );
599 + $active_status = activate_plugin($plugin);
790 600
791 - if ($params == null){
792 - if ( empty($active_status) || is_wp_error($active_status) ) {
793 - wp_send_json_error(
794 - array(
795 - 'mess' => is_wp_error($result) ? $result->get_error_message() : __('Activation Failed', 'adminify')
796 - )
797 - );
798 - }
799 -
800 - wp_send_json_success(
601 + if ( empty($active_status) || is_wp_error($active_status) ) {
602 + wp_send_json_error(
801 603 array(
802 - 'mess' => __('Update success', 'adminify'),
803 - 'active' => true,
604 + 'mess' => is_wp_error($result) ? $result->get_error_message() : __('Activation Failed', 'adminify')
804 605 )
805 606 );
806 607 }
807 - }
808 -
809 - } catch (\Exception $ex) {
810 - if ($params == null){
811 - wp_send_json_error(
608 +
609 + wp_send_json_success(
812 610 array(
813 - 'mess' => __('Error exception.', 'adminify'),
814 - array(
815 - 'error' => $ex,
816 - ),
611 + 'mess' => __('Update success', 'adminify'),
612 + 'active' => true,
817 613 )
818 614 );
819 615 }
616 + } catch (\Exception $ex) {
617 + wp_send_json_error(
618 + array(
619 + 'mess' => __('Error exception.', 'adminify'),
620 + array(
621 + 'error' => $ex,
622 + ),
623 + )
624 + );
820 625 }
821 626 }
822 -
823 627 }
824 628 }