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

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