PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 2.3.6
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v2.3.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 / admin / class-betterdocs-admin-screen.php

class-betterdocs-admin-screen.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 2.3.6, at admin/class-betterdocs-admin-screen.php

291 lines 19.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 class Betterdocs_Admin_Screen
3 {
4 private $menu_slug;
5
6 public function __construct() {
7 $this->menu_slug = 'betterdocs-admin';
8 add_filter( 'manage_docs_posts_columns', array( $this, 'set_custom_edit_action_columns' ) );
9 add_action( 'manage_docs_posts_custom_column', array( $this, 'manage_custom_columns' ), 10, 2 );
10 add_action( 'admin_menu', array( $this, 'menu_page' ) );
11 add_filter( 'parent_file', array( $this, 'highlight_admin_menu' ) );
12
13 global $pagenow;
14 if ($pagenow == 'edit-tags.php') {
15 add_filter( 'submenu_file', array( $this, 'highlight_admin_submenu' ), 10, 2 );
16 }
17 }
18
19 public function set_custom_edit_action_columns($columns)
20 {
21 unset( $columns['comments'] );
22 $columns['betterdocs_word_count'] = __('Word Count', 'betterdocs');
23 return $columns;
24 }
25
26 public function manage_custom_columns( $column, $post_id )
27 {
28 switch ( $column ) {
29 case 'betterdocs_word_count':
30 $word_count = str_word_count(trim(strip_tags(get_post_field('post_content', $post_id))));
31 echo '<span>'. $word_count .'</span>';
32 break;
33 }
34 }
35
36 public function betterdocs_menu_list() {
37 $betterdocs_admin_pages = array(
38 'betterdocs' => array(
39 'page_title' => 'BetterDocs',
40 'menu_title' => 'BetterDocs',
41 'capability' => 'edit_docs',
42 'menu_slug' => $this->menu_slug,
43 'callback' => $this->betterdocs_admin_output(),
44 'icon_url' => BETTERDOCS_ADMIN_URL.'/assets/img/betterdocs-icon-white.svg',
45 'position' => 5
46 ),
47 'all_docs' => array(
48 'parent_slug' => $this->menu_slug,
49 'page_title' => __( 'All Docs', 'betterdocs' ),
50 'menu_title' => __( 'All Docs', 'betterdocs'),
51 'capability' => 'edit_docs',
52 'menu_slug' => $this->menu_slug
53 ),
54 'add_new' => array(
55 'parent_slug' => $this->menu_slug,
56 'page_title' => __('Add New', 'betterdocs'),
57 'menu_title' => __('Add New', 'betterdocs'),
58 'capability' => 'edit_docs',
59 'menu_slug' => 'post-new.php?post_type=docs'
60 ),
61 'categories' => array(
62 'parent_slug' => $this->menu_slug,
63 'page_title' => __('Categories', 'betterdocs'),
64 'menu_title' => __('Categories', 'betterdocs'),
65 'capability' => 'manage_doc_terms',
66 'menu_slug' => 'edit-tags.php?taxonomy=doc_category&post_type=docs'
67 ),
68 'tags' => array(
69 'parent_slug' => $this->menu_slug,
70 'page_title' => __('Tags', 'betterdocs'),
71 'menu_title' => __('Tags', 'betterdocs'),
72 'capability' => 'manage_doc_terms',
73 'menu_slug' => 'edit-tags.php?taxonomy=doc_tag&post_type=docs'
74 ),
75 'quick_setup' => array(
76 'parent_slug' => $this->menu_slug,
77 'page_title' => __('Quick Setup', 'betterdocs'),
78 'menu_title' => __('Quick Setup', 'betterdocs'),
79 'capability' => 'delete_users',
80 'menu_slug' => 'betterdocs-setup',
81 'callback' => array( new BetterDocsSetupWizard(), 'plugin_setting_page' )
82 ),
83 'settings' => array(
84 'parent_slug' => $this->menu_slug,
85 'page_title' => __('Settings', 'betterdocs'),
86 'menu_title' => __('Settings', 'betterdocs'),
87 'capability' => 'edit_docs_settings',
88 'menu_slug' => 'betterdocs-settings',
89 'callback' => array( new BetterDocs_Settings(), 'settings_page' )
90 ),
91 'analytics' => array(
92 'parent_slug' => $this->menu_slug,
93 'page_title' => __('Analytics', 'betterdocs'),
94 'menu_title' => __('Analytics', 'betterdocs'),
95 'text_domain' => 'betterdocs',
96 'capability' => 'read_docs_analytics',
97 'menu_slug' => 'betterdocs-analytics',
98 'callback' => array( new BetterDocs_Settings(), 'analytics_page' )
99 ),
100 'faq' => array(
101 'parent_slug' => $this->menu_slug,
102 'page_title' => __('FAQ Builder', 'betterdocs'),
103 'menu_title' => __('FAQ Builder', 'betterdocs'),
104 'text_domain' => 'betterdocs',
105 'capability' => 'read_docs_analytics',
106 'menu_slug' => 'betterdocs-faq',
107 'callback' => array( new BetterDocs_Settings(), 'faq_page' )
108 )
109 );
110 return apply_filters( 'betterdocs_admin_menu' ,$betterdocs_admin_pages );
111 }
112
113 /**
114 * Admin Menu Page
115 *
116 * @return void
117 */
118 public function menu_page()
119 {
120 foreach( $this->betterdocs_menu_list() as $key => $value ) {
121 if( $key === 'betterdocs' ) {
122 add_menu_page(
123 $value['page_title'], $value['menu_title'],
124 $value['capability'], $value['menu_slug'], $value['callback'],
125 $value['icon_url'], $value['position']
126 );
127 } else {
128 $parent_slug = isset( $value['parent_slug'] ) ? $value['parent_slug'] : '';
129 $page_title = isset( $value['page_title'] ) ? $value['page_title'] : '';
130 $menu_title = isset( $value['menu_title'] ) ? $value['menu_title'] : '';
131 $capability = isset( $value['capability'] ) ? $value['capability'] : '';
132 $menu_slug = isset( $value['menu_slug'] ) ? $value['menu_slug'] : '';
133 $callback = isset( $value['callback'] ) ? $value['callback'] : '';
134 add_submenu_page(
135 $parent_slug,$page_title,
136 $menu_title, $capability,
137 $menu_slug, $callback
138 );
139 }
140 }
141 }
142
143 public function highlight_admin_menu($parent_file)
144 {
145 global $current_screen;
146
147 if( $this->menu_slug === 'betterdocs-admin' && in_array( $current_screen->id, array( 'edit-doc_tag', 'edit-doc_category' ) ) ) {
148 $parent_file = 'betterdocs-admin';
149 } else {
150 if( in_array( $current_screen->id, array( 'edit-doc_tag', 'edit-doc_category' ) ) ) {
151 $parent_file = 'edit.php?post_type=docs';
152 }
153 }
154 return apply_filters('betterdocs_highlight_admin_menu', $parent_file);
155 }
156
157 public function highlight_admin_submenu($submenu_file)
158 {
159 global $current_screen, $pagenow;
160
161 if ( $current_screen->post_type == 'docs' ) {
162 if ( $pagenow == 'post.php' ) {
163 $submenu_file = 'edit.php?post_type=docs';
164 }
165 if ( $pagenow == 'post-new.php' ) {
166 $submenu_file = 'post-new.php?post_type=docs';
167 }
168 if( $current_screen->id === 'edit-doc_category' ) {
169 $submenu_file = 'edit-tags.php?taxonomy=doc_category&post_type=docs';
170 }
171 if( $current_screen->id === 'edit-doc_tag' ) {
172 $submenu_file = 'edit-tags.php?taxonomy=doc_tag&post_type=docs';
173 }
174 if( $current_screen->id === 'edit-knowledge_base' ) {
175 $submenu_file = 'edit-tags.php?taxonomy=knowledge_base&post_type=docs';
176 }
177 }
178
179 if( 'betterdocs_page_betterdocs-settings' == $current_screen->id ) {
180 $submenu_file = 'betterdocs-settings';
181 }
182
183 if( 'betterdocs_page_betterdocs-setup' == $current_screen->id ) {
184 $submenu_file = 'betterdocs-setup';
185 }
186
187 return apply_filters('betterdocs_highlight_admin_submenu', $submenu_file);
188 }
189
190 public function header_template()
191 { ?>
192 <div class="betterdocs-settings-header">
193 <div class="betterdocs-header-full">
194 <img src="<?php echo BETTERDOCS_ADMIN_URL ?>assets/img/betterdocs-icon.svg" alt="">
195 <h2 class="title"><?php esc_html_e('BetterDocs', 'betterdocs') ?></h2>
196 <div class="betterdocs-header-button">
197 <a href="edit.php?post_type=docs&bdocs_view=classic" class="betterdocs-button betterdocs-button-secondary"><?php esc_html_e('Switch to Classic UI', 'betterdocs') ?></a>
198 <a href="post-new.php?post_type=docs" class="betterdocs-button betterdocs-button-primary"><?php esc_html_e('Add New Doc', 'betterdocs') ?></a>
199 <?php do_action('betterdocs_admin_screen_after_header_button'); ?>
200 </div>
201 <div class="betterdocs-list-grid-icon tabs-nav">
202 <a class="icon-wrap icon-wrap-1" href="#" data-toggle-target=".tab-content-1">
203 <svg width="20" height="18" viewBox="0 0 22 21" fill="none" xmlns="http://www.w3.org/2000/svg">
204 <path d="M0.449558 4.82253C0.200258 4.82253 0 4.62228 0 4.37298V0.449558C0 0.200258 0.200258 0 0.449558 0H21.0679C21.3418 0 21.5665 0.224779 21.5665 0.498601V4.32393C21.5665 4.59775 21.3418 4.82253 21.0679 4.82253H0.449558Z"/>
205 <path d="M0.449558 12.6694C0.200258 12.6694 0 12.4691 0 12.2198V8.29639C0 8.04709 0.200258 7.84683 0.449558 7.84683H21.0679C21.3418 7.84683 21.5665 8.07161 21.5665 8.34543V12.1708C21.5665 12.4446 21.3418 12.6694 21.0679 12.6694H0.449558Z"/>
206 <path d="M0.449558 20.5162C0.200258 20.5162 0 20.3159 0 20.0666V16.1432C0 15.8939 0.200258 15.6937 0.449558 15.6937H21.0679C21.3418 15.6937 21.5665 15.9184 21.5665 16.1923V20.0176C21.5665 20.2914 21.3418 20.5162 21.0679 20.5162H0.449558Z"/>
207 </svg>
208 </a>
209 <a class="icon-wrap icon-wrap-2" href="#" data-toggle-target=".tab-content-2">
210 <svg width="19" height="19" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
211 <path d="M4.375 0H0.625C0.28125 0 0 0.28125 0 0.625V4.375C0 4.71875 0.28125 5 0.625 5H4.375C4.71875 5 5 4.71875 5 4.375V0.625C5 0.28125 4.71875 0 4.375 0Z"/>
212 <path d="M4.375 7.5H0.625C0.28125 7.5 0 7.78125 0 8.125V11.875C0 12.2188 0.28125 12.5 0.625 12.5H4.375C4.71875 12.5 5 12.2188 5 11.875V8.125C5 7.78125 4.71875 7.5 4.375 7.5Z"/>
213 <path d="M4.375 15H0.625C0.28125 15 0 15.2812 0 15.625V19.375C0 19.7188 0.28125 20 0.625 20H4.375C4.71875 20 5 19.7188 5 19.375V15.625C5 15.2812 4.71875 15 4.375 15Z"/>
214 <path d="M11.875 0H8.125C7.78125 0 7.5 0.28125 7.5 0.625V4.375C7.5 4.71875 7.78125 5 8.125 5H11.875C12.2188 5 12.5 4.71875 12.5 4.375V0.625C12.5 0.28125 12.2188 0 11.875 0Z"/>
215 <path d="M11.875 7.5H8.125C7.78125 7.5 7.5 7.78125 7.5 8.125V11.875C7.5 12.2188 7.78125 12.5 8.125 12.5H11.875C12.2188 12.5 12.5 12.2188 12.5 11.875V8.125C12.5 7.78125 12.2188 7.5 11.875 7.5Z"/>
216 <path d="M11.875 15H8.125C7.78125 15 7.5 15.2812 7.5 15.625V19.375C7.5 19.7188 7.78125 20 8.125 20H11.875C12.2188 20 12.5 19.7188 12.5 19.375V15.625C12.5 15.2812 12.2188 15 11.875 15Z"/>
217 <path d="M19.375 0H15.625C15.2812 0 15 0.28125 15 0.625V4.375C15 4.71875 15.2812 5 15.625 5H19.375C19.7188 5 20 4.71875 20 4.375V0.625C20 0.28125 19.7188 0 19.375 0Z"/>
218 <path d="M19.375 7.5H15.625C15.2812 7.5 15 7.78125 15 8.125V11.875C15 12.2188 15.2812 12.5 15.625 12.5H19.375C19.7188 12.5 20 12.2188 20 11.875V8.125C20 7.78125 19.7188 7.5 19.375 7.5Z"/>
219 <path d="M19.375 15H15.625C15.2812 15 15 15.2812 15 15.625V19.375C15 19.7188 15.2812 20 15.625 20H19.375C19.7188 20 20 19.7188 20 19.375V15.625C20 15.2812 19.7188 15 19.375 15Z"/>
220 </svg>
221 </a>
222 </div>
223 <div class="betterdocs-switch-mode">
224 <label for="betterdocs-mode-toggle">
225 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="dayIcon" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
226 <g id="Sun">
227 <g>
228 <path style="fill-rule:evenodd;clip-rule:evenodd;" d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2 C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29 c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7 C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5 c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z" />
229 </g>
230 </g>
231 </svg>
232 </label>
233 <input class="betterdocs-mode-toggle" id="betterdocs-mode-toggle" type="checkbox">
234 <label class="betterdocs-mode-toggle-button" for="betterdocs-mode-toggle"></label>
235 <label for="betterdocs-mode-toggle">
236 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="nightIcon" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
237 <path d="M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571 C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23 c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-14.65,22.008-14.65,35.369 c0,13.36,5.203,25.921,14.65,35.368s22.008,14.65,35.368,14.65c13.361,0,25.921-5.203,35.369-14.65 c3.872-3.871,7.064-8.328,9.491-13.246C97.826,68.608,97.611,67.309,96.76,66.458z" />
238 </svg>
239 </label>
240 </div>
241 </div>
242 </div>
243 <?php
244 }
245
246 public function __header_template()
247 {
248 $html = '<div class="betterdocs-settings-header">
249 <div class="betterdocs-header-full">
250 <img src="'.BETTERDOCS_ADMIN_URL.'assets/img/betterdocs-icon.svg" alt="">
251 <h2 class="title">'.esc_html__('BetterDocs', 'betterdocs').'</h2>
252 <div class="betterdocs-header-button">
253 <a href="edit.php?post_type=docs&bdocs_view=classic" class="betterdocs-button betterdocs-button-secondary">'.esc_html__('Switch to Classic UI', 'betterdocs').'</a>
254 <a href="post-new.php?post_type=docs" class="betterdocs-button betterdocs-button-primary">'.esc_html__('Add New Doc', 'betterdocs').'</a>
255 </div>
256 <div class="betterdocs-switch-mode">
257 <label for="betterdocs-mode-toggle">
258 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="dayIcon" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
259 <g id="Sun">
260 <g>
261 <path style="fill-rule:evenodd;clip-rule:evenodd;" d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2 C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29 c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7 C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5 c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z" />
262 </g>
263 </g>
264 </svg>
265 </label>
266 <input class="betterdocs-mode-toggle" id="betterdocs-mode-toggle" type="checkbox">
267 <label class="betterdocs-mode-toggle-button" for="betterdocs-mode-toggle"></label>
268 <label for="betterdocs-mode-toggle">
269 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="nightIcon" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
270 <path d="M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571 C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23 c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-14.65,22.008-14.65,35.369 c0,13.36,5.203,25.921,14.65,35.368s22.008,14.65,35.368,14.65c13.361,0,25.921-5.203,35.369-14.65 c3.872-3.871,7.064-8.328,9.491-13.246C97.826,68.608,97.611,67.309,96.76,66.458z" />
271 </svg>
272 </label>
273 </div>
274 </div>
275 </div>';
276
277 echo apply_filters('betterdocs_admin_screen_header_nav',$html);
278 }
279
280 public function betterdocs_admin_output()
281 {
282 return array($this, 'betterdocs_admin_display');
283 }
284
285 public function betterdocs_admin_display()
286 {
287 if (file_exists(BETTERDOCS_ADMIN_DIR_PATH . 'partials/betterdocs-admin-screen.php')) {
288 return include_once BETTERDOCS_ADMIN_DIR_PATH . 'partials/betterdocs-admin-screen.php';
289 }
290 }
291 }