Current File : /home/pacjaorg/www/copwordpres/wp-content/plugins/betterdocs/includes/Editors/BlockEditor.php
<?php

namespace WPDeveloper\BetterDocs\Editors;

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

use WPDeveloper\BetterDocs\Editors\BlockEditor\Patterns\BasePattern;
use WPDeveloper\BetterDocs\Editors\BlockEditor\StyleHandler;
use WPDeveloper\BetterDocs\Editors\BlockEditor\FontLoader;
use WPDeveloper\BetterDocs\Editors\BlockEditor\TemplatesController;
use WPDeveloper\BetterDocs\Utils\Helper;


class BlockEditor extends BaseEditor {

    public function init() {
        betterdocs()->container->get( TemplatesController::class );

        add_action( 'admin_init', [$this, 'enqueue'] );
        add_action( 'admin_enqueue_scripts', [$this, 'enqueue'] );

        $_blocks_category_hook = version_compare( get_bloginfo( 'version' ), '5.8', '>=' ) ? 'block_categories_all' : 'block_categories';
        add_filter( $_blocks_category_hook, [$this, 'register_category'], 9, 1 );

        StyleHandler::get_instance();
        FontLoader::get_instance();

        $this->register_blocks();

        add_action( 'init', [$this, 'pattern_category'] );

        $this->pattern_initialization();
    }

    /**
     * Pattren category registration.
     * @return void
     */
    public function pattern_category() {
        register_block_pattern_category(
            'batterdocs',
            array( 'label' => __( 'BetterDocs', 'betterdocs' ) )
        );
    }

    /**
     * Get all the Pattrens initialized.
     * @return void
     */
    public function pattern_initialization() {
        $_api_classes = scandir( __DIR__ . DIRECTORY_SEPARATOR . 'BlockEditor' . DIRECTORY_SEPARATOR . 'Patterns' );

        if ( ! empty( $_api_classes ) && is_array( $_api_classes ) ) {
            foreach ( $_api_classes as $class ) {
                if ( $class == '.' || $class == '..' || $class == 'BasePattern.php' || strpos( $class, '.' ) === 0)  {
                    continue;
                }

                $classname  = basename( $class, '.php' );
                $classname  = '\\' . __NAMESPACE__ . "\\BlockEditor\\Patterns\\$classname";
                $patterns_class = betterdocs()->container->get( $classname );

                if ( $patterns_class instanceof BasePattern ) {
                    $patterns_class->pattern_category();
                    $patterns_class->register();
                }
            }
        }
    }

    public function admin_init() {
        $blocks = $this->get_blocks();

        if ( empty( $blocks ) || ! is_array( $blocks ) ) {
            return;
        }

        foreach ( $blocks as $block_name => $block ) {
            if ( isset( $block['object'] ) ) {
                $block_object = betterdocs()->container->get( $block['object'] );

                if ( ! $block_object->can_enable() ) {
                    continue;
                }

                $block_object->register_scripts();
            }
        }
    }

    /**
     * Only for Admin Add/Edit Pages
     */
    public function enqueue( $hook ) {
        $editor = 'core/edit-post';
        if ( $hook == 'site-editor.php' || ( $hook == 'themes.php' && isset( $_GET['page'] ) && $_GET['page'] == 'gutenberg-edit-site' ) ) {
            $editor = 'core/edit-site';
        }

        $this->assets->register( 'betterdocs-blocks-editor-controls', 'blocks/controls.css' );
        $this->assets->register( 'betterdocs-blocks-editor', 'blocks/style-editor.css', ['betterdocs-blocks-editor-controls'] );
        $this->assets->register( 'betterdocs-blocks-editor', 'blocks/editor.js', ['betterdocs-blocks-style-handler'] );
        $this->assets->enqueue( 'betterdocs-blocks-actions', 'blocks/actions.js', [] );
        $this->assets->localize( 'betterdocs-blocks-editor', 'betterDocsBlocksHelper', [
            'is_pro_active' => betterdocs()->is_pro_active(),
            'resturl'       => get_rest_url(),
            'editorType'    => $editor,
            'betterdocs_glossaries' => Helper::get_glossaries(),
        ] );

        if ( $hook == 'post-new.php' || $hook == 'post.php' || $hook == 'site-editor.php' ) {
            $this->assets->enqueue( 'fontpicker-default-theme', 'vendor/css/fonticonpicker.base-theme.react.css' );
            $this->assets->enqueue( 'fontpicker-material-theme', 'vendor/css/fonticonpicker.material-theme.react.css' );
        }
    }

    /**
     * Add a block category
     *
     * @param $block_categories array
     *
     * @return array
     */
    public function register_category( array $block_categories ): array {
        $categories_slugs = wp_list_pluck( $block_categories, 'slug' );

        return in_array( 'betterdocs', $categories_slugs, true ) ? $block_categories : array_merge( [[
            'slug'  => 'betterdocs',
            'title' => __( 'Betterdocs', 'betterdocs' )
        ]], $block_categories );
    }

    /**
     * Get Blocks
     *
     * @since 2.5.0
     * @return array<array>
     */
    public function get_blocks() {
        $config_array = require_once BETTERDOCS_ABSPATH . 'includes/blocks.php';
        return apply_filters( 'betterdocs_blocks_config', $config_array );
    }

    public function register_blocks( $enqueue = false ) {
        $blocks = $this->get_blocks();

        if ( empty( $blocks ) || ! is_array( $blocks ) ) {
            return;
        }

        foreach ( $blocks as $block_name => $block ) {
            if ( isset( $block['object'] ) ) {
                $block_object = betterdocs()->container->get( $block['object'] );

                if ( ! $block_object->can_enable() ) {
                    continue;
                }

                if ( method_exists( $block_object, 'load_dependencies' ) ) {
                    $block_object->load_dependencies();
                }

                if ( $enqueue && method_exists( $block_object, 'enqueue' ) ) {
                    $block_object->enqueue( $this->assets );
                    continue;
                }

                if ( method_exists( $block_object, 'inner_blocks' ) ) {
                    $_inner_blocks = $block_object->inner_blocks();
                    foreach ( $_inner_blocks as $block_name => $block ) {
                        $block->register( $this->assets );
                    }
                }

                $block_object->register( $this->assets );
            }
        }
    }
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!