PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.4.0
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.4.0
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 4.4.0, at includes/Editors/BlockEditor.php

191 lines 5.6 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' ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
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(
106 'betterdocs-blocks-editor',
107 'betterDocsBlocksHelper',
108 array_merge([
109 'is_pro_active' => betterdocs()->is_pro_active(),
110 'resturl' => get_rest_url(),
111 'editorType' => $editor,
112 'betterdocs_glossaries' => Helper::get_glossaries(),
113 'docsIcon' => isset( betterdocs()->settings->get( 'docs_list_icon' )['url'] ) ? betterdocs()->settings->get( 'docs_list_icon' )['url'] : ''
114 ], betterdocs()->settings->chatbot_active_localize())
115 );
116
117 if ( $hook == 'post-new.php' || $hook == 'post.php' || $hook == 'site-editor.php' ) {
118 $this->assets->enqueue( 'fontpicker-default-theme', 'vendor/css/fonticonpicker.base-theme.react.css' );
119 $this->assets->enqueue( 'fontpicker-material-theme', 'vendor/css/fonticonpicker.material-theme.react.css' );
120 }
121 }
122
123 /**
124 * Add a block category
125 *
126 * @param $block_categories array
127 *
128 * @return array
129 */
130 public function register_category( array $block_categories ): array {
131 $categories_slugs = wp_list_pluck( $block_categories, 'slug' );
132
133 return in_array( 'betterdocs', $categories_slugs, true ) ? $block_categories : array_merge(
134 [
135 [
136 'slug' => 'betterdocs',
137 'title' => __( 'Betterdocs', 'betterdocs' )
138 ]
139 ],
140 $block_categories
141 );
142 }
143
144 /**
145 * Get Blocks
146 *
147 * @since 2.5.0
148 * @return array<array>
149 */
150 public function get_blocks() {
151 $config_array = require_once BETTERDOCS_ABSPATH . 'includes/blocks.php';
152 return apply_filters( 'betterdocs_blocks_config', $config_array );
153 }
154
155 public function register_blocks( $enqueue = false ) {
156 $blocks = $this->get_blocks();
157
158 if ( empty( $blocks ) || ! is_array( $blocks ) ) {
159 return;
160 }
161
162 foreach ( $blocks as $block_name => $block ) {
163 if ( isset( $block['object'] ) ) {
164 $block_object = betterdocs()->container->get( $block['object'] );
165
166 if ( ! $block_object->can_enable() ) {
167 continue;
168 }
169
170 if ( method_exists( $block_object, 'load_dependencies' ) ) {
171 $block_object->load_dependencies();
172 }
173
174 if ( $enqueue && method_exists( $block_object, 'enqueue' ) ) {
175 $block_object->enqueue( $this->assets );
176 continue;
177 }
178
179 if ( method_exists( $block_object, 'inner_blocks' ) ) {
180 $_inner_blocks = $block_object->inner_blocks();
181 foreach ( $_inner_blocks as $block_name => $block ) {
182 $block->register( $this->assets );
183 }
184 }
185
186 $block_object->register( $this->assets );
187 }
188 }
189 }
190 }
191