*/ class Addons { public $menu_items = []; public $plugins_list = []; public $sub_menu; public $menu_order; public $server_url = 'https://coupon.wpadminify.com/'; /** * Constructor method * * @param integer $menu_order . * @author Jewel Theme */ public function __construct($menu_order = 70) { $this->menu_order = $menu_order; $this->menu_items = $this->menu_items(); $this->plugins_list = $this->plugins_list(); $this->includes(); add_action('admin_menu', array($this, 'admin_menu'), 1000); // add_action('network_admin_menu', array($this, 'admin_menu'), $this->menu_order); add_action('wp_ajax_jltwp_adminify_addons_upgrade_plugin', array($this, 'jltwp_adminify_addons_upgrade_plugin')); add_action('wp_ajax_jltwp_adminify_addons_activate_plugin', array($this, 'jltwp_adminify_addons_activate_plugin')); add_action('plugins_loaded', array($this, 'maybe_replace_addons_path'), 1000); // 1000 is important add_action( 'rest_api_init', array( $this , 'jltwp_adminify_addons_rest_routes') ); } public function jltwp_adminify_addons_rest_routes() { register_rest_route('adminify/v1', '/get-addons-list', array( 'methods' => 'GET', 'callback' => [$this, 'jltwp_adminify_get_addons_plugins_list'], // 'permission_callback' => [$this, 'adminify_is_admin_user'], 'permission_callback' => '__return_true', )); register_rest_route('adminify/v1', '/install-addons', array( 'methods' => 'POST', 'callback' => [$this, 'jltwp_adminify_install_addons'], 'permission_callback' => [$this, 'adminify_verify_nonce_and_permissions'], )); } public function adminify_is_admin_user() { return current_user_can('manage_options'); } public function adminify_verify_nonce_and_permissions() { // Check user if ( ! current_user_can('manage_options') ) { return new WP_Error('forbidden', 'You are not allowed to do this.', array('status' => 403)); } // Check nonce from header $nonce = $_SERVER['HTTP_X_WP_NONCE'] ?? ''; if ( ! wp_verify_nonce($nonce, 'wp_rest') ) { return new WP_Error('rest_cookie_invalid_nonce', __('Invalid nonce.'), array('status' => 403)); } if ( is_multisite() && ! is_super_admin() ) { return new WP_Error('not_allowed', 'Super admin only on multisite.', array('status' => 403)); } return true; } public function jltwp_adminify_get_addons_plugins_list() { $plugins = $this->plugins_list; unset($plugins['master-addons']); $all_plugins = get_plugins(); $active_plugins = get_option('active_plugins'); foreach( $plugins as $slug => $plugin){ foreach ($all_plugins as $plugin_file => $plugin_data) { if (strpos($plugin_file, $slug) !== false) { $plugins[$slug]["status"] = 'installed'; if (in_array($plugin_file, $active_plugins)) { $plugins[$slug]["status"] = 'activated'; } break; } } if( !isset($plugins[$slug]["status"])) $plugins[$slug]["status"] = 'not-installed'; } return rest_ensure_response($plugins); } public function jltwp_adminify_install_addons( $request ) { $addons = $request->get_param('addons'); if ( empty($addons) || !is_array($addons) ) { return new WP_Error('no_addons', 'No addons were selected.', array('status' => 400)); } $plugins_list = $this->jltwp_adminify_get_addons_plugins_list()->data; foreach( $addons as $key => $plugin ){ if($plugins_list[$plugin]['status'] == "activated") continue; if($plugins_list[$plugin]['status'] == "installed") { $this->jltwp_adminify_activate_plugin_by_slug($plugin); continue; } $params = [ 'request_type' => 'rest', 'plugin' => $plugins_list[$plugin]['download_link'], ]; $this->jltwp_adminify_addons_upgrade_plugin($params); } return rest_ensure_response(['message' => 'Addons installed', 'addons' => $addons]); } function jltwp_adminify_activate_plugin_by_slug($slug) { $plugin_path = WP_PLUGIN_DIR . '/' . $slug; if (!is_dir($plugin_path)) { return; } $plugin_files = glob("$plugin_path/*.php"); if (!$plugin_files || empty($plugin_files)) { return; } $main_plugin_file = basename($plugin_files[0]); $plugin_relative_path = $slug . '/' . $main_plugin_file; if (is_plugin_active($plugin_relative_path)) { return; } activate_plugin($plugin_relative_path); } public function maybe_replace_addons_path() { $addons = [ 'sidebar-generator/adminify-sidebar-generator.php' => 'adminify-sidebar-generator/adminify-sidebar-generator.php' ]; foreach ($addons as $old_plugin => $new_plugin) { $old_plugin_path = WP_PLUGIN_DIR . '/' . $old_plugin; $new_plugin_path = WP_PLUGIN_DIR . '/' . $new_plugin; // Both files exist, delete the old one if ( file_exists($old_plugin_path) && file_exists($new_plugin_path) ) { unlink(dirname($old_plugin_path)); continue; } // If the old file exists and the new file doesn't exist, rename the old file to the new file if ( file_exists($old_plugin_path) && !file_exists($new_plugin_path) ) { // check if the old plugin is active include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); $is_active = is_plugin_active( $old_plugin ); if ( $is_active ) { // Deactivate the old plugin deactivate_plugins( $old_plugin ); // Rename the old plugin to the new plugin rename( dirname($old_plugin_path), dirname($new_plugin_path) ); if ( file_exists($new_plugin_path) ) { // Clear the plugin cache wp_cache_delete( 'plugins', 'plugins' ); // Activate the new plugin activate_plugin( $new_plugin ); } } else { // Rename the old plugin to the new plugin rename( dirname($old_plugin_path), dirname($new_plugin_path) ); } } } } /** * Includes * * @author Jewel Theme */ public function includes() { // if (!function_exists('install_plugin_install_status')) { // require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; require_once(ABSPATH . '/wp-load.php'); require_once(ABSPATH . 'wp-admin/includes/plugin-install.php'); require_once(ABSPATH . 'wp-admin/includes/file.php'); require_once(ABSPATH . 'wp-admin/includes/misc.php'); require_once(ABSPATH . 'wp-admin/includes/plugin.php'); require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'); // } } /** * Menu Items * * @author Jewel Theme */ public function menu_items() { return array(); } /** * Plugins list * * @author Jewel Theme */ public function plugins_list() { return array(); } /** * Admin submenu */ public function admin_menu() { } /** * Render addons plugins body */ public function render_addons_plugins() { ?>
header(); ?> body(); ?>
_get_license(); if (!is_object($license) || !$license->is_valid() || !$license->is_active()) return; if ( $this->is_eligible_for_coupon() ) { // Get the coupon $coupon = $this->maybe_create_and_get_coupon(); if (!empty($coupon) && !empty($coupon['code'])) { echo sprintf( __('

Coupon Code: %s 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 redeem coupon code?

', 'adminify'), esc_attr($coupon['code']) ); } } echo ''; } public function is_eligible_for_coupon() { $is_eligible = get_option('wp_adminify_addon__is_eligible_for_coupon', null); if ( $is_eligible !== null ) return wp_validate_boolean($is_eligible); $args = [ 'license' => base64_encode(json_encode(jltwp_adminify()->_get_license())), 'action' => 'check_eligibility' ]; $request_uri = add_query_arg($args, $this->server_url); $response = wp_remote_get($request_uri); if (!is_wp_error($response) && $response['response']['code'] === 200) { $file_contents = wp_remote_retrieve_body($response); $is_eligible = json_decode($file_contents, true); update_option('wp_adminify_addon__is_eligible_for_coupon', wp_validate_boolean($is_eligible)); return $is_eligible; } return false; } public function maybe_delete_corrupted_coupon(){ $coupon_delete_check = get_option('wp_adminify_addon__coupon_is_deleted', false); if($coupon_delete_check != true){ delete_option('wp_adminify_addon__coupon'); update_option('wp_adminify_addon__coupon_is_deleted', true); } } public function maybe_create_and_get_coupon() { $this->maybe_delete_corrupted_coupon(); $coupon = get_option('wp_adminify_addon__coupon'); if (!empty($coupon)) return $coupon; // communicate hit hserver get coupon $args = [ 'license' => base64_encode(json_encode(jltwp_adminify()->_get_license())), 'action' => 'get_coupon' ]; $response = wp_remote_get(add_query_arg($args, $this->server_url)); if (!is_wp_error($response) && $response['response']['code'] === 200) { $file_contents = wp_remote_retrieve_body($response); $response_data = json_decode($file_contents, true); if (!empty($response_data) && is_array($response_data) && !empty($response_data['id']) && !empty($response_data['code']) ) { $coupon = [ 'id' => $response_data['id'], 'code' => $response_data['code'] ]; update_option('wp_adminify_addon__coupon', $coupon); } } return $coupon; } /** * Header */ public function header() { ?>

jltwp_adminify_addons_check(); ?>
plugins(); ?>
plugins_list as $key => $plugin) { $install_status = \install_plugin_install_status($plugin); $classes = implode(' ', $plugin['type']); $more_details = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . esc_attr($plugin['slug']) . '&TB_iframe=true&width=600&height=550' ); ?> */ public function jltwp_adminify_addons_activate_plugin() { if (empty($_POST['plugin'])) { return; } try { $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : ''; if (!wp_verify_nonce($nonce, 'jltwp_adminify_addons_nonce')) { wp_send_json_error(array('mess' => __('Nonce is invalid', 'adminify'))); } // Security check - only administrators can activate plugins if (!current_user_can('activate_plugins')) { wp_send_json_error(array('mess' => __('You do not have permission to perform this action.', 'adminify'))); } $plugin = sanitize_text_field(wp_unslash($_POST['plugin'])); $plugin_links = array_values(wp_list_pluck($this->plugins_list, 'slug')); if (!in_array(dirname($plugin), $plugin_links)) { wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify'))); } $result = activate_plugin($plugin); if (is_wp_error($result)) { wp_send_json_error( array( 'mess' => $result->get_error_message(), ) ); } wp_send_json_success( array( 'mess' => __('Activate success', 'adminify'), ) ); } catch (\Exception $ex) { wp_send_json_error( array( 'mess' => __('Error exception.', 'adminify'), array( 'error' => $ex, ), ) ); } catch (\Error $ex) { wp_send_json_error( array( 'mess' => __('Error.', 'adminify'), array( 'error' => $ex, ), ) ); } } public function get_the_plugin_slug( $plugin ) { // If the plugin is like myplugin/myplugin.php if ( ! filter_var($plugin, FILTER_VALIDATE_URL) ) { return dirname($plugin); } // If the plugin is from wordpress.org if ( false !== strpos( $plugin, 'https://downloads.wordpress.org/plugin/' ) ) { $plugin = str_replace( 'https://downloads.wordpress.org/plugin/', '', $plugin ); return str_replace( '.zip', '', $plugin ); } // If the plugin is from local store $plugin = explode( 'plugin_slug=', $plugin ); $plugin = explode( '&', $plugin[1] ); return $plugin[0]; } /** * Upgrade Plugins required Libraries * * @author Jewel Theme */ public function jltwp_adminify_addons_upgrade_plugin( $params = null ) { if ($params == null && empty($_POST['plugin'])) { return; } try { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php'; require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php'; if($params == null){ $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : ''; if (!wp_verify_nonce($nonce, 'jltwp_adminify_addons_nonce')) { wp_send_json_error(array('mess' => __('Nonce is invalid', 'adminify'))); } $plugin = sanitize_text_field(wp_unslash($_POST['plugin'])); }else{ $plugin = $params['plugin']; } // Security check - only administrators can install plugins if (!current_user_can('install_plugins')) { wp_send_json_error(array('mess' => __('You do not have permission to perform this action.', 'adminify'))); } $plugin_slug = $this->get_the_plugin_slug( $plugin ); if ( ! array_key_exists( $plugin_slug, $this->plugins_list) ) { wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify'))); } if($params == null){ $type = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : 'install'; }else{ $type = 'install'; } $skin = new \WP_Ajax_Upgrader_Skin(); $upgrader = new \Plugin_Upgrader($skin); if ('install' === $type) { $result = $upgrader->install($plugin); if ($params == null){ if (empty($result) || empty($upgrader->result)) { wp_send_json_error( array( 'mess' => 'Something is wrong', ) ); } if (is_wp_error($result)) { wp_send_json_error( array( 'mess' => $result->get_error_message(), ) ); } }else{ if(empty($result) || empty($upgrader->result)){ return; } } $plugins = get_plugins('/' . $upgrader->result['destination_name']); $plugin_data = end($plugins); $plugin_data['slug'] = $upgrader->result['destination_name']; $plugin_data['version'] = $plugin_data['Version']; if (!empty($plugin_data) && !is_wp_error($plugin_data)) { $install_status = \install_plugin_install_status($plugin_data); $active_plugin = activate_plugin($install_status['file']); if ($params == null){ if (is_wp_error($active_plugin)) { wp_send_json_error( array( 'mess' => $active_plugin->get_error_message(), ) ); } else { wp_send_json_success( array( 'mess' => __('Install success', 'adminify'), ) ); } } } else { if ($params == null){ wp_send_json_error( array( 'mess' => 'Error', ) ); } } } else { $is_active = is_plugin_active($plugin); $result = $upgrader->upgrade($plugin); if ($params == null){ if ( empty($result) || is_wp_error($result) ) { wp_send_json_error( array( 'mess' => is_wp_error($result) ? $result->get_error_message() : __('Couldn\'t upgrade', 'adminify') ) ); } } $active_status = activate_plugin($plugin); if ($params == null){ if ( empty($active_status) || is_wp_error($active_status) ) { wp_send_json_error( array( 'mess' => is_wp_error($result) ? $result->get_error_message() : __('Activation Failed', 'adminify') ) ); } wp_send_json_success( array( 'mess' => __('Update success', 'adminify'), 'active' => true, ) ); } } } catch (\Exception $ex) { if ($params == null){ wp_send_json_error( array( 'mess' => __('Error exception.', 'adminify'), array( 'error' => $ex, ), ) ); } } } } }