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

157 lines 6.4 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 'docs_per_subcategory' => 10,
65 'titleTag' => 'h1',
66 'show_count' => false,
67 'enableStickyTOC' => false,
68 'listIcon' => '',
69 'listIconImageUrl' => '',
70 'initialDocsQueryNumber' => 5,
71 'initialFAQQueryNumber' => 5,
72 'searchModalQueryTermIds' => '', //for search modal
73 'searchModalQueryDocIds' => '', //for search modal
74 'searchModalQueriesFaqGroupIds' => ''
75 ];
76 }
77
78 public function render( $attributes, $content ) {
79 $layout = isset( $this->attributes['sidebar_layout'] ) ? $this->attributes['sidebar_layout'] : 'layout-1';
80 $layout = str_replace( 'layout-', '', $layout );
81 $layout_mapper = [
82 1 => 1,
83 2 => 4,
84 3 => 5,
85 4 => 2,
86 5 => 3,
87 6 => 6,
88 7 => 7,
89 8 => 8,
90 ];
91 $sidebar_layout = isset( $layout_mapper[ $layout ] ) ? $layout_mapper[ $layout ] : 1;
92
93 if ( ! betterdocs()->is_pro_active() ) {
94 $sidebar_layout = 1;
95 }
96
97 add_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10, 1 );
98 $this->views( 'templates/sidebars/sidebar-' . $sidebar_layout );
99 if ( $this->attributes['enableStickyTOC'] && $sidebar_layout == 1 ) {
100 $this->views( 'widgets/sticky-toc-block' );
101 }
102 remove_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10 );
103 }
104
105 public function filter_base_args( $term_args ) {
106 if ( $term_args['orderby'] == 'doc_category_order' ) {
107 $term_args['meta_key'] = 'doc_category_order';
108 $term_args['orderby'] = 'meta_value_num';
109 }
110 return $term_args;
111 }
112
113 public function view_params() {
114 $settings = &$this->attributes;
115
116 $default_multiple_kb = betterdocs()->settings->get( 'multiple_kb' );
117 $kb_slug = ! empty( $settings['selectKB'] ) && isset( $settings['selectKB'] ) ? json_decode( $settings['selectKB'] )->value : '';
118 $layout_seven_params = [];
119
120 if ( $settings['sidebar_layout'] == 'layout-1' || $settings['sidebar_layout'] == 'layout-6' || $settings['sidebar_layout'] == 'layout-7' ) {
121 $settings['show_count'] = true;
122 }
123
124 $default_view_params = [
125 'shortcode_attr' => [
126 'terms_order' => $settings['terms_order'],
127 'terms_orderby' => $settings['terms_orderby'] == 'doc_category_order' ? 'betterdocs_order' : $settings['terms_orderby'],
128 'terms_include' => array_diff( $this->string_to_array( $settings['includeCategories'] ), $this->string_to_array( $settings['excludeCategories'] ) ),
129 'terms_exclude' => isset( $settings['excludeCategories'] ) ? $this->string_to_array( $settings['excludeCategories'] ) : '',
130 'nested_subcategory' => $settings['enableNestedSubcategory'],
131 'multiple_knowledge_base' => $default_multiple_kb,
132 'kb_slug' => $kb_slug,
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 return $default_view_params;
155 }
156 }
157