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

152 lines 6.1 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\BlockEditor\Blocks;
4
5 use WPDeveloper\BetterDocs\Editors\BlockEditor\Block;
6
7 class Sidebar extends Block {
8
9 public $view_wrapper = 'betterdocs-toc-block';
10
11 protected $editor_styles = [
12 'betterdocs-sidebar',
13 'betterdocs-search-modal',
14 'betterdocs-extend-search-modal'
15 ];
16
17 protected $frontend_styles = [
18 'betterdocs-sidebar',
19 'betterdocs-fontawesome'
20 ];
21
22 protected $frontend_scripts = [
23 'betterdocs',
24 'betterdocs-category-grid',
25 'betterdocs-search-modal'
26 ];
27
28 public function get_name() {
29 return 'sidebar';
30 }
31
32 public function register_scripts() {
33 if( is_admin() ){ // load for wordpress admin panel only
34 if ( function_exists( 'betterdocs_pro' ) && betterdocs_pro()->assets != null ) { // get the sidebar modal on gutenberg edit mode
35 betterdocs_pro()->assets->enqueue( 'betterdocs-extend-search-modal', 'public/js/extend-search-modal.js', [] );
36 }
37 $this->assets_manager->enqueue(
38 'betterdocs-search-modal',
39 'shortcodes/js/search-modal.js',
40 [ 'jquery' ]
41 );
42 }
43 }
44
45 public function get_default_attributes() {
46 return [
47 'blockId' => '',
48 'sidebar_layout' => 'layout-1',
49 'selectKB' => '',
50 'includeCategories' => '',
51 'excludeCategories' => '',
52 'terms_per_page' => -1,
53 'terms_order' => 'asc',
54 'terms_orderby' => 'doc_category_order',
55 'docs_per_page' => -1,
56 'postsOrderBy' => 'title',
57 'postsOrder' => 'asc',
58 'enableNestedSubcategory' => false,
59 'docs_per_subcategory' => 10,
60 'titleTag' => 'h1',
61 'show_count' => false,
62 'enableStickyTOC' => false,
63 'listIcon' => '',
64 'listIconImageUrl' => '',
65 'initialDocsQueryNumber' => 5,
66 'initialFAQQueryNumber' => 5,
67 'searchModalQueryTermIds' => '', //for search modal
68 'searchModalQueryDocIds' => '', //for search modal
69 'searchModalQueriesFaqGroupIds' => ''
70 ];
71 }
72
73 public function render( $attributes, $content ) {
74 $layout = isset( $this->attributes['sidebar_layout'] ) ? $this->attributes['sidebar_layout'] : 'layout-1';
75 $layout = str_replace( 'layout-', '', $layout );
76 $layout_mapper = [
77 1 => 1,
78 2 => 4,
79 3 => 5,
80 4 => 2,
81 5 => 3,
82 6 => 6,
83 7 => 7,
84 8 => 8,
85 ];
86 $sidebar_layout = isset( $layout_mapper[ $layout ] ) ? $layout_mapper[ $layout ] : 1;
87
88 if ( ! betterdocs()->is_pro_active() ) {
89 $sidebar_layout = 1;
90 }
91
92 add_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10, 1 );
93 $this->views( 'templates/sidebars/sidebar-' . $sidebar_layout );
94 if ( $this->attributes['enableStickyTOC'] && $sidebar_layout == 1 ) {
95 $this->views( 'widgets/sticky-toc-block' );
96 }
97 remove_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10 );
98 }
99
100 public function filter_base_args( $term_args ) {
101 if ( $term_args['orderby'] == 'doc_category_order' ) {
102 $term_args['meta_key'] = 'doc_category_order';
103 $term_args['orderby'] = 'meta_value_num';
104 }
105 return $term_args;
106 }
107
108 public function view_params() {
109 $settings = &$this->attributes;
110
111 $default_multiple_kb = betterdocs()->settings->get( 'multiple_kb' );
112 $kb_slug = ! empty( $settings['selectKB'] ) && isset( $settings['selectKB'] ) ? json_decode( $settings['selectKB'] )->value : '';
113 $layout_seven_params = [];
114
115 if ( $settings['sidebar_layout'] == 'layout-1' || $settings['sidebar_layout'] == 'layout-6' || $settings['sidebar_layout'] == 'layout-7' ) {
116 $settings['show_count'] = true;
117 }
118
119 $default_view_params = [
120 'shortcode_attr' => [
121 'terms_order' => $settings['terms_order'],
122 'terms_orderby' => $settings['terms_orderby'] == 'doc_category_order' ? 'betterdocs_order' : $settings['terms_orderby'],
123 'terms_include' => array_diff( $this->string_to_array( $settings['includeCategories'] ), $this->string_to_array( $settings['excludeCategories'] ) ),
124 'terms_exclude' => isset( $settings['excludeCategories'] ) ? $this->string_to_array( $settings['excludeCategories'] ) : '',
125 'nested_subcategory' => $settings['enableNestedSubcategory'],
126 'multiple_knowledge_base' => $default_multiple_kb,
127 'kb_slug' => $kb_slug,
128 'sidebar_list' => true,
129 'list_icon_url' => '',
130 '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' ) ) ),
131 'layout_type' => 'block',
132 'disable_customizer_style' => true,
133 'posts_per_page' => -1,
134 'title_tag' => $settings['titleTag'],
135 'show_count' => $settings['show_count'],
136 'orderby' => $settings['postsOrderBy'],
137 'order' => $settings['postsOrder']
138 ]
139 ];
140
141 if ( $settings['sidebar_layout'] == 'layout-7' ) {
142 $default_view_params['number_of_docs'] = $settings['initialDocsQueryNumber'];
143 $default_view_params['number_of_faqs'] = $settings['initialFAQQueryNumber'];
144 $default_view_params['faq_term_ids'] = $settings['searchModalQueriesFaqGroupIds'];
145 $default_view_params['doc_ids'] = $settings['searchModalQueryDocIds'];
146 $default_view_params['doc_term_ids'] = $settings['searchModalQueryTermIds'];
147 }
148
149 return $default_view_params;
150 }
151 }
152