PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 1.3.4
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v1.3.4
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.php

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

405 lines 12.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The admin-specific functionality of the plugin.
4 *
5 * @link https://wpdeveloper.net
6 * @since 1.0.0
7 *
8 * @package BetterDocs
9 * @subpackage BetterDocs/admin
10 * @author WPDeveloper <support@wpdeveloper.net>
11 */
12
13 class BetterDocs_Admin {
14
15 /**
16 * The ID of this plugin.
17 *
18 * @since 1.0.0
19 * @access private
20 * @var string $plugin_name The ID of this plugin.
21 */
22 private $plugin_name;
23 private $menu_slug;
24 /**
25 * All builder args
26 *
27 * @var array
28 */
29 private $builder_args;
30 /**
31 * Builder Metabox ID
32 *
33 * @var string
34 */
35 private $metabox_id;
36
37 /**
38 * The version of this plugin.
39 *
40 * @since 1.0.0
41 * @access private
42 * @var string $version The current version of this plugin.
43 */
44 private $version;
45
46 /**
47 * The type.
48 *
49 * @since 1.0.0
50 * @access public
51 * @var string the post type of betterdocs.
52 */
53 public $type = 'docs';
54
55 public $metabox;
56
57 public static $prefix = 'betterdocs_meta_';
58
59 public static $settings;
60
61 /**
62 * Initialize the class and set its properties.
63 *
64 * @since 1.0.0
65 * @param string $plugin_name The name of this plugin.
66 * @param string $version The version of this plugin.
67 */
68 public static $counts;
69
70 public static $enabled_types = [];
71 public static $active_items = [];
72
73 public function __construct( $plugin_name, $version ) {
74
75 $this->plugin_name = $plugin_name;
76 $this->version = $version;
77 $this->metabox = new BetterDocs_MetaBox();
78 self::$settings = BetterDocs_DB::get_settings();
79 }
80
81 /**
82 * Register the stylesheets for the admin area.
83 *
84 * @since 1.0.0
85 */
86 public function enqueue_styles( $hook ) {
87 $page_status = false;
88 wp_enqueue_style(
89 $this->plugin_name . '-admin-global',
90 BETTERDOCS_ADMIN_URL . 'assets/css/betterdocs-global.css',
91 array(), $this->version, 'all'
92 );
93 if( $hook == 'betterdocs_page_betterdocs-settings' || $hook == 'toplevel_page_betterdocs-admin' ) {
94 $page_status = true;
95 }
96
97 if( ! $page_status ) {
98 return;
99 }
100
101 wp_enqueue_style(
102 $this->plugin_name . '-select2',
103 BETTERDOCS_ADMIN_URL . 'assets/css/select2.min.css',
104 array(), $this->version, 'all'
105 );
106 wp_enqueue_style(
107 $this->plugin_name,
108 BETTERDOCS_ADMIN_URL . 'assets/css/betterdocs-admin.css',
109 array(), $this->version, 'all'
110 );
111 }
112 /**
113 * Register the JavaScript for the admin area.
114 *
115 * @since 1.0.0
116 */
117 public function enqueue_scripts( $hook ) {
118 wp_enqueue_script( 'wp-color-picker' );
119 // wp_enqueue_script( 'jquery-ui-datepicker' );
120 // wp_enqueue_media();
121 wp_enqueue_script(
122 $this->plugin_name . '-select2',
123 BETTERDOCS_ADMIN_URL . 'assets/js/select2.min.js',
124 array( 'jquery' ), $this->version, true
125 );
126 wp_enqueue_script(
127 $this->plugin_name . '-swal',
128 BETTERDOCS_ADMIN_URL . 'assets/js/sweetalert.min.js',
129 array( 'jquery' ), $this->version, true
130 );
131 wp_enqueue_script(
132 $this->plugin_name,
133 BETTERDOCS_ADMIN_URL . 'assets/js/betterdocs-admin.js',
134 array( 'jquery' ), $this->version, true
135 );
136 wp_localize_script( $this->plugin_name, 'betterdocsAdminConfig', self::toggleFields() );
137
138 }
139
140 public function toggleFields( $builder = false ){
141 $args = BetterDocs_Settings::settings_args();
142
143 $toggleFields = $hideFields = $conditions = array();
144
145 $tabs = $args;
146 if( ! empty( $tabs ) ) {
147 foreach( $tabs as $tab_id => $tab ) {
148 $sections = isset( $tab['sections'] ) ? $tab[ 'sections' ] : [];
149 if( ! empty( $sections ) ) {
150 foreach( $sections as $section_id => $section ) {
151 $fields = isset( $section['fields'] ) ? $section[ 'fields' ] : [];
152 if( isset( $section['tabs'] ) && ! empty( $section['tabs'] ) ) {
153 foreach( $section['tabs'] as $inner_field_tab_key => $inner_field_tab ) {
154 if( isset( $inner_field_tab['fields'] ) ) {
155 foreach( $inner_field_tab['fields'] as $inner_tab_field_key => $inner_tab_field_tab ) {
156 if( isset( $inner_tab_field_tab['hide'] ) && ! empty( $inner_tab_field_tab['hide'] ) && is_array( $inner_tab_field_tab['hide'] ) ) {
157 $hideFields = $this->a_walk( $inner_tab_field_tab['hide'], $inner_tab_field_key, $hideFields );
158 }
159 if( isset( $inner_tab_field_tab['dependency'] ) && ! empty( $inner_tab_field_tab['dependency'] ) && is_array( $inner_tab_field_tab['dependency'] ) ) {
160 $conditions = $this->a_walk( $inner_tab_field_tab['dependency'], $inner_tab_field_key, $conditions );
161 }
162 }
163 }
164 }
165 }
166 if( ! empty( $fields ) ) {
167 foreach( $fields as $field_key => $field ) {
168 if( isset( $field['fields'] ) ) {
169 $iFields = $field['fields'];
170 foreach( $iFields as $inner_field_key => $inner_field ) {
171 if( isset( $inner_field['hide'] ) && ! empty( $inner_field['hide'] ) && is_array( $inner_field['hide'] ) ) {
172 $hideFields = $this->a_walk( $inner_field['hide'], $inner_field_key, $hideFields );
173 }
174 if( isset( $inner_field['dependency'] ) && ! empty( $inner_field['dependency'] ) && is_array( $inner_field['dependency'] ) ) {
175 $conditions = $this->a_walk( $inner_field['dependency'], $inner_field_key, $conditions );
176 }
177 }
178 }
179 if( isset( $field['hide'] ) && ! empty( $field['hide'] ) && is_array( $field['hide'] ) ) {
180 $hideFields = $this->a_walk( $field['hide'], $field_key, $hideFields );
181 }
182 if( isset( $field['dependency'] ) && ! empty( $field['dependency'] ) && is_array( $field['dependency'] ) ) {
183 $conditions = $this->a_walk( $field['dependency'], $field_key, $conditions );
184 }
185 }
186 }
187 }
188 }
189 }
190 }
191
192 return array(
193 'toggleFields' => $conditions, // TODO: toggling system has to be more optimized!
194 'hideFields' => $hideFields,
195 );
196 }
197 public function a_walk( $array, $field_key, &$returned_array = [] ){
198 array_walk( $array, function( $value, $key ) use ( $field_key, &$returned_array ) {
199 $returned_array[ $field_key ][ $key ] = $value;
200 } );
201
202 return $returned_array;
203 }
204 /**
205 * Admin Menu Page
206 *
207 * @return void
208 */
209 public function menu_page(){
210 $settings_class = new betterdocs_settings();
211 $singular_name = BetterDocs_DB::get_settings('breadcrumb_doc_title');
212
213 $betterdocs_articles_caps = apply_filters( 'betterdocs_articles_caps', 'edit_posts', 'article_roles' );
214 $betterdocs_terms_caps = apply_filters( 'betterdocs_terms_caps', 'delete_others_posts', 'article_roles' );
215 $betterdocs_settings_caps = apply_filters( 'betterdocs_settings_caps', 'administrator', 'settings_roles' );
216
217 $settings = apply_filters( 'betterdocs_admin_menu', array(
218 'betterdocs-setup' => array(
219 'title' => __('Quick Setup', 'betterdocs'),
220 'capability' => 'delete_users',
221 'callback' => 'BetterDocsSetupWizard::plugin_setting_page'
222 ),
223 'betterdocs-settings' => array(
224 'title' => __('Settings', 'betterdocs'),
225 'capability' => $betterdocs_settings_caps,
226 'callback' => array( $settings_class, 'settings_page' )
227 ),
228 ) );
229
230 $this->menu_slug = apply_filters( 'betterdocs_menu_slug', 'edit.php?post_type=docs' );
231 $betterdocs_admin_output = apply_filters( 'betterdocs_admin_output', array() );
232
233 add_menu_page(
234 'BetterDocs', 'BetterDocs',
235 $betterdocs_articles_caps, $this->menu_slug, $betterdocs_admin_output,
236 BETTERDOCS_ADMIN_URL.'/assets/img/betterdocs-icon-white.svg', 5
237 );
238 add_submenu_page(
239 $this->menu_slug, '',
240 __( 'All Articles', 'betterdocs' ),
241 $betterdocs_articles_caps, $this->menu_slug
242 );
243 add_submenu_page( $this->menu_slug, __('Add New', 'betterdocs'), __('Add New', 'betterdocs'), $betterdocs_articles_caps, 'post-new.php?post_type=docs');
244 add_submenu_page(
245 $this->menu_slug, __('Categories', 'betterdocs'), __('Categories', 'betterdocs'),
246 $betterdocs_terms_caps, 'edit-tags.php?taxonomy=doc_category&post_type=docs'
247 );
248 add_submenu_page(
249 $this->menu_slug, __('Tags', 'betterdocs'), __('Tags', 'betterdocs'),
250 $betterdocs_terms_caps, 'edit-tags.php?taxonomy=doc_tag&post_type=docs'
251 );
252
253 foreach( $settings as $slug => $setting ) {
254 $cap = isset( $setting['capability'] ) ? $setting['capability'] : 'delete_users';
255 $hook = add_submenu_page( $this->menu_slug, $setting['title'], $setting['title'], $cap, $slug, $setting['callback'] );
256 }
257 }
258
259 public function highlight_admin_menu( $parent_file ){
260 global $current_screen;
261 if( $this->menu_slug === 'betterdocs-admin' && in_array( $current_screen->id, array( 'edit-doc_tag', 'edit-doc_category' ) ) ) {
262 $parent_file = 'betterdocs-admin';
263 } else {
264 if( in_array( $current_screen->id, array( 'edit-doc_tag', 'edit-doc_category' ) ) ) {
265 $parent_file = 'edit.php?post_type=docs';
266 }
267 }
268 return $parent_file;
269 }
270
271 public function highlight_admin_submenu( $parent_file, $submenu_file ){
272 global $current_screen, $pagenow;
273 if ( $current_screen->post_type == 'docs' ) {
274 if ( $pagenow == 'post.php' ) {
275 $submenu_file = 'edit.php?post_type=docs';
276 }
277 if ( $pagenow == 'post-new.php' ) {
278 $submenu_file = 'post-new.php?post_type=docs';
279 }
280 if( $current_screen->id === 'edit-doc_category' ) {
281 $submenu_file = 'edit-tags.php?taxonomy=doc_category&post_type=docs';
282 }
283 if( $current_screen->id === 'edit-doc_tag' ) {
284 $submenu_file = 'edit-tags.php?taxonomy=doc_tag&post_type=docs';
285 }
286 if( $current_screen->id === 'edit-knowledge_base' ) {
287 $submenu_file = 'edit-tags.php?taxonomy=knowledge_base&post_type=docs';
288 }
289 }
290 if( 'betterdocs_page_betterdocs-settings' == $current_screen->id ) {
291 $submenu_file = 'betterdocs-settings';
292 }
293 if( 'betterdocs_page_betterdocs-setup' == $current_screen->id ) {
294 $submenu_file = 'betterdocs-setup';
295 }
296
297 return $submenu_file;
298 }
299
300
301 public function quick_builder() {
302 $builder_args = $this->builder_args;
303 $tabs = $this->builder_args['tabs'];
304 $prefix = self::$prefix;
305 $metabox_id = $this->metabox_id;
306 /**
307 * This lines of code is for editing a notification in simple|quick builder
308 *
309 * @var [type]
310 */
311 $idd = null;
312 if( isset( $_GET['post_id'] ) && ! empty( $_GET['post_id'] )) {
313 $idd = intval( $_GET['post_id'] );
314 }
315 include_once BETTERDOCS_ADMIN_DIR_PATH . 'partials/betterdocs-quick-builder-display.php';
316 }
317 /**
318 * Generate the builder data acording to default meta data
319 *
320 * @param array $data
321 * @return array
322 */
323 protected function builder_data( $data ) {
324 $post_data = [];
325 $prefix = self::$prefix;
326 $meta_fields = BetterDocs_MetaBox::get_metabox_fields( $prefix );
327 foreach( $meta_fields as $meta_key => $meta_field ) {
328 if( in_array( $meta_key, array_keys($data) ) ) {
329 $post_data[ $meta_key ] = $data[ $meta_key ];
330 } else {
331 $post_data[ $meta_key ] = '';
332
333 if( isset( $meta_field['defaults'] ) ) {
334 $post_data[ $meta_key ] = $meta_field['defaults'];
335 }
336 if( isset( $meta_field['default'] ) ) {
337 $post_data[ $meta_key ] = $meta_field['default'];
338 }
339 }
340 }
341
342 return array_merge( $post_data, $data );
343 }
344
345 public static function get_form_action( $query_var = '', $builder_form = false ) {
346 $page = '/edit.php?post_type=docs&page=betterdocs-settings';
347
348 if ( is_network_admin() ) {
349 return network_admin_url( $page . $query_var );
350 } else {
351 return admin_url( $page . $query_var );
352 }
353 }
354
355
356 /**
357 * Admin Init For User Interactions
358 * @return void
359 */
360 public function admin_init( $hook ){
361 /**
362 * BetterDocs Admin URL
363 */
364 $current_url = admin_url('edit.php?post_type=docs&page=betterdocs-settings');
365 }
366 public function toolbar_menu( $admin_bar ){
367 if ( ! is_admin() || ! is_admin_bar_showing() ) {
368 return;
369 }
370
371 // Show only when the user is a member of this site, or they're a super admin.
372 if ( ! is_user_member_of_blog() && ! is_super_admin() ) {
373 return;
374 }
375
376 $saved_settings = BetterDocs_DB::get_settings();
377 if( isset( $saved_settings['builtin_doc_page'] ) && intval( $saved_settings['builtin_doc_page'] ) ) {
378 $docs_url = isset( $saved_settings['docs_slug'] ) && ! empty( $saved_settings['docs_slug'] ) ? home_url( $saved_settings['docs_slug'] ) : false;
379 if( $docs_url ) {
380 // Add an option to visit the store.
381 $admin_bar->add_node(
382 array(
383 'parent' => 'site-name',
384 'id' => 'view-docs',
385 'title' => __( 'Visit Documentation', 'betterdocs' ),
386 'href' => $docs_url,
387 )
388 );
389 }
390 } elseif (isset( $saved_settings['docs_page'] ) && intval( $saved_settings['docs_page'] )) {
391 $docs_page_url = isset( $saved_settings['docs_page'] ) && ! empty( $saved_settings['docs_page'] ) ? get_page_link($saved_settings['docs_page']) : false;
392 $admin_bar->add_node(
393 array(
394 'parent' => 'site-name',
395 'id' => 'view-docs',
396 'title' => __( 'Visit Documentation', 'betterdocs' ),
397 'href' => $docs_page_url,
398 )
399 );
400 }
401
402 }
403
404 }
405