PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.8.1
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.8.1
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / includes / Editors / BlockEditor.php

BlockEditor.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 3.8.1, at includes/Editors/BlockEditor.php

182 lines 6.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPDeveloper\BetterDocs\Editors;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit; // Exit if accessed directly
7 }
8
9 use WPDeveloper\BetterDocs\Utils\Helper;
10 use WPDeveloper\BetterDocs\Editors\BlockEditor\FontLoader;
11 use WPDeveloper\BetterDocs\Editors\BlockEditor\StyleHandler;
12 use WPDeveloper\BetterDocs\Editors\BlockEditor\TemplatesController;
13 use WPDeveloper\BetterDocs\Editors\BlockEditor\Patterns\BasePattern;
14
15 class BlockEditor extends BaseEditor {
16
17 public function init() {
18 betterdocs()->container->get( TemplatesController::class );
19
20 add_action( 'admin_init', [$this, 'enqueue'] );
21 add_action( 'admin_enqueue_scripts', [$this, 'enqueue'] );
22
23 $_blocks_category_hook = version_compare( get_bloginfo( 'version' ), '5.8', '>=' ) ? 'block_categories_all' : 'block_categories';
24 add_filter( $_blocks_category_hook, [$this, 'register_category'], 9, 1 );
25
26 StyleHandler::get_instance();
27 FontLoader::get_instance();
28
29 $this->register_blocks();
30
31 add_action( 'init', [$this, 'pattern_category'] );
32
33 $this->pattern_initialization();
34 }
35
36 /**
37 * Pattren category registration.
38 * @return void
39 */
40 public function pattern_category() {
41 register_block_pattern_category(
42 'batterdocs',
43 [ 'label' => __( 'BetterDocs', 'betterdocs' ) ]
44 );
45 }
46
47 /**
48 * Get all the Pattrens initialized.
49 * @return void
50 */
51 public function pattern_initialization() {
52 $_api_classes = scandir( __DIR__ . DIRECTORY_SEPARATOR . 'BlockEditor' . DIRECTORY_SEPARATOR . 'Patterns' );
53
54 if ( ! empty( $_api_classes ) && is_array( $_api_classes ) ) {
55 foreach ( $_api_classes as $class ) {
56 if ( $class == '.' || $class == '..' || $class == 'BasePattern.php' || strpos( $class, '.' ) === 0 ) {
57 continue;
58 }
59
60 $classname = basename( $class, '.php' );
61 $classname = '\\' . __NAMESPACE__ . "\\BlockEditor\\Patterns\\$classname";
62 $patterns_class = betterdocs()->container->get( $classname );
63
64 if ( $patterns_class instanceof BasePattern ) {
65 $patterns_class->pattern_category();
66 $patterns_class->register();
67 }
68 }
69 }
70 }
71
72 public function admin_init() {
73 $blocks = $this->get_blocks();
74
75 if ( empty( $blocks ) || ! is_array( $blocks ) ) {
76 return;
77 }
78
79 foreach ( $blocks as $block_name => $block ) {
80 if ( isset( $block['object'] ) ) {
81 $block_object = betterdocs()->container->get( $block['object'] );
82
83 if ( ! $block_object->can_enable() ) {
84 continue;
85 }
86
87 $block_object->register_scripts();
88 }
89 }
90 }
91
92 /**
93 * Only for Admin Add/Edit Pages
94 */
95 public function enqueue( $hook ) {
96 $editor = 'core/edit-post';
97 if ( $hook == 'site-editor.php' || ( $hook == 'themes.php' && isset( $_GET['page'] ) && $_GET['page'] == 'gutenberg-edit-site' ) ) {
98 $editor = 'core/edit-site';
99 }
100
101 $this->assets->register( 'betterdocs-blocks-editor-controls', 'blocks/controls.css' );
102 $this->assets->register( 'betterdocs-blocks-editor', 'blocks/style-editor.css', ['betterdocs-blocks-editor-controls'] );
103 $this->assets->register( 'betterdocs-blocks-editor', 'blocks/editor.js', ['betterdocs-blocks-style-handler'] );
104 $this->assets->enqueue( 'betterdocs-blocks-actions', 'blocks/actions.js', [] );
105 $this->assets->localize( 'betterdocs-blocks-editor', 'betterDocsBlocksHelper', [
106 'is_pro_active' => betterdocs()->is_pro_active(),
107 'resturl' => get_rest_url(),
108 'editorType' => $editor,
109 'betterdocs_glossaries' => Helper::get_glossaries(),
110 'docsIcon' => isset( betterdocs()->settings->get( 'docs_list_icon' )['url'] ) ? betterdocs()->settings->get( 'docs_list_icon' )['url'] : ''
111 ] );
112
113 if ( $hook == 'post-new.php' || $hook == 'post.php' || $hook == 'site-editor.php' ) {
114 $this->assets->enqueue( 'fontpicker-default-theme', 'vendor/css/fonticonpicker.base-theme.react.css' );
115 $this->assets->enqueue( 'fontpicker-material-theme', 'vendor/css/fonticonpicker.material-theme.react.css' );
116 }
117 }
118
119 /**
120 * Add a block category
121 *
122 * @param $block_categories array
123 *
124 * @return array
125 */
126 public function register_category( array $block_categories ): array {
127 $categories_slugs = wp_list_pluck( $block_categories, 'slug' );
128
129 return in_array( 'betterdocs', $categories_slugs, true ) ? $block_categories : array_merge( [[
130 'slug' => 'betterdocs',
131 'title' => __( 'Betterdocs', 'betterdocs' )
132 ]], $block_categories );
133 }
134
135 /**
136 * Get Blocks
137 *
138 * @since 2.5.0
139 * @return array<array>
140 */
141 public function get_blocks() {
142 $config_array = require_once BETTERDOCS_ABSPATH . 'includes/blocks.php';
143 return apply_filters( 'betterdocs_blocks_config', $config_array );
144 }
145
146 public function register_blocks( $enqueue = false ) {
147 $blocks = $this->get_blocks();
148
149 if ( empty( $blocks ) || ! is_array( $blocks ) ) {
150 return;
151 }
152
153 foreach ( $blocks as $block_name => $block ) {
154 if ( isset( $block['object'] ) ) {
155 $block_object = betterdocs()->container->get( $block['object'] );
156
157 if ( ! $block_object->can_enable() ) {
158 continue;
159 }
160
161 if ( method_exists( $block_object, 'load_dependencies' ) ) {
162 $block_object->load_dependencies();
163 }
164
165 if ( $enqueue && method_exists( $block_object, 'enqueue' ) ) {
166 $block_object->enqueue( $this->assets );
167 continue;
168 }
169
170 if ( method_exists( $block_object, 'inner_blocks' ) ) {
171 $_inner_blocks = $block_object->inner_blocks();
172 foreach ( $_inner_blocks as $block_name => $block ) {
173 $block->register( $this->assets );
174 }
175 }
176
177 $block_object->register( $this->assets );
178 }
179 }
180 }
181 }
182