# maxi-blocks/trunk/plugin.php

MaxiBlocks Builder | 17,000+ Design Assets, Patterns, Icons &amp; Starter Sites, version trunk. 410 lines.

- Page: https://pluginprobe.com/plugins/maxi-blocks/trunk/code/plugin.php
- Raw: https://pluginprobe.com/plugins/maxi-blocks/trunk/raw/plugin.php
- Modified: 2026-09-02T10:39:10+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/maxi-blocks/trunk/code/plugin.php#L10-L20`.

```php
<?php

/**
 * Plugin Name: MaxiBlocks
 * Plugin URI: https://maxiblocks.com/
 * Description: A powerful page builder for WordPress Gutenberg with a vast library of free web templates, icons & patterns. Open source and free to build. Anything you create with MaxiBlocks is yours to keep. There's no lock-in, no domain restrictions or license keys to keep track of. All blocks and features are free to use. Save time, get advanced designs & more with the Pro cloud library upgrade.
 * Author: MaxiBlocks
 * Author URI: https://maxiblocks.com/go/plugin-author
 * Version: 2.2.3
 * Requires at least: 6.3
 * Requires PHP: 8.0
 * License: GPLv3 or later
 * License URI: https://www.gnu.org/licenses/gpl-3.0.txt
 * Text Domain: maxi-blocks
 * Domain Path: /languages
 */

// Exit if accessed directly.
if (!defined('ABSPATH')) {
    exit();
}

define('MAXI_PLUGIN_DIR_PATH', plugin_dir_path(__FILE__));
define('MAXI_PLUGIN_DIR_FILE', __FILE__);
define('MAXI_PLUGIN_URL_PATH', plugin_dir_url(__FILE__));
define(
    'MAXI_PLUGIN_VERSION',
    get_file_data(__FILE__, ['Version' => 'Version'], false)['Version'],
);
// Define the required MySQL version.
define('REQUIRED_MYSQL_VERSION', '8.0');
define('REQUIRED_MARIADB_VERSION', '10.4');

// Load Composer dependencies when available.
$maxi_autoload_path = MAXI_PLUGIN_DIR_PATH . 'vendor/autoload.php';
if (file_exists($maxi_autoload_path)) {
    require_once $maxi_autoload_path;
}

//======================================================================
// Translations
//======================================================================
add_action('init', 'maxi_load_textdomain');

function maxi_load_textdomain()
{
    // phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- required to load bundled .mo translation files not hosted on WordPress.org
    load_plugin_textdomain(
        'maxi-blocks',
        false,
        dirname(plugin_basename(__FILE__)) . '/languages',
    );
}

function maxi_load_translations($mofile, $domain)
{
    if ('maxi-blocks' === $domain) {
        $locale = apply_filters('plugin_locale', determine_locale(), $domain);

        $mofile_new =
            WP_PLUGIN_DIR .
            '/' .
            dirname(plugin_basename(__FILE__)) .
            '/languages/' .
            $domain .
            '-' .
            $locale .
            '.mo';

        // Check if the new MO file exists
        if (file_exists($mofile_new)) {
            return $mofile_new;
        }
    }
    return $mofile;
}
add_filter('load_textdomain_mofile', 'maxi_load_translations', 10, 2);

//======================================================================
// Plugin action links
//======================================================================
function maxi_blocks_add_settings_link($links)
{
    $settings_url = is_network_admin()
        ? network_admin_url('admin.php?page=maxi-blocks-dashboard')
        : admin_url('admin.php?page=maxi-blocks-dashboard&tab=maxi_blocks_settings');
    $settings_link =
        '<a href="' .
        esc_url($settings_url) .
        '">' .
        esc_html__('Settings', 'maxi-blocks') .
        '</a>';

    array_unshift($links, $settings_link);

    return $links;
}
add_filter(
    'plugin_action_links_' . plugin_basename(__FILE__),
    'maxi_blocks_add_settings_link',
);

//======================================================================
// Database version check
//======================================================================
// Hook for checking the database version in the admin area
add_action('admin_init', 'maxi_check_database_version');

/**
 * Check the required database version during admin initialization
 */
function maxi_check_database_version()
{
    global $wpdb;

    // Check if the database is MariaDB
    $isMariaDB = strpos(strtolower($wpdb->db_server_info()), 'maria') !== false;
    $requiredVersion = $isMariaDB
        ? REQUIRED_MARIADB_VERSION
        : REQUIRED_MYSQL_VERSION;

    // Compare the current database version with the required version
    if (version_compare($wpdb->db_version(), $requiredVersion, '<')) {
        $plugin_file = plugin_basename(__FILE__);
        add_action(
            "after_plugin_row_{$plugin_file}",
            'maxi_show_database_version_notice',
            10,
            3,
        );
        add_action(
            'admin_enqueue_scripts',
            'maxi_blocks_enqueue_notice_scripts',
        );
    }
}

/**
 * Enqueue JavaScript for the admin notice
 */
function maxi_blocks_enqueue_notice_scripts()
{
    wp_enqueue_script(
        'maxi-blocks-admin-notice',
        plugins_url('/core/admin/notices.js', __FILE__),
        [],
        MAXI_PLUGIN_VERSION,
        true,
    );

    // Localize script with REST API URL and nonce
    wp_localize_script('maxi-blocks-admin-notice', 'maxiBlocks', [
        'rest_url' => rest_url('maxi-blocks/v1/dismiss-notice'),
        'nonce' => wp_create_nonce('wp_rest'),
    ]);
}

/**
 * Show an admin notice under the plugin's name if the required database version is not met
 */
function maxi_show_database_version_notice()
{
    if (get_option('maxi_blocks_db_notice_dismissed') === 'yes') {
        return;
    }

    global $wpdb;
    $isMariaDB = strpos(strtolower($wpdb->db_server_info()), 'maria') !== false;
    $requiredVersion = $isMariaDB
        ? REQUIRED_MARIADB_VERSION
        : REQUIRED_MYSQL_VERSION;
    $databaseType = $isMariaDB ? 'MariaDB' : 'MySQL';
    $message =
        sprintf(
            /* translators: %1$s: database type, %2$s: required version, %3$s: link URL */
            esc_html__(
                'Highly recommend to update to %1$s %2$s+ for enhanced security, better performance, and full feature compatibility.',
                'maxi-blocks',
            ),
            esc_html($databaseType),
            esc_html($requiredVersion),
        ) .
        ' <a href="' .
        esc_url('https://maxiblocks.com/go/database-version-requirements') .
        '" target="_blank">' .
        esc_html__('Learn more', 'maxi-blocks') .
        '</a>';

    echo '<tr class="plugin-update-tr active maxi-blocks-db-notice" data-slug="maxi-blocks" data-plugin="maxi-blocks/plugin.php">';
    echo '<td colspan="4" class="plugin-update colspanchange">';
    echo '<div class="update-message notice inline notice-warning notice-alt is-dismissible"><p>';
    echo wp_kses_post($message);
    echo '</p></div></td></tr>';
}

/**
 * Register REST API endpoint for dismissing the notice
 */
function maxi_blocks_register_rest_route()
{
    register_rest_route('maxi-blocks/v1', '/dismiss-notice', [
        'methods' => 'POST',
        'callback' => 'maxi_blocks_dismiss_notice',
        'permission_callback' => function () {
            return current_user_can('manage_options');
        },
    ]);
}
add_action('rest_api_init', 'maxi_blocks_register_rest_route');

/**
 * Dismiss the notice and update the option in the database
 */
function maxi_blocks_dismiss_notice()
{
    update_option('maxi_blocks_db_notice_dismissed', 'yes');
    return new WP_REST_Response(null, 204);
}

function maxi_blocks_after_update($upgrader_object, $options)
{
    // Check if required keys exist in the options array
    if (
        !isset($options['action']) ||
        !isset($options['type']) ||
        !isset($options['plugins'])
    ) {
        return;
    }
    // Check if it's an update of plugins
    if ($options['action'] == 'update' && $options['type'] == 'plugin') {
        // Check if YOUR plugin is in the list of updated plugins
        foreach ($options['plugins'] as $plugin) {
            if ($plugin == plugin_basename(__FILE__)) {
                // Reset the dismissal option
                update_option('maxi_blocks_db_notice_dismissed', 'no');
                break;
            }
        }
    }
}
add_action('upgrader_process_complete', 'maxi_blocks_after_update', 10, 2);

//======================================================================
// Init
//======================================================================

require_once MAXI_PLUGIN_DIR_PATH . 'core/admin/maxi-allowed-html-tags.php';

// remove noopener noreferrer from gutenberg links
function maxi_links_control($rel, $link)
{
    return false;
}
add_filter('wp_targeted_link_rel', 'maxi_links_control', 10, 2);
add_action('wp_ajax_maxi_get_option', 'maxi_get_option', 9, 1);

//======================================================================
// MaxiBlocks Core
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-core.php';
if (class_exists('MaxiBlocks_Core')) {
    MaxiBlocks_Core::register();
}

//======================================================================
// MaxiBlocks Custom Scripts
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-custom-scripts.php';
if (class_exists('MaxiBlocks_Custom_Scripts')) {
    MaxiBlocks_Custom_Scripts::register();
}

//======================================================================
// MaxiBlocks DB
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-db.php';
if (class_exists('MaxiBlocks_DB')) {
    MaxiBlocks_DB::register();
}

//======================================================================
// MaxiBlocks Blocks
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-blocks.php';
if (class_exists('MaxiBlocks_Blocks')) {
    MaxiBlocks_Blocks::register();
}

//======================================================================
// MaxiBlocks Styles
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-styles.php';
if (class_exists('MaxiBlocks_Styles')) {
    MaxiBlocks_Styles::register();
}

//======================================================================
// MaxiBlocks Style Cards
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-style-cards.php';
if (class_exists('MaxiBlocks_StyleCards')) {
    MaxiBlocks_StyleCards::register();
}

//======================================================================
// MaxiBlocks Custom Fonts
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-custom-fonts.php';

//======================================================================
// MaxiBlocks Image Crop
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-image-crop.php';
if (class_exists('MaxiBlocks_ImageCrop')) {
    MaxiBlocks_ImageCrop::register();
}

//======================================================================
// MaxiBlocks API
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-api.php';
MaxiBlocks_API::register();
if (class_exists('MaxiBlocks_API')) {
    add_action('plugins_loaded', ['MaxiBlocks_API', 'register']);
}

//======================================================================
// MaxiBlocks Page Template
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-page-template.php';
if (class_exists('MaxiBlocks_PageTemplate')) {
    add_action('plugins_loaded', ['MaxiBlocks_PageTemplate', 'register']);
}

//======================================================================
// MaxiBlocks Dashboard
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/admin/class-maxi-dashboard.php';
if (class_exists('MaxiBlocks_Dashboard')) {
    MaxiBlocks_Dashboard::register();
}

//======================================================================
// MaxiBlocks Dynamic Content
//======================================================================
require_once MAXI_PLUGIN_DIR_PATH . 'core/class-maxi-dynamic-content.php';
if (class_exists('MaxiBlocks_DynamicContent')) {
    MaxiBlocks_DynamicContent::register();
}

//======================================================================
// MaxiBlocks Go
//======================================================================
if (get_template() === 'maxiblocks-go') {
    $theme_version = wp_get_theme('maxiblocks-go')->get('Version');

    if (version_compare($theme_version, '1.2.1', '>=')) {
        require_once MAXI_PLUGIN_DIR_PATH .
            'core/maxiblocks-go/maxiblocks-go.php';
    }
}

//======================================================================
// MaxiBlocks Onboarding
//======================================================================
// Check if we're in a test environment using .env file
$is_test_environment = false;
$env_file = dirname(__FILE__) . '/.env';

if (file_exists($env_file)) {
    $env_config = @parse_ini_file($env_file);
    if ($env_config !== false) {
        $is_test_environment =
            isset($env_config['GITHUB_ENV_TEST']) &&
            in_array(
                $env_config['GITHUB_ENV_TEST'],
                [1, '1', true, 'true'],
                true,
            );
    }
}

if (!$is_test_environment) {
    require_once MAXI_PLUGIN_DIR_PATH .
        'core/class-maxi-quick-start-register.php';
    if (class_exists('MaxiBlocks_QuickStart_Register')) {
        MaxiBlocks_QuickStart_Register::register();

        // Register activation hook
        register_activation_hook(__FILE__, [
            'MaxiBlocks_QuickStart_Register',
            'activate',
        ]);

        // Handle redirect after activation
        add_action('admin_init', function () {
            if (get_transient('maxi_blocks_activation_redirect')) {
                delete_transient('maxi_blocks_activation_redirect');
                if (!isset($_GET['activate-multi'])) {
                    wp_safe_redirect(
                        admin_url('admin.php?page=maxi-blocks-quick-start'),
                    );
                    exit();
                }
            }
        });
    }
}

```
