PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.1
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.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 / Blocks / Sidebar.php

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

169 lines 7.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // phpcs:disable WordPress.DB.SlowDBQuery.slow_db_query_meta_query,WordPress.DB.SlowDBQuery.slow_db_query_meta_key,WordPress.DB.SlowDBQuery.slow_db_query_tax_query -- core block query; meta/tax filtering required.
3 namespace WPDeveloper\BetterDocs\Editors\BlockEditor\Blocks;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit;
7 }
8
9
10 use WPDeveloper\BetterDocs\Editors\BlockEditor\Block;
11
12 class Sidebar extends Block {
13
14 public $view_wrapper = 'betterdocs-toc-block';
15
16 protected $editor_styles = [
17 'betterdocs-sidebar',
18 'betterdocs-search-modal',
19 'betterdocs-extend-search-modal'
20 ];
21
22 protected $frontend_styles = [
23 'betterdocs-sidebar',
24 'betterdocs-fontawesome'
25 ];
26
27 protected $frontend_scripts = [
28 'betterdocs',
29 'betterdocs-category-grid',
30 'betterdocs-search-modal'
31 ];
32
33 public function get_name() {
34 return 'sidebar';
35 }
36
37 public function register_scripts() {
38 if( is_admin() ){ // load for wordpress admin panel only
39 if ( function_exists( 'betterdocs_pro' ) && betterdocs_pro()->assets != null ) { // get the sidebar modal on gutenberg edit mode
40 betterdocs_pro()->assets->enqueue( 'betterdocs-extend-search-modal', 'public/js/extend-search-modal.js', [] );
41 }
42 $this->assets_manager->enqueue(
43 'betterdocs-search-modal',
44 'shortcodes/js/search-modal.js',
45 [ 'jquery' ]
46 );
47 }
48 }
49
50 public function get_default_attributes() {
51 return [
52 'blockId' => '',
53 'sidebar_layout' => 'layout-1',
54 'selectKB' => '',
55 'includeCategories' => '',
56 'excludeCategories' => '',
57 'terms_per_page' => -1,
58 'terms_order' => 'asc',
59 'terms_orderby' => 'doc_category_order',
60 'docs_per_page' => -1,
61 'postsOrderBy' => 'title',
62 'postsOrder' => 'asc',
63 'enableNestedSubcategory' => false,
64 // Default follows the global "Lazy Load Sidebar Docs & Subcategories"
65 // setting, mirroring the Elementor sidebar widget's control default, so
66 // enabling the setting lazy-loads the block too unless overridden.
67 'enableLazyLoad' => (bool) betterdocs()->settings->get( 'archive_lazy_load_descendants' ),
68 'docs_per_subcategory' => 10,
69 'titleTag' => 'h1',
70 'show_count' => false,
71 'enableStickyTOC' => false,
72 'listIcon' => '',
73 'listIconImageUrl' => '',
74 'initialDocsQueryNumber' => 5,
75 'initialFAQQueryNumber' => 5,
76 'searchModalQueryTermIds' => '', //for search modal
77 'searchModalQueryDocIds' => '', //for search modal
78 'searchModalQueriesFaqGroupIds' => ''
79 ];
80 }
81
82 public function render( $attributes, $content ) {
83 $layout = isset( $this->attributes['sidebar_layout'] ) ? $this->attributes['sidebar_layout'] : 'layout-1';
84 $layout = str_replace( 'layout-', '', $layout );
85 $layout_mapper = [
86 1 => 1,
87 2 => 4,
88 3 => 5,
89 4 => 2,
90 5 => 3,
91 6 => 6,
92 7 => 7,
93 8 => 8,
94 ];
95 $sidebar_layout = isset( $layout_mapper[ $layout ] ) ? $layout_mapper[ $layout ] : 1;
96
97 if ( ! betterdocs()->is_pro_active() ) {
98 $sidebar_layout = 1;
99 }
100
101 add_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10, 1 );
102 $this->views( 'templates/sidebars/sidebar-' . $sidebar_layout );
103 if ( $this->attributes['enableStickyTOC'] && $sidebar_layout == 1 ) {
104 $this->views( 'widgets/sticky-toc-block' );
105 }
106 remove_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10 );
107 }
108
109 public function filter_base_args( $term_args ) {
110 if ( $term_args['orderby'] == 'doc_category_order' ) {
111 $term_args['meta_key'] = 'doc_category_order';
112 $term_args['orderby'] = 'meta_value_num';
113 }
114 return $term_args;
115 }
116
117 public function view_params() {
118 $settings = &$this->attributes;
119
120 $default_multiple_kb = betterdocs()->settings->get( 'multiple_kb' );
121 $kb_slug = ! empty( $settings['selectKB'] ) && isset( $settings['selectKB'] ) ? json_decode( $settings['selectKB'] )->value : '';
122 $layout_seven_params = [];
123
124 if ( $settings['sidebar_layout'] == 'layout-1' || $settings['sidebar_layout'] == 'layout-6' || $settings['sidebar_layout'] == 'layout-7' ) {
125 $settings['show_count'] = true;
126 }
127
128 $default_view_params = [
129 'shortcode_attr' => [
130 'terms_order' => $settings['terms_order'],
131 'terms_orderby' => $settings['terms_orderby'] == 'doc_category_order' ? 'betterdocs_order' : $settings['terms_orderby'],
132 'terms_include' => array_diff( $this->string_to_array( $settings['includeCategories'] ), $this->string_to_array( $settings['excludeCategories'] ) ),
133 'terms_exclude' => isset( $settings['excludeCategories'] ) ? $this->string_to_array( $settings['excludeCategories'] ) : '',
134 'nested_subcategory' => $settings['enableNestedSubcategory'],
135 'lazy_load' => ! empty( $settings['enableLazyLoad'] ),
136 'sidebar_list' => true,
137 'list_icon_url' => '',
138 'list_icon_name' => $settings['sidebar_layout'] == 'layout-4' ? '' : ( ! empty( $this->attributes['listIconImageUrl'] ) ? $this->attributes['listIconImageUrl'] : ( ! empty( $this->attributes['listIcon'] ) ? $this->attributes['listIcon'] : ( ! empty( betterdocs()->settings->get( 'docs_list_icon' ) ) ? betterdocs()->settings->get( 'docs_list_icon' )['url'] : 'list' ) ) ),
139 'layout_type' => 'block',
140 'disable_customizer_style' => true,
141 'posts_per_page' => -1,
142 'title_tag' => $settings['titleTag'],
143 'show_count' => $settings['show_count'],
144 'orderby' => $settings['postsOrderBy'],
145 'order' => $settings['postsOrder']
146 ]
147 ];
148
149 if ( $settings['sidebar_layout'] == 'layout-7' ) {
150 $default_view_params['number_of_docs'] = $settings['initialDocsQueryNumber'];
151 $default_view_params['number_of_faqs'] = $settings['initialFAQQueryNumber'];
152 $default_view_params['faq_term_ids'] = $settings['searchModalQueriesFaqGroupIds'];
153 $default_view_params['doc_ids'] = $settings['searchModalQueryDocIds'];
154 $default_view_params['doc_term_ids'] = $settings['searchModalQueryTermIds'];
155 }
156
157 // Pass a KB scope only when one is explicitly selected on the block. When none is
158 // set, omit kb_slug so the betterdocs_sidebar_template_shortcode_params filter
159 // (Pro/MKB) can inject the current knowledge_base context on KB templates — the
160 // same path the default sidebar uses. (Passing kb_slug='' would block injection.)
161 if ( ! empty( $kb_slug ) ) {
162 $default_view_params['shortcode_attr']['kb_slug'] = $kb_slug;
163 $default_view_params['shortcode_attr']['multiple_knowledge_base'] = (bool) $default_multiple_kb;
164 }
165
166 return $default_view_params;
167 }
168 }
169