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 / Blocks / Sidebar.php

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

166 lines 7.0 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 'enableLazyLoad' => false,
65 'docs_per_subcategory' => 10,
66 'titleTag' => 'h1',
67 'show_count' => false,
68 'enableStickyTOC' => false,
69 'listIcon' => '',
70 'listIconImageUrl' => '',
71 'initialDocsQueryNumber' => 5,
72 'initialFAQQueryNumber' => 5,
73 'searchModalQueryTermIds' => '', //for search modal
74 'searchModalQueryDocIds' => '', //for search modal
75 'searchModalQueriesFaqGroupIds' => ''
76 ];
77 }
78
79 public function render( $attributes, $content ) {
80 $layout = isset( $this->attributes['sidebar_layout'] ) ? $this->attributes['sidebar_layout'] : 'layout-1';
81 $layout = str_replace( 'layout-', '', $layout );
82 $layout_mapper = [
83 1 => 1,
84 2 => 4,
85 3 => 5,
86 4 => 2,
87 5 => 3,
88 6 => 6,
89 7 => 7,
90 8 => 8,
91 ];
92 $sidebar_layout = isset( $layout_mapper[ $layout ] ) ? $layout_mapper[ $layout ] : 1;
93
94 if ( ! betterdocs()->is_pro_active() ) {
95 $sidebar_layout = 1;
96 }
97
98 add_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10, 1 );
99 $this->views( 'templates/sidebars/sidebar-' . $sidebar_layout );
100 if ( $this->attributes['enableStickyTOC'] && $sidebar_layout == 1 ) {
101 $this->views( 'widgets/sticky-toc-block' );
102 }
103 remove_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10 );
104 }
105
106 public function filter_base_args( $term_args ) {
107 if ( $term_args['orderby'] == 'doc_category_order' ) {
108 $term_args['meta_key'] = 'doc_category_order';
109 $term_args['orderby'] = 'meta_value_num';
110 }
111 return $term_args;
112 }
113
114 public function view_params() {
115 $settings = &$this->attributes;
116
117 $default_multiple_kb = betterdocs()->settings->get( 'multiple_kb' );
118 $kb_slug = ! empty( $settings['selectKB'] ) && isset( $settings['selectKB'] ) ? json_decode( $settings['selectKB'] )->value : '';
119 $layout_seven_params = [];
120
121 if ( $settings['sidebar_layout'] == 'layout-1' || $settings['sidebar_layout'] == 'layout-6' || $settings['sidebar_layout'] == 'layout-7' ) {
122 $settings['show_count'] = true;
123 }
124
125 $default_view_params = [
126 'shortcode_attr' => [
127 'terms_order' => $settings['terms_order'],
128 'terms_orderby' => $settings['terms_orderby'] == 'doc_category_order' ? 'betterdocs_order' : $settings['terms_orderby'],
129 'terms_include' => array_diff( $this->string_to_array( $settings['includeCategories'] ), $this->string_to_array( $settings['excludeCategories'] ) ),
130 'terms_exclude' => isset( $settings['excludeCategories'] ) ? $this->string_to_array( $settings['excludeCategories'] ) : '',
131 'nested_subcategory' => $settings['enableNestedSubcategory'],
132 'lazy_load' => ! empty( $settings['enableLazyLoad'] ),
133 'sidebar_list' => true,
134 'list_icon_url' => '',
135 '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' ) ) ),
136 'layout_type' => 'block',
137 'disable_customizer_style' => true,
138 'posts_per_page' => -1,
139 'title_tag' => $settings['titleTag'],
140 'show_count' => $settings['show_count'],
141 'orderby' => $settings['postsOrderBy'],
142 'order' => $settings['postsOrder']
143 ]
144 ];
145
146 if ( $settings['sidebar_layout'] == 'layout-7' ) {
147 $default_view_params['number_of_docs'] = $settings['initialDocsQueryNumber'];
148 $default_view_params['number_of_faqs'] = $settings['initialFAQQueryNumber'];
149 $default_view_params['faq_term_ids'] = $settings['searchModalQueriesFaqGroupIds'];
150 $default_view_params['doc_ids'] = $settings['searchModalQueryDocIds'];
151 $default_view_params['doc_term_ids'] = $settings['searchModalQueryTermIds'];
152 }
153
154 // Pass a KB scope only when one is explicitly selected on the block. When none is
155 // set, omit kb_slug so the betterdocs_sidebar_template_shortcode_params filter
156 // (Pro/MKB) can inject the current knowledge_base context on KB templates — the
157 // same path the default sidebar uses. (Passing kb_slug='' would block injection.)
158 if ( ! empty( $kb_slug ) ) {
159 $default_view_params['shortcode_attr']['kb_slug'] = $kb_slug;
160 $default_view_params['shortcode_attr']['multiple_knowledge_base'] = (bool) $default_multiple_kb;
161 }
162
163 return $default_view_params;
164 }
165 }
166