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

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