'Invalid nonce or request.'], 400); } if (!current_user_can('manage_options')) { wp_send_json_error(['message' => 'Insufficient permissions.'], 403); } if ( !function_exists( 'plugins_api' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; } $cached_plugins = plugins_api( 'query_plugins', array( 'author' => 'bplugins', 'per_page' => 100 ) ); wp_send_json_success($cached_plugins->plugins); } public function get_active_plugins() { if (!isset($_GET['nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['nonce'])), 'wp_ajax')) { wp_send_json_error(['message' => 'Invalid nonce or request.'], 400); } if (!current_user_can('manage_options')) { wp_send_json_error(['message' => 'Insufficient permissions.'], 403); } // Get the list of all installed plugins if (!function_exists('get_plugins')) { include_once ABSPATH . '/wp-admin/includes/plugin.php'; } $installed_plugins = get_plugins(); // Return the plugin basenames as an array $installed_plugin_slugs = array_keys($installed_plugins); wp_send_json_success($installed_plugin_slugs); } public function display_activation_notice() { // Check if transient is set $plugin_slug = get_transient('bblocks_show_activation_notice'); $first_part = explode("/", $plugin_slug)[0]; $cleaned_string = str_replace("-", " ", $first_part); if ($plugin_slug) { // Remove transient after displaying the notice delete_transient('bblocks_show_activation_notice'); // Generate activation URL $activation_url = wp_nonce_url( admin_url('plugins.php?action=activate&plugin=' . $plugin_slug), 'activate-plugin_' . $plugin_slug ); // Display notice with activation button ?>

'Invalid nonce or request.'], 400); } if (!current_user_can('install_plugins')) { wp_send_json_error(['message' => 'Insufficient permissions.'], 403); } $plugin_name = sanitize_text_field($_GET['plugin_name'] ?? ''); include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; try { // Fetch plugin information $api = plugins_api('plugin_information', ['slug' => $plugin_name, 'fields' => ['sections' => false]]); if (is_wp_error($api)) { wp_send_json_error(['message' => 'Failed to fetch plugin information.']); } // Suppress unexpected output ob_start(); $upgrader = new Plugin_Upgrader(); $result = $upgrader->install($api->download_link); ob_end_clean(); $plugin_slug = "{$plugin_name}/{$plugin_name}.php"; if ($result) { // Set transient to show notice set_transient('bblocks_show_activation_notice', $plugin_slug, 1000000); // Valid for 60 seconds $redirect_url = admin_url('plugins.php?plugin_status=all'); wp_send_json_success(['message' => 'Plugin installed successfully.', 'redirectUrl' => $redirect_url]); } else { wp_send_json_error(['message' => 'Plugin installation failed.']); } } catch (Exception $e) { wp_send_json_error(['message' => 'An unexpected error occurred: ' . $e->getMessage()]); } } public function bBlocksDisabledBlocks(){ $nonce = sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ?? '' ) ); if( !wp_verify_nonce( $nonce, 'wp_ajax' )){ wp_send_json_error( 'Invalid Request' ); } if (!current_user_can('manage_options')) { wp_send_json_error( 'Unauthorized' ); } $raw = isset( $_POST['data'] ) ? wp_unslash( $_POST['data'] ) : null; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- sanitized below after json_decode $data = is_string( $raw ) ? json_decode( $raw, true ) : null; $db_data = get_option( 'bBlocksDisabledBlocks', [] ); if ( ! isset( $data ) && $db_data ) { wp_send_json_success( $db_data ); } // Sanitize: the value is an array of block-name strings (e.g. "b-blocks/alert"). if ( is_array( $data ) ) { $data = array_map( 'sanitize_text_field', $data ); } else { $data = []; } update_option( 'bBlocksDisabledBlocks', $data ); wp_send_json_success( $data ); // AI generated // if ( isset( $_POST['data'] ) ) { // $data = json_decode( stripslashes( $_POST['data'] ), true ); // update_option( 'bBlocksDisabledBlocks', $data ); // wp_send_json_success( $data ); // } // $db_data = get_option( 'bBlocksDisabledBlocks', [] ); // wp_send_json_success( $db_data ); } function adminEnqueueScripts( $hook ) { if( str_contains( $hook, 'b-blocks' ) ){ wp_enqueue_media(); wp_enqueue_style( 'b-blocks-dashboard-style', B_BLOCKS_BUILD . 'admin-dashboard.css', ['wp-components','wp-edit-blocks','wp-block-editor'], B_BLOCKS_VERSION ); wp_enqueue_script( 'b-blocks-dashboard-script', B_BLOCKS_BUILD . 'admin-dashboard.js', [ 'react', 'react-dom', 'wp-api', 'wp-util', 'wp-data', 'wp-components', 'wp-i18n', 'lodash', 'wp-media-utils', 'wp-core-data', 'wp-api-request', 'wp-element', 'wp-edit-post', 'wp-block-editor' ], B_BLOCKS_VERSION, true ); wp_localize_script( 'b-blocks-dashboard-script', 'pluginAction', [ 'ajaxUrl' => admin_url('admin-ajax.php'), ]); } } function adminMenu() { $menuIcon = " "; add_menu_page( __( 'bBlocks', 'b-blocks' ), __( 'bBlocks', 'b-blocks' ), 'manage_options', 'b-blocks', '', 'data:image/svg+xml;base64,' . base64_encode( $menuIcon ), 20 ); add_submenu_page( 'b-blocks', __( 'Dashboard', 'b-blocks' ), __( 'Dashboard', 'b-blocks' ), 'manage_options', 'b-blocks', [$this, 'dashboardPage'] ); } function dashboardPage(){ ?>
B_BLOCKS_VERSION, 'nonce' => wp_create_nonce( 'wp_ajax' ), 'dirUrl' => B_BLOCKS_DIR_URL, 'isPremium' => Utils::isPro(), 'hasPro' => B_BLOCKS_HAS_PRO, 'licenseActiveNonce' => wp_create_nonce("bBlocksLicenseActivation") ]) ); ?>'>