PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.1.0
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.1.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 / Core / Settings.php

Settings.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 3.1.0, at includes/Core/Settings.php

2,104 lines 144.9 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\Core;
4
5 use WP_User;
6 use WP_Error;
7 use WPDeveloper\BetterDocs\Utils\Base;
8 use WPDeveloper\BetterDocs\Utils\Database;
9 use WPDeveloper\BetterDocs\Admin\Builder\Rules;
10 use WPDeveloper\BetterDocs\Admin\Builder\GlobalFields;
11
12 class Settings extends Base {
13 public $base_key = 'betterdocs_settings';
14
15 /**
16 * Database class
17 * @var Database
18 */
19 protected $database;
20
21 private $deprecated = [];
22
23 private $cannot_be_empty = [
24 'breadcrumb_doc_title',
25 'docs_slug',
26 'category_slug',
27 'tag_slug',
28 'permalink_structure',
29 'docs_page'
30 ];
31
32 public function __construct( Database $database ) {
33 $this->database = $database;
34 $this->deprecated = $this->deprecated_settings();
35
36 add_action( 'admin_enqueue_scripts', [$this, 'enqueue'] );
37
38 if ( isset( $_GET['page'] ) && $_GET['page'] === 'betterdocs-settings' && ! has_action( 'betterdocs_settings_header' ) ) {
39 add_action( 'betterdocs_settings_header', [$this, 'header'] );
40 }
41
42 add_action( 'wp_ajax_betterdocs_dark_mode', [$this, 'dark_mode'] );
43 add_filter( 'betterdocs_settings_tab_advance', [$this, 'hide_roles_management'], 11, 1 );
44 add_action( 'betterdocs::settings::saved', [$this, 'fallback_slugs'], 99, 3 );
45 }
46
47 public function fallback_slugs( $_saved, $_settings, $_old_settings = [] ) {
48 $_default = $this->get_default();
49 foreach ( $this->cannot_be_empty as $key ) {
50 if ( $key === 'docs_page' && ! $_settings['builtin_doc_page'] && empty( $_settings[$key] ) ) {
51 $this->save( 'builtin_doc_page', true );
52 continue;
53 }
54
55 if ( empty( $_settings[$key] ) ) {
56 $this->save( $key, $_default[$key] );
57 }
58 }
59 }
60
61 /**
62 * Get the settings URL for admin
63 * @return string
64 */
65 public function url() {
66 return esc_url( admin_url( 'admin.php?page=betterdocs-settings' ) );
67 }
68
69 /**
70 * This method is responsible for enqueueing scripts in settings panel
71 *
72 * @since 2.5.0
73 * @param string $hook
74 *
75 * @return void
76 */
77 public function enqueue( $hook ) {
78 if ( $hook !== 'betterdocs_page_betterdocs-settings' ) {
79 return;
80 }
81 wp_enqueue_script( 'betterdocs-admin' );
82 betterdocs()->assets->enqueue( 'betterdocs-settings', 'admin/css/settings.css' );
83 betterdocs()->assets->enqueue( 'betterdocs-icons', 'admin/btd-icon/style.css' );
84 betterdocs()->assets->enqueue( 'betterdocs-settings', 'admin/js/settings.js' );
85 betterdocs()->assets->localize(
86 'betterdocs-settings',
87 'betterdocsAdminSettings',
88 GlobalFields::normalize( $this->settings_args() )
89 );
90 }
91
92 /**
93 * This method is responsible for printing header in dashboard settings page.
94 *
95 * @since 2.5.0
96 * @param string $hook
97 *
98 * @return void
99 */
100 public function header( $hook ) {
101 if ( $hook !== 'settings' ) {
102 return;
103 }
104
105 betterdocs()->views->get( 'admin/template-parts/settings-header' );
106 betterdocs()->views->get( 'admin/template-parts/settings-header-2' );
107 }
108
109 /**
110 * A list of deprecated settings keys.
111 *
112 * @since 2.5.0
113 * @return array
114 */
115 public function deprecated_settings() {
116 return [];
117 }
118
119 /**
120 * Dynamic migration caller.
121 *
122 * @since 2.5.0
123 * @return void
124 */
125 public function migration( $version ) {
126 if ( $version > 250 ) {
127 for ( $v = 250; $v <= $version; $v++ ) {
128 $_func = "v{$v}";
129 if ( method_exists( $this, $_func ) ) {
130 call_user_func( [$this, $_func] );
131 }
132 }
133 }
134 }
135
136 /**
137 * Migration for version 2.5.0
138 *
139 * @since 2.5.0
140 * @return void
141 */
142 public function v250() {
143 if ( $this->get( 'alphabetically_order_term', false ) ) {
144 $this->save( 'terms_orderby', 'name' );
145 }
146
147 if ( $orderby = $this->get( 'alphabetically_order_post', false ) ) {
148 if ( $orderby === '1' ) {
149 $this->save( 'alphabetically_order_post', 'title' );
150 }
151 }
152 }
153
154 /**
155 * A list of default settings data.
156 *
157 * @since 1.0.0
158 *
159 * @return array
160 */
161 public function get_default() {
162 $_default = [
163 'multiple_kb' => '',
164 'builtin_doc_page' => true,
165 'breadcrumb_doc_title' => __( 'Docs', 'betterdocs' ),
166 'docs_slug' => 'docs',
167 'docs_page' => 0,
168 'category_slug' => 'docs-category',
169 'tag_slug' => 'docs-tag',
170 'permalink_structure' => 'docs/',
171 'enable_faq_schema' => false,
172 'live_search' => true,
173 'advance_search' => false,
174 'popular_keyword_limit' => 5,
175 'search_letter_limit' => 3,
176 'search_placeholder' => __( 'Search...', 'betterdocs' ),
177 'search_not_found_text' => __( 'Sorry, no docs were found.', 'betterdocs' ),
178 'search_result_image' => true,
179 'masonry_layout' => true,
180 'category_title_link' => false,
181 'terms_orderby' => 'betterdocs_order',
182 'alphabetically_order_term' => false,
183 'terms_order' => 'ASC',
184 'alphabetically_order_post' => 'betterdocs_order',
185 'docs_order' => 'ASC',
186 'nested_subcategory' => false,
187 'column_number' => 3,
188 'posts_number' => 10,
189 'post_count' => true,
190 'count_text' => __( 'docs', 'betterdocs' ),
191 'count_text_singular' => __( 'doc', 'betterdocs' ),
192 'exploremore_btn' => true,
193 'exploremore_btn_txt' => __( 'Explore More', 'betterdocs' ),
194 'doc_single' => 1,
195 'enable_toc' => true,
196 'toc_title' => __( 'Table of Contents', 'betterdocs' ),
197 'toc_hierarchy' => true,
198 'toc_list_number' => true,
199 'toc_dynamic_title' => false,
200 'enable_sticky_toc' => true,
201 'sticky_toc_offset' => 100,
202 'collapsible_toc_mobile' => false,
203 'supported_heading_tag' => ['1', '2', '3', '4', '5', '6'],
204 'enable_post_title' => true,
205 'title_link_ctc' => true,
206 'enable_breadcrumb' => true,
207 'breadcrumb_home_text' => __( 'Home', 'betterdocs' ),
208 'breadcrumb_home_url' => get_home_url(),
209 'enable_breadcrumb_category' => true,
210 'enable_breadcrumb_title' => true,
211 'enable_sidebar_cat_list' => true,
212 'enable_print_icon' => true,
213 'enable_tags' => true,
214 'email_feedback' => true,
215 'feedback_link_text' => __( 'Still stuck? How can we help?', 'betterdocs' ),
216 'feedback_url' => '',
217 'feedback_form_title' => __( 'How can we help?', 'betterdocs' ),
218 'email_address' => get_option( 'admin_email' ),
219 'show_last_update_time' => true,
220 'enable_navigation' => true,
221 'enable_comment' => true,
222 'enable_credit' => true,
223 'enable_archive_sidebar' => true,
224 'archive_nested_subcategory' => true,
225 'enable_content_restriction' => false,
226 'enable_reporting' => false,
227 'reporting_day' => 'monday',
228 'reporting_email' => get_option( 'admin_email' )
229 ];
230
231 $_default = apply_filters( 'betterdocs_default_settings', $_default );
232 // $_default = apply_filters_deprecated(
233 // 'betterdocs_option_default_settings', [$_default], '2.5.0',
234 // 'betterdocs_default_settings', 'betterdocs_option_default_settings will be removed from v3.5.0.'
235 // );
236
237 return $_default;
238 }
239
240 /**
241 * A list of default settings for pro plugins.
242 *
243 * @since 2.5.0
244 * @return array
245 */
246 public function get_pro_defaults() {
247 return [];
248 }
249
250 /**
251 * Get customizer links for docs page.
252 *
253 * @since 1.0.0
254 * @return string
255 */
256 public function customizer_link() {
257 $query['autofocus[panel]'] = 'betterdocs_customize_options';
258 $query['return'] = admin_url( 'edit.php?post_type=docs' );
259 $builtin_doc_page = betterdocs()->settings->get( 'builtin_doc_page' );
260 $docs_slug = betterdocs()->settings->get( 'docs_slug' );
261 $docs_page = betterdocs()->settings->get( 'builtin_doc_page' );
262
263 if ( $builtin_doc_page == 1 && $docs_slug ) {
264 $query['url'] = site_url( '/' . $docs_slug );
265 } elseif ( $builtin_doc_page != 1 && $docs_page ) {
266 $post_info = get_post( $docs_page );
267 $query['url'] = site_url( '/' . $post_info->post_name );
268 }
269
270 return add_query_arg( $query, admin_url( 'customize.php' ) );
271 }
272
273 /**
274 * Get All Roles
275 * dynamically
276 *
277 * @return array
278 */
279 public function get_roles() {
280 $roles = wp_roles()->role_names;
281 unset( $roles['subscriber'] );
282 return $roles;
283 }
284
285 /**
286 * Set dark mode
287 *
288 * @since 1.0.0
289 * @return void
290 */
291 public function dark_mode() {
292 if ( ! check_ajax_referer( 'doc_cat_order_nonce', 'nonce', false ) ) {
293 wp_send_json_error();
294 }
295
296 if ( isset( $_POST['mode'] ) ) {
297 if ( $this->save( 'dark_mode', rest_sanitize_boolean( $_POST['mode'] ) ) ) {
298 wp_send_json_success();
299 }
300 }
301
302 wp_send_json_error();
303 }
304
305 public function get_normalized_value( $key, $value, $default = null ) {
306 $_origin_value = $_value = $value;
307
308 if ( in_array( $_value, ['on', 'off', '1', 'false', 'true'], true ) ) {
309 switch ( $_value ) {
310 case 'on':
311 case 'ON':
312 case '1':
313 case 'true':
314 $_value = true;
315 break;
316 case 'off':
317 case 'OFF':
318 case '':
319 case 'false':
320 $_value = false;
321 break;
322 }
323 }
324
325 $this->type_validation( $_value, $default );
326 return $_value;
327 }
328
329 public function get_normalized_values( $values, $default_values = [] ) {
330 if ( empty( $values ) ) {
331 return [];
332 }
333
334 $_settings = [];
335 foreach ( $values as $key => $value ) {
336 $_default_value = isset( $default_values[$key] ) ? $default_values[$key] : null;
337 $_settings[$key] = $this->get_normalized_value( $key, $value, $_default_value );
338 }
339
340 return $_settings;
341 }
342
343 public function get_all( $raw = false ) {
344 $_default_settings = $raw ? [] : array_merge( $this->get_default(), $this->get_pro_defaults() );
345 $_settings = $this->database->get( $this->base_key, $_default_settings );
346 return $this->get_normalized_values( $_settings, $_default_settings );
347 }
348
349 public function type_validation( &$value, $defaultValue = null ) {
350 if ( $defaultValue !== null ) {
351 /**
352 * Check if value is not in same type
353 */
354 $_default_type = gettype( $defaultValue );
355
356 if ( ! ( is_scalar( $defaultValue ) && is_scalar( $value ) ) && empty( $value ) ) {
357 $value = $defaultValue;
358 }
359
360 settype( $value, $_default_type );
361 }
362 }
363
364 /**
365 * Get settings value by key
366 *
367 * @since 2.5.0
368 *
369 * @param string $key
370 * @param mixed $default
371 * @param bool $get_all
372 *
373 * @return mixed
374 */
375 public function get( $key, $default = null ) {
376 $_default_settings = array_merge( $this->get_default(), $this->get_pro_defaults() );
377 $_settings = $this->database->get( $this->base_key, $_default_settings );
378
379 $_value = $default;
380 switch ( true ) {
381 // Check if it's a PRO Option
382 case ! isset( $_default_settings[$key] ):
383 $_value = $default;
384 break;
385 // Check if it's a FREE Option and not in DB.
386 case ! isset( $_settings[$key] ) && isset( $_default_settings[$key] ):
387 $_value = $default !== null ? $default : $_default_settings[$key];
388 break;
389 // Check if it's a FREE Option
390 case isset( $_settings[$key] ) && isset( $_default_settings[$key] ):
391 $_value = $_settings[$key];
392 break;
393 }
394
395 $_value = $this->get_normalized_value( $key, $_value, isset( $_default_settings[$key] ) ? $_default_settings[$key] : null );
396
397 if ( gettype( $_value ) === 'string' ) {
398 if ( empty( $_value ) && $default != null ) {
399 $_value = $default;
400 } elseif ( empty( $_value ) && $default === null && isset( $_default_settings[$key] ) ) {
401 $_value = $_default_settings[$key];
402 }
403 }
404
405 return $_value;
406 }
407
408 public function get_raw_field( $key, $default = null ) {
409 $_settings = $this->database->get( $this->base_key, [] );
410
411 if ( isset( $_settings[$key] ) ) {
412 return $this->get_normalized_value( $key, $_settings[$key], $default );
413 }
414
415 return $default;
416 }
417
418 public function save( $key, $value ) {
419 $_settings = $this->database->get( $this->base_key, [] );
420 $_settings[$key] = $value;
421
422 return $this->database->save( $this->base_key, $_settings );
423 }
424
425 public function save_settings( $settings ) {
426 $existing_plugins = betterdocs()->kbmigration->knowledge_base_plugins();
427 if ( ! current_user_can( 'edit_docs_settings' ) ) {
428 return new WP_Error( 'unauthorized_action', __( 'You don\'t have any rights for saving settings.', 'betterdocs' ) );
429 }
430
431 $_old_settings = $this->database->get( $this->base_key, $this->get_default() );
432 // @todo: sanitize the data before inject in DB.
433 $_normalized_settings = $this->get_normalized_values( $settings );
434 if ( $existing_plugins && isset( $_normalized_settings['migration_step'] ) && $_normalized_settings['migration_step'] == true ) {
435 betterdocs()->kbmigration->migrate();
436 }
437 $_settings = wp_parse_args( $_normalized_settings, $_old_settings );
438 $_saved = $this->database->save( $this->base_key, $_settings );
439
440 do_action_ref_array( 'betterdocs::settings::saved', [$_saved, $_settings, $_old_settings, &$this] );
441
442 return $_saved;
443 }
444
445 public function views( $hook ) {
446 return betterdocs()->views->get( 'admin/settings' );
447 }
448
449 public function save_default_settings() {
450 $_settings = $this->get_all();
451 return $this->database->save( $this->base_key, $_settings );
452 }
453
454 public function get_pages() {
455 $_pages = betterdocs()->query->get_posts( [
456 'post_type' => 'page',
457 'numberposts' => -1,
458 'post_status' => 'publish',
459 'posts_per_page' => -1
460 ] );
461
462 $__pages = [];
463
464 if ( ! empty( $_pages ) ) {
465 $__pages[0] = __( 'Select a Page', 'betterdocs' );
466 foreach ( $_pages->posts as $page ) {
467 $__pages[$page->ID] = esc_html( $page->post_title );
468 }
469 }
470
471 return $__pages;
472 }
473
474 public function settings_args() {
475 $wp_roles = $this->normalize_options( $this->get_roles() );
476
477 $settings = [
478 'id' => 'betterdocs_settings_metabox_wrapper',
479 'title' => __( 'betterdocs', 'betterdocs' ),
480 'object_types' => ['betterdocs'],
481 'context' => 'normal',
482 'priority' => 'high',
483 'show_header' => false,
484 'tabnumber' => false,
485 'is_pro_active' => betterdocs()->is_pro_active(),
486 'logoURL' => betterdocs()->assets->icon( 'betterdocs-icon.svg', true ),
487 'layout' => 'vertical',
488 'config' => [
489 'active' => 'tab-general',
490 'sidebar' => true,
491 'title' => false
492 ],
493 'submit' => [
494 'show' => true,
495 'label' => __( 'Save', 'betterdocs' ),
496 'loadingLabel' => __( 'Saving...', 'betterdocs' ),
497 'class' => 'save-settings',
498 'rules' => Rules::logicalRule( [
499 Rules::is( 'config.active', 'tab-design', true ),
500 Rules::is( 'config.active', 'tab-shortcodes', true ),
501 Rules::is( 'config.active', 'tab-instant-answer', true ),
502 Rules::is( 'config.active', 'tab-import-export', true ),
503 ], 'and' )
504 ],
505 'values' => $this->get_all( true ),
506 'tabs' => apply_filters( 'betterdocs_settings_tabs', [
507 'tab-general' => apply_filters( 'betterdocs_settings_tab_general', [
508 'id' => 'tab-general',
509 'label' => __( 'General', 'betterdocs' ),
510 'classes' => 'tab-general',
511 'priority' => 10,
512 'fields' => [
513 'title-general' => [
514 'name' => 'title-general-tab',
515 'type' => 'section',
516 'label' => __( 'General Settings', 'betterdocs' ),
517 'priority' => 10,
518 'fields' => [
519 'multiple_kb' => apply_filters( 'betterdocs_multi_kb_settings', [
520 'name' => 'multiple_kb',
521 'type' => 'toggle',
522 'label' => __( 'Multiple Knowledge Base', 'betterdocs' ),
523 'enable_disable_text_active' => true,
524 'default' => '',
525 'priority' => 1,
526 'is_pro' => true
527 ] ),
528 'builtin_doc_page' => [
529 'name' => 'builtin_doc_page',
530 'type' => 'toggle',
531 'label' => __( 'Built-in Documentation Page', 'betterdocs' ),
532 'enable_disable_text_active' => true,
533 'default' => 1,
534 'priority' => 2,
535 'label_subtitle' => __( 'If you disable root slug for KB Archives, your individual knowledge base URL will be like this: https://example.com/knowledgebase-1', 'betterdocs' )
536 ],
537 'breadcrumb_doc_title' => [
538 'name' => 'breadcrumb_doc_title',
539 'type' => 'text',
540 'label' => __( 'Documentation Page Title', 'betterdocs' ),
541 'default' => 'Docs',
542 'priority' => 3
543 ],
544 'docs_slug' => [
545 'name' => 'docs_slug',
546 'type' => 'text',
547 'label' => __( 'BetterDocs Root Slug', 'betterdocs' ),
548 'default' => 'docs',
549 'priority' => 4,
550 'rules' => Rules::is( 'builtin_doc_page', true )
551 ],
552 'docs_page' => [
553 'name' => 'docs_page',
554 'label' => __( 'Docs Page', 'betterdocs' ),
555 'type' => 'select',
556 'default' => 0,
557 'priority' => 5,
558 'search' => true,
559 'options' => $this->normalize_options( $this->get_pages() ),
560 'label_subtitle' => __( 'You will need to insert BetterDocs Shortcode inside the page. This page will be used as docs permalink.', 'betterdocs' ),
561 'rules' => Rules::is( 'builtin_doc_page', false )
562 ],
563 'category_slug' => [
564 'name' => 'category_slug',
565 'type' => 'text',
566 'label' => __( 'Custom Category Slug', 'betterdocs' ),
567 'default' => 'docs-category',
568 'priority' => 6
569 ],
570 'tag_slug' => [
571 'name' => 'tag_slug',
572 'type' => 'text',
573 'label' => __( 'Custom Tag Slug', 'betterdocs' ),
574 'default' => 'docs-tag',
575 'priority' => 7
576 ],
577 'permalink_structure' => [
578 'name' => 'permalink_structure',
579 'type' => 'permalink_structure',
580 'label' => __( 'Single Docs Permalink', 'betterdocs' ),
581 'default' => PostType::permalink_structure(),
582 'priority' => 9,
583 'tags' => $this->normalize_options( [
584 '%doc_category%' => '%doc_category%',
585 '%knowledge_base%' => '%knowledge_base%'
586 ] ),
587 'label_subtitle' => __( 'Make sure to keep Docs Root Slug in the Single Docs Permalink. You are not able to keep it blank. You can use the available tags from below.', 'betterdocs' )
588 ],
589 'enable_faq_schema' => [
590 'name' => 'enable_faq_schema',
591 'type' => 'toggle',
592 'label' => __( 'FAQ Schema', 'betterdocs' ),
593 'enable_disable_text_active' => true,
594 'default' => '',
595 'priority' => 10
596 ],
597 'analytics_from' => [
598 'name' => 'analytics_from',
599 'type' => 'select',
600 'label' => __( 'Analytics From', 'betterdocs' ),
601 'options' => $this->normalize_options( [
602 'everyone' => __( 'Everyone', 'betterdocs' ),
603 'guests' => __( 'Guests Only', 'betterdocs' ),
604 'registered_users' => __( 'Registered Users Only', 'betterdocs' )
605 ] ),
606 'default' => 'everyone',
607 'priority' => 11,
608 'is_pro' => true
609 ],
610 'exclude_bot_analytics' => [
611 'name' => 'exclude_bot_analytics',
612 'type' => 'toggle',
613 'label' => __( 'Exclude Bot Analytics', 'betterdocs' ),
614 'enable_disable_text_active' => true,
615 'default' => true,
616 'priority' => 12,
617 'is_pro' => true
618 ]
619 ]
620 ]
621 ]
622 ] ),
623 'tab-layout' => apply_filters( 'betterdocs_settings_tab_layout', [
624 'id' => 'tab-layout',
625 'label' => __( 'Layout', 'betterdocs' ),
626 'classes' => 'tab-layout',
627 'priority' => 20,
628 'fields' => [
629 'title-layout' => [
630 'name' => 'title-layout-tab',
631 'type' => 'section',
632 'label' => __( 'Layout Settings', 'betterdocs' ),
633 'priority' => 20,
634 'fields' => [
635 'tab-sidebar-layout' => apply_filters( 'betterdocs_settings_tab_sidebar_layout', [
636 'id' => 'tab-sidebar-layout',
637 'name' => 'tab_sidebar_layout',
638 'label' => __( 'Layout Settings', 'betterdocs' ),
639 'classes' => 'tab-layout',
640 'type' => "tab",
641 'active' => "layout_documentation_page",
642 'completionTrack' => true,
643 'sidebar' => false,
644 'save' => false,
645 'title' => false,
646 'config' => [
647 'active' => 'layout_documentation_page',
648 'sidebar' => false,
649 'title' => false
650 ],
651 'submit' => [
652 'show' => false
653 ],
654 'step' => [
655 'show' => false
656 ],
657 'priority' => 20,
658 'fields' => [
659 'layout_documentation_page' => [
660 'id' => 'layout_documentation_page',
661 'name' => 'layout_documentation_page',
662 'type' => 'section',
663 'label' => __( 'Documentation Page', 'betterdocs' ),
664 'priority' => 1,
665 'fields' => [
666 'tab-nested-layout-1' => [
667 'id' => 'tab-nested-layout-1',
668 'name' => 'tab_nested_layout_1',
669 'label' => __( 'Documentation Page', 'betterdocs' ),
670 'classes' => 'tab-nested-layout',
671 'type' => "tab",
672 'active' => "layout_documentation_page_general",
673 'completionTrack' => true,
674 'sidebar' => false,
675 'save' => false,
676 'title' => false,
677 'config' => [
678 'active' => 'layout_documentation_page_general',
679 'sidebar' => false,
680 'title' => false
681 ],
682 'submit' => [
683 'show' => false
684 ],
685 'step' => [
686 'show' => false
687 ],
688 'priority' => 1,
689 'fields' => [
690 'layout_documentation_page_general' => [
691 'id' => 'layout_documentation_page_general',
692 'name' => 'layout_documentation_page_general',
693 'type' => 'section',
694 'label' => __( 'General', 'betterdocs' ),
695 'priority' => 1,
696 'fields' => [
697 'category_title_link' => [
698 'name' => 'category_title_link',
699 'type' => 'toggle',
700 'label' => __( 'Category Title Link', 'betterdocs' ),
701 'label_subtitle' => __( 'This setting is applicable for category grid layout', 'betterdocs' ),
702 'enable_disable_text_active' => true,
703 'default' => false,
704 'priority' => 0
705 ],
706 'masonry_layout' => [
707 'name' => 'masonry_layout',
708 'type' => 'toggle',
709 'label' => __( 'Masonry', 'betterdocs' ),
710 'enable_disable_text_active' => true,
711 'default' => 1,
712 'priority' => 1
713 ],
714 'nested_subcategory' => [
715 'name' => 'nested_subcategory',
716 'type' => 'toggle',
717 'label' => __( 'Nested Sub Category', 'betterdocs' ),
718 'enable_disable_text_active' => true,
719 'default' => '',
720 'priority' => 2
721 ],
722 'column_number' => [
723 'name' => 'column_number',
724 'type' => 'number',
725 'label' => __( 'Number Of Columns', 'betterdocs' ),
726 'default' => 3,
727 'priority' => 3
728 ],
729 'posts_number' => apply_filters( 'betterdocs_posts_number', [
730 'name' => 'posts_number',
731 'type' => 'number',
732 'label' => __( 'Number Of Docs', 'betterdocs' ),
733 'label_subtitle' => __( 'This setting is not applicable for handbook layout.', 'betterdocs' ),
734 'default' => 10,
735 'priority' => 4
736 ] ),
737 'post_count' => [
738 'name' => 'post_count',
739 'type' => 'toggle',
740 'label' => __( 'Doc Count', 'betterdocs' ),
741 'enable_disable_text_active' => true,
742 'default' => 1,
743 'priority' => 5
744 ],
745 'count_text' => [
746 'name' => 'count_text',
747 'type' => 'text',
748 'label' => __( 'Count Text', 'betterdocs' ),
749 'default' => __( 'docs', 'betterdocs' ),
750 'priority' => 6
751 ],
752 'count_text_singular' => [
753 'name' => 'count_text_singular',
754 'type' => 'text',
755 'label' => __( 'Count Text Singular', 'betterdocs' ),
756 'default' => __( 'doc', 'betterdocs' ),
757 'priority' => 7
758 ],
759 'exploremore_btn' => [
760 'name' => 'exploremore_btn',
761 'type' => 'toggle',
762 'label' => __( 'Explore More Button', 'betterdocs' ),
763 'enable_disable_text_active' => true,
764 'default' => true,
765 'priority' => 8
766 ],
767 'exploremore_btn_txt' => [
768 'name' => 'exploremore_btn_txt',
769 'type' => 'text',
770 'label' => __( 'Explore More Button Text', 'betterdocs' ),
771 'default' => __( 'Explore More', 'betterdocs' ),
772 'priority' => 9,
773 'rules' => Rules::is( 'exploremore_btn', true )
774 ],
775 'betterdocs_popular_docs_text' => [
776 'name' => 'betterdocs_popular_docs_text',
777 'type' => 'text',
778 'label' => __( 'Popular Docs Text', 'betterdocs' ),
779 'default' => __( 'Popular Docs', 'betterdocs' ),
780 'priority' => 10,
781 "is_pro" => true
782 ],
783 'betterdocs_popular_docs_number' => [
784 'name' => 'betterdocs_popular_docs_number',
785 'type' => 'number',
786 'label' => __( 'Popular Docs Number', 'betterdocs' ),
787 'default' => 10,
788 'priority' => 11,
789 "is_pro" => true
790 ]
791 ]
792 ],
793 'layout_documentation_page_search' => [
794 'id' => 'layout_documentation_page_search',
795 'name' => 'layout_documentation_page_search',
796 'type' => 'section',
797 'label' => __( 'Search', 'betterdocs' ),
798 'priority' => 2,
799 'fields' => [
800 'live_search' => [
801 'name' => 'live_search',
802 'type' => 'toggle',
803 'label' => __( 'Live Search', 'betterdocs' ),
804 'enable_disable_text_active' => true,
805 'default' => 1,
806 'priority' => 1
807 ],
808 'advance_search' => apply_filters( 'betterdocs_advance_search_settings', [
809 'name' => 'advance_search',
810 'type' => 'toggle',
811 'label' => __( 'Advanced Search', 'betterdocs' ),
812 'enable_disable_text_active' => true,
813 'default' => '',
814 'priority' => 2,
815 'is_pro' => true
816 ] ),
817 'child_category_exclude' => apply_filters( 'child_category_exclude', [
818 'name' => 'child_category_exclude',
819 'type' => 'toggle',
820 'label' => __( 'Category Search', 'betterdocs' ),
821 'enable_disable_text_active' => true,
822 'default' => '',
823 'priority' => 3,
824 'is_pro' => true
825 ] ),
826 'popular_keyword_limit' => apply_filters( 'betterdocs_popular_keyword_limit_settings', [
827 'name' => 'popular_keyword_limit',
828 'type' => 'number',
829 'label' => __( 'Minimum amount of Keywords Search', 'betterdocs' ),
830 'default' => 5,
831 'priority' => 4,
832 'is_pro' => true
833 ] ),
834 'search_letter_limit' => [
835 'name' => 'search_letter_limit',
836 'type' => 'number',
837 'label' => __( 'Minimum Character Limit For Search Result', 'betterdocs' ),
838 'priority' => 5,
839 'default' => 3
840 ],
841 'search_placeholder' => [
842 'name' => 'search_placeholder',
843 'type' => 'text',
844 'label' => __( 'Search Placeholder', 'betterdocs' ),
845 'default' => __( 'Search..', 'betterdocs' ),
846 'priority' => 6
847 ],
848 'search_button_text' => apply_filters( 'betterdocs_search_button_text', [
849 'name' => 'search_button_text',
850 'type' => 'text',
851 'label' => __( 'Search Button Text', 'betterdocs' ),
852 'priority' => 7,
853 'default' => __( 'Search', 'betterdocs' ),
854 'is_pro' => true
855 ] ),
856 'search_not_found_text' => [
857 'name' => 'search_not_found_text',
858 'type' => 'text',
859 'label' => __( 'Search Not Found Text', 'betterdocs' ),
860 'default' => 'Sorry, no docs were found.',
861 'priority' => 8
862 ],
863 'search_result_image' => [
864 'name' => 'search_result_image',
865 'type' => 'toggle',
866 'label' => __( 'Search Result Image', 'betterdocs' ),
867 'enable_disable_text_active' => true,
868 'default' => 1,
869 'priority' => 9
870 ],
871 'kb_based_search' => apply_filters( 'betterdocs_kb_based_search_settings', [
872 'name' => 'kb_based_search',
873 'type' => 'toggle',
874 'label' => __( 'KB Based Search', 'betterdocs' ),
875 'enable_disable_text_active' => true,
876 'default' => '',
877 'priority' => 10,
878 'is_pro' => true,
879 'rules' => Rules::is( 'multiple_kb', true )
880 ] )
881 ]
882 ],
883 'layout_documentation_page_order_by' => [
884 'id' => 'layout_documentation_page_order_by',
885 'name' => 'layout_documentation_page_order_by',
886 'type' => 'section',
887 'label' => __( 'Order By', 'betterdocs' ),
888 'priority' => 3,
889 'fields' => [
890 'terms_orderby' => [
891 'name' => 'terms_orderby',
892 'type' => 'select',
893 'label' => __( 'Terms Order By', 'betterdocs' ),
894 'default' => 'betterdocs_order',
895 'options' => $this->normalize_options(
896 apply_filters( 'betterdocs_terms_orderby_options', [
897 'none' => __( 'No order', 'betterdocs' ),
898 'name' => __( 'Name', 'betterdocs' ),
899 'slug' => __( 'Slug', 'betterdocs' ),
900 'term_group' => __( 'Term Group', 'betterdocs' ),
901 'term_id' => __( 'Term ID', 'betterdocs' ),
902 'id' => __( 'ID', 'betterdocs' ),
903 'description' => __( 'Description', 'betterdocs' ),
904 'parent' => __( 'Parent', 'betterdocs' ),
905 'betterdocs_order' => __( 'BetterDocs Order', 'betterdocs' )
906 ] )
907 ),
908 'priority' => 1
909 ],
910 'terms_order' => [
911 'name' => 'terms_order',
912 'type' => 'select',
913 'label' => __( 'Terms Order', 'betterdocs' ),
914 'default' => 'ASC',
915 'options' => $this->normalize_options( [
916 'ASC' => 'Ascending',
917 'DESC' => 'Descending'
918 ] ),
919 'priority' => 3
920 ],
921 'alphabetically_order_post' => [
922 'name' => 'alphabetically_order_post',
923 'type' => 'select',
924 'label' => __( 'Docs Order By', 'betterdocs' ),
925 'default' => 'betterdocs_order',
926 'options' => $this->normalize_options( [
927 'none' => __( 'No order', 'betterdocs' ),
928 'ID' => __( 'Docs ID', 'betterdocs' ),
929 'author' => __( 'Docs Author', 'betterdocs' ),
930 'title' => __( 'Title', 'betterdocs' ),
931 'date' => __( 'Date', 'betterdocs' ),
932 'modified' => __( 'Last Modified Date', 'betterdocs' ),
933 'parent' => __( 'Parent Id', 'betterdocs' ),
934 'rand' => __( 'Random', 'betterdocs' ),
935 'comment_count' => __( 'Comment Count', 'betterdocs' ),
936 'menu_order' => __( 'Menu Order', 'betterdocs' ),
937 'betterdocs_order' => __( 'BetterDocs Order', 'betterdocs' )
938 ] ),
939 'priority' => 4
940 ],
941 'docs_order' => [
942 'name' => 'docs_order',
943 'type' => 'select',
944 'label' => __( 'Docs Order', 'betterdocs' ),
945 'default' => 'ASC',
946 'options' => $this->normalize_options( [
947 'ASC' => 'Ascending',
948 'DESC' => 'Descending'
949 ] ),
950 'priority' => 5
951 ]
952 ]
953 ]
954 ]
955 ]
956 ]
957 ],
958 'layout_single_doc' => [
959 'id' => 'layout_single_doc',
960 'name' => 'layout_single_doc',
961 'type' => 'section',
962 'label' => __( 'Single Doc', 'betterdocs' ),
963 'priority' => 2,
964 'fields' => [
965 'tab-nested-layout-2' => [
966 'id' => 'tab-nested-layout-2',
967 'name' => 'tab_nested_layout_2',
968 'label' => __( 'Single Doc', 'betterdocs' ),
969 'classes' => 'tab-nested-layout',
970 'type' => "tab",
971 'active' => "layout_single_doc_general",
972 'completionTrack' => true,
973 'sidebar' => false,
974 'save' => false,
975 'title' => false,
976 'config' => [
977 'active' => 'layout_single_doc_general',
978 'sidebar' => false,
979 'title' => false
980 ],
981 'submit' => [
982 'show' => false
983 ],
984 'step' => [
985 'show' => false
986 ],
987 'priority' => 20,
988 'fields' => [
989 'layout_single_doc_general' => [
990 'id' => 'layout_single_doc_general',
991 'name' => 'layout_single_doc_general',
992 'type' => 'section',
993 'label' => __( 'General', 'betterdocs' ),
994 'priority' => 5,
995 'fields' => [
996 'enable_post_title' => [
997 'name' => 'enable_post_title',
998 'type' => 'toggle',
999 'label' => __( 'Doc Title', 'betterdocs' ),
1000 'enable_disable_text_active' => true,
1001 'default' => 1,
1002 'priority' => 1
1003 ],
1004 'enable_sidebar_cat_list' => [
1005 'name' => 'enable_sidebar_cat_list',
1006 'type' => 'toggle',
1007 'label' => __( 'Sidebar Category List', 'betterdocs' ),
1008 'enable_disable_text_active' => true,
1009 'default' => 1,
1010 'priority' => 2
1011 ],
1012 'enable_print_icon' => [
1013 'name' => 'enable_print_icon',
1014 'type' => 'toggle',
1015 'label' => __( 'Print Icon', 'betterdocs' ),
1016 'enable_disable_text_active' => true,
1017 'default' => 1,
1018 'priority' => 3
1019 ],
1020 'enable_tags' => [
1021 'name' => 'enable_tags',
1022 'type' => 'toggle',
1023 'label' => __( 'Tags', 'betterdocs' ),
1024 'enable_disable_text_active' => true,
1025 'default' => 1,
1026 'priority' => 4
1027 ],
1028 'show_last_update_time' => [
1029 'name' => 'show_last_update_time',
1030 'type' => 'toggle',
1031 'label' => __( 'Last Update Time', 'betterdocs' ),
1032 'enable_disable_text_active' => true,
1033 'default' => 1,
1034 'priority' => 5
1035 ],
1036 'enable_navigation' => [
1037 'name' => 'enable_navigation',
1038 'type' => 'toggle',
1039 'label' => __( 'Navigation', 'betterdocs' ),
1040 'enable_disable_text_active' => true,
1041 'default' => 1,
1042 'priority' => 6
1043 ],
1044 'enable_comment' => [
1045 'name' => 'enable_comment',
1046 'type' => 'toggle',
1047 'label' => __( 'Comment', 'betterdocs' ),
1048 'enable_disable_text_active' => true,
1049 'default' => '',
1050 'priority' => 7
1051 ],
1052 'enable_credit' => [
1053 'name' => 'enable_credit',
1054 'type' => 'toggle',
1055 'label' => __( 'Credit', 'betterdocs' ),
1056 'enable_disable_text_active' => true,
1057 'default' => 1,
1058 'priority' => 8
1059 ]
1060 ]
1061 ],
1062 'layout_single_doc_TOC' => [
1063 'id' => 'layout_single_doc_TOC',
1064 'name' => 'layout_single_doc_TOC',
1065 'type' => 'section',
1066 'label' => __( 'TOC', 'betterdocs' ),
1067 'priority' => 5,
1068 'fields' => [
1069 'enable_toc' => [
1070 'name' => 'enable_toc',
1071 'type' => 'toggle',
1072 'label' => __( 'Table of Contents', 'betterdocs' ),
1073 'enable_disable_text_active' => true,
1074 'default' => 1,
1075 'priority' => 1
1076 ],
1077 'toc_title' => [
1078 'name' => 'toc_title',
1079 'type' => 'text',
1080 'label' => __( 'TOC Title', 'betterdocs' ),
1081 'default' => __( 'Table of Contents', 'betterdocs' ),
1082 'priority' => 2,
1083 'rules' => Rules::is( 'enable_toc', true )
1084
1085 ],
1086 'toc_hierarchy' => [
1087 'name' => 'toc_hierarchy',
1088 'type' => 'toggle',
1089 'label' => __( 'TOC Hierarchy', 'betterdocs' ),
1090 'enable_disable_text_active' => true,
1091 'default' => 1,
1092 'priority' => 3,
1093 'rules' => Rules::is( 'enable_toc', true )
1094 ],
1095 'toc_list_number' => [
1096 'name' => 'toc_list_number',
1097 'type' => 'toggle',
1098 'label' => __( 'TOC List Number', 'betterdocs' ),
1099 'enable_disable_text_active' => true,
1100 'default' => 1,
1101 'priority' => 4,
1102 'rules' => Rules::is( 'enable_toc', true )
1103 ],
1104 'toc_dynamic_title' => [
1105 'name' => 'toc_dynamic_title',
1106 'type' => 'toggle',
1107 'label' => __( 'Show TOC Title in Anchor Links', 'betterdocs' ),
1108 'enable_disable_text_active' => true,
1109 'default' => 0,
1110 'priority' => 5,
1111 'rules' => Rules::is( 'enable_toc', true )
1112 ],
1113 'enable_sticky_toc' => [
1114 'name' => 'enable_sticky_toc',
1115 'type' => 'toggle',
1116 'label' => __( 'Sticky TOC', 'betterdocs' ),
1117 'enable_disable_text_active' => true,
1118 'default' => 1,
1119 'priority' => 6,
1120 'rules' => Rules::is( 'enable_toc', true )
1121 ],
1122 'collapsible_toc_mobile' => [
1123 'name' => 'collapsible_toc_mobile',
1124 'type' => 'toggle',
1125 'label' => __( 'Collapsible TOC on small devices', 'betterdocs' ),
1126 'enable_disable_text_active' => true,
1127 'default' => '',
1128 'priority' => 7,
1129 'rules' => Rules::is( 'enable_toc', true )
1130 ],
1131 'title_link_ctc' => [
1132 'name' => 'title_link_ctc',
1133 'type' => 'toggle',
1134 'label' => __( 'Title Link Copy To Clipboard', 'betterdocs' ),
1135 'enable_disable_text_active' => true,
1136 'default' => 1,
1137 'priority' => 8
1138 ],
1139 'supported_heading_tag' => [
1140 'name' => 'supported_heading_tag',
1141 'label' => __( 'TOC Supported Heading Tag', 'betterdocs' ),
1142 'type' => 'checkbox-select',
1143 'multiple' => true,
1144 'priority' => 10,
1145 'default' => ['1', '2', '3', '4', '5', '6'],
1146 'options' => $this->normalize_options( [
1147 '1' => 'H1',
1148 '2' => 'H2',
1149 '3' => 'H3',
1150 '4' => 'H4',
1151 '5' => 'H5',
1152 '6' => 'H6'
1153 ] ),
1154 'priority' => 9,
1155 'rules' => Rules::is( 'enable_toc', true )
1156 ],
1157 'sticky_toc_offset' => [
1158 'name' => 'sticky_toc_offset',
1159 'type' => 'number',
1160 'label' => __( 'Content Offset', 'betterdocs' ),
1161 'default' => 100,
1162 'priority' => 10,
1163 'label_subtitle' => __( 'content offset from top on scroll.', 'betterdocs' ),
1164 'rules' => Rules::is( 'enable_toc', true )
1165 ]
1166 ]
1167 ],
1168 'layout_single_doc_breadcrumb' => [
1169 'id' => 'layout_single_doc_breadcrumb',
1170 'name' => 'layout_single_doc_breadcrumb',
1171 'type' => 'section',
1172 'label' => __( 'Breadcrumb', 'betterdocs' ),
1173 'priority' => 5,
1174 'fields' => [
1175 'enable_breadcrumb' => [
1176 'name' => 'enable_breadcrumb',
1177 'type' => 'toggle',
1178 'label' => __( 'Breadcrumb', 'betterdocs' ),
1179 'enable_disable_text_active' => true,
1180 'default' => 1,
1181 'priority' => 1
1182 ],
1183 'breadcrumb_home_text' => [
1184 'name' => 'breadcrumb_home_text',
1185 'type' => 'text',
1186 'label' => __( 'Breadcrumb Home Text', 'betterdocs' ),
1187 'default' => __( 'Home', 'betterdocs' ),
1188 'priority' => 2,
1189 'rules' => Rules::is( 'enable_breadcrumb', true )
1190 ],
1191 'breadcrumb_home_url' => [
1192 'name' => 'breadcrumb_home_url',
1193 'type' => 'text',
1194 'label' => __( 'Breadcrumb Home URL', 'betterdocs' ),
1195 'priority' => 3,
1196 'default' => get_home_url(),
1197 'rules' => Rules::is( 'enable_breadcrumb', true )
1198 ],
1199 'enable_breadcrumb_category' => [
1200 'name' => 'enable_breadcrumb_category',
1201 'type' => 'toggle',
1202 'label' => __( 'Category on Breadcrumb', 'betterdocs' ),
1203 'enable_disable_text_active' => true,
1204 'default' => 1,
1205 'priority' => 4,
1206 'rules' => Rules::is( 'enable_breadcrumb', true )
1207 ],
1208 'enable_breadcrumb_title' => [
1209 'name' => 'enable_breadcrumb_title',
1210 'type' => 'toggle',
1211 'label' => __( 'Title on Breadcrumb', 'betterdocs' ),
1212 'enable_disable_text_active' => true,
1213 'default' => 1,
1214 'priority' => 5,
1215 'rules' => Rules::is( 'enable_breadcrumb', true )
1216 ]
1217 ]
1218 ],
1219 'layout_single_doc_email_feedback' => [
1220 'id' => 'layout_single_doc_email_feedback',
1221 'name' => 'layout_single_doc_email_feedback',
1222 'type' => 'section',
1223 'label' => __( 'Email Feedback', 'betterdocs' ),
1224 'priority' => 5,
1225 'fields' => [
1226 'email_feedback' => [
1227 'name' => 'email_feedback',
1228 'type' => 'toggle',
1229 'label' => __( 'Email Feedback', 'betterdocs' ),
1230 'enable_disable_text_active' => true,
1231 'default' => 1,
1232 'priority' => 1
1233 ],
1234 'feedback_link_text' => [
1235 'name' => 'feedback_link_text',
1236 'type' => 'text',
1237 'label' => __( 'Feedback Link Text', 'betterdocs' ),
1238 'default' => __( 'Still stuck? How can we help?', 'betterdocs' ),
1239 'priority' => 2,
1240 'rules' => Rules::is( 'email_feedback', true )
1241 ],
1242 'feedback_form_title' => [
1243 'name' => 'feedback_form_title',
1244 'type' => 'text',
1245 'label' => __( 'Feedback Form Title', 'betterdocs' ),
1246 'default' => __( 'Still stuck? How can we help?', 'betterdocs' ),
1247 'priority' => 3,
1248 'rules' => Rules::is( 'email_feedback', true )
1249 ],
1250 'email_address' => [
1251 'name' => 'email_address',
1252 'type' => 'text',
1253 'label' => __( 'Email Address', 'betterdocs' ),
1254 'default' => get_option( 'admin_email' ),
1255 'priority' => 4,
1256 'label_subtitle' => __( 'The email address where the Feedback form will be sent', 'betterdocs' ),
1257 'rules' => Rules::is( 'email_feedback', true )
1258 ],
1259 'feedback_url' => [
1260 'name' => 'feedback_url',
1261 'type' => 'text',
1262 'label' => __( 'Feedback URL', 'betterdocs' ),
1263 'default' => '',
1264 'priority' => 5,
1265 'rules' => Rules::is( 'email_feedback', true )
1266 ]
1267 ]
1268 ]
1269 ]
1270 ]
1271 ]
1272 ],
1273 'layout_archive_page' => [
1274 'id' => 'layout_archive_page',
1275 'name' => 'layout_archive_page',
1276 'type' => 'section',
1277 'label' => __( 'Archive Page', 'betterdocs' ),
1278 'priority' => 3,
1279 'fields' => [
1280 'enable_archive_sidebar' => [
1281 'name' => 'enable_archive_sidebar',
1282 'type' => 'toggle',
1283 'label' => __( 'Sidebar Category List', 'betterdocs' ),
1284 'enable_disable_text_active' => true,
1285 'default' => 1,
1286 'priority' => 31
1287 ],
1288 'archive_nested_subcategory' => [
1289 'name' => 'archive_nested_subcategory',
1290 'type' => 'toggle',
1291 'label' => __( 'Nested Subcategory', 'betterdocs' ),
1292 'enable_disable_text_active' => true,
1293 'default' => 1,
1294 'priority' => 32
1295 ]
1296 ]
1297 ]
1298 ]
1299 ] )
1300 ]
1301 ]
1302 ]
1303 ] ),
1304 'tab-design' => apply_filters( 'betterdocs_settings_tab_design', [
1305 'id' => 'tab-design',
1306 'label' => __( 'Design', 'betterdocs' ),
1307 'priority' => 30,
1308 'fields' => [
1309 'title-design' => [
1310 'name' => 'title-design-tab',
1311 'type' => 'section',
1312 'label' => __( 'Design', 'betterdocs' ),
1313 'priority' => 30,
1314 'fields' => [
1315 'customizer_link' => [
1316 'name' => 'customizer_link',
1317 'type' => 'action',
1318 'action' => 'betterdocs_settings_customizer_link',
1319 'label' => __( 'Customize BetterDocs', 'betterdocs' ),
1320 'url' => $this->customizer_link(),
1321 'customizer_img' => betterdocs()->assets->icon( 'customizer/betterdocs-customize.png', true ),
1322 'priority' => 1
1323 ]
1324 ]
1325 ]
1326 ]
1327 ] ),
1328 'tab-shortcodes' => apply_filters( 'betterdocs_settings_tab_shortcodes', [
1329 'label' => __( 'Shortcodes', 'betterdocs' ),
1330 'id' => 'tab-shortcodes',
1331 'classes' => 'tab-shortcodes',
1332 'priority' => 40,
1333 'fields' => [
1334 'title-shortcodes' => [
1335 'name' => 'title-shortcodes-tab',
1336 'type' => 'section',
1337 'label' => __( 'Shortcodes', 'betterdocs' ),
1338 'priority' => 40,
1339 'searchable' => true,
1340 'searchPlaceholder' => __( 'Search for shortcode', 'betterdocs' ),
1341 'searchNotFoundMessage' => '<img src="' . betterdocs()->assets->icon( 'not-found.svg', true ) . '"/><p>' . __( 'No Shortcodes Found with these keywords', 'betterdocs' ) . '</p>',
1342 'fields' => apply_filters( 'betterdocs_shortcode_fields', [
1343 'search_form' => [
1344 'name' => 'search_form',
1345 'type' => 'copy-to-clipboard',
1346 'label' => __( 'Search Form', 'betterdocs' ),
1347 'default' => '[betterdocs_search_form]',
1348 'readOnly' => true,
1349 'priority' => 1,
1350 'description' => __( '[betterdocs_search_form placeholder="Search..." heading="Heading" subheading="Subheading" category_search="true" search_button="true" popular_search="true"]', 'betterdocs' ),
1351 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1352 'descriptionCopyable' => true
1353 ],
1354 'feedback_form' => [
1355 'name' => 'feedback_form',
1356 'type' => 'copy-to-clipboard',
1357 'label' => __( 'Feedback Form', 'betterdocs' ),
1358 'default' => '[betterdocs_feedback_form]',
1359 'readOnly' => true,
1360 'priority' => 2,
1361 'description' => __( '[betterdocs_feedback_form button_text="Send"]', 'betterdocs' ),
1362 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1363 'descriptionCopyable' => true
1364 ],
1365 'category_grid' => [
1366 'name' => 'category_grid',
1367 'type' => 'copy-to-clipboard',
1368 'label' => __( 'Category Grid- Layout 1', 'betterdocs' ),
1369 'default' => '[betterdocs_category_grid]',
1370 'readOnly' => true,
1371 'priority' => 3,
1372 'description' => __( '[betterdocs_category_grid post_counter="true" show_icon="true" masonry="true" column="3" posts_per_page="5" nested_subcategory="true" terms="term_ID, term_ID" terms_orderby="" terms_order="" multiple_knowledge_base="" kb_slug="" title_tag="h2" orderby="" order="" ]', 'betterdocs' ),
1373 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1374 'descriptionCopyable' => true
1375 ],
1376 'category_box' => [
1377 'name' => 'category_box',
1378 'type' => 'copy-to-clipboard',
1379 'label' => __( 'Category Box- Layout 2', 'betterdocs' ),
1380 'default' => '[betterdocs_category_box]',
1381 'readOnly' => true,
1382 'priority' => 4,
1383 'description' => __( '[betterdocs_category_box orderby="" column="" nested_subcategory="" terms="" terms_orderby="" show_icon="" kb_slug="" title_tag="h2" multiple_knowledge_base="false" border_bottom="false"]', 'betterdocs' ),
1384 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1385 'descriptionCopyable' => true
1386 ],
1387 'category_list' => [
1388 'name' => 'category_list',
1389 'type' => 'copy-to-clipboard',
1390 'label' => __( 'Category List', 'betterdocs' ),
1391 'default' => '[betterdocs_category_list]',
1392 'readOnly' => true,
1393 'priority' => 5,
1394 'description' => __( '[betterdocs_category_list orderby="" order="" posts_per_page="" nested_subcategory="" terms="" terms_orderby="" terms_order="" kb_slug="" multiple_knowledge_base="false" title_tag="h2"]', 'betterdocs' ),
1395 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1396 'descriptionCopyable' => true
1397 ],
1398 'faq_modern_layout' => [
1399 'name' => 'faq_modern_layout',
1400 'type' => 'copy-to-clipboard',
1401 'label' => __( 'FAQ Layout - 1', 'betterdocs' ),
1402 'default' => '[betterdocs_faq_list_modern]',
1403 'readOnly' => true,
1404 'priority' => 13,
1405 'description' => __( '[betterdocs_faq_list_modern groups="group_id" class="" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1406 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1407 'descriptionCopyable' => true
1408 ],
1409 'faq_classic_layout' => [
1410 'name' => 'faq_classic_layout',
1411 'type' => 'copy-to-clipboard',
1412 'label' => __( 'FAQ Layout - 2', 'betterdocs' ),
1413 'default' => '[betterdocs_faq_list_classic]',
1414 'readOnly' => true,
1415 'priority' => 14,
1416 'description' => __( '[betterdocs_faq_list_classic groups="group_id" class="" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1417 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1418 'descriptionCopyable' => true
1419 ]
1420 ] )
1421 ]
1422 ]
1423 ] ),
1424 'tab-advance-settings' => apply_filters( 'betterdocs_settings_tab_advance', [
1425 'id' => 'tab-advance-settings',
1426 'label' => __( 'Advanced Settings', 'betterdocs' ),
1427 'priority' => 50,
1428 'fields' => [
1429 'title-advance-settings' => [
1430 'name' => 'title-advance-settings-tab',
1431 'type' => 'section',
1432 'label' => __( 'Advanced Settings', 'betterdocs' ),
1433 'priority' => 50,
1434 'fields' => apply_filters( 'betterdocs_internal_kb_fields', [
1435 'article_roles' => [
1436 'name' => 'article_roles',
1437 'type' => 'checkbox-select',
1438 'label' => __( 'Who Can Write Docs?', 'betterdocs' ),
1439 'priority' => 1,
1440 'multiple' => true,
1441 'search' => true,
1442 'is_pro' => true,
1443 'default' => ['administrator'],
1444 'options' => $wp_roles
1445 ],
1446 'settings_roles' => [
1447 'name' => 'settings_roles',
1448 'type' => 'checkbox-select',
1449 'label' => __( 'Who Can Edit Settings?', 'betterdocs' ),
1450 'priority' => 2,
1451 'multiple' => true,
1452 'is_pro' => true,
1453 'search' => true,
1454 'default' => ['administrator'],
1455 'options' => $wp_roles
1456 ],
1457 'analytics_roles' => [
1458 'name' => 'analytics_roles',
1459 'type' => 'checkbox-select',
1460 'label' => __( 'Who Can Check Analytics?', 'betterdocs' ),
1461 'priority' => 3,
1462 'multiple' => true,
1463 'is_pro' => true,
1464 'search' => true,
1465 'default' => ['administrator'],
1466 'options' => $wp_roles
1467 ],
1468 'enable_content_restriction' => [
1469 'name' => 'enable_content_restriction',
1470 'type' => 'toggle',
1471 'is_pro' => true,
1472 'priority' => 4,
1473 'label' => __( 'Internal Knowledge Base', 'betterdocs' ),
1474 'enable_disable_text_active' => true,
1475 'default' => ['all']
1476 ],
1477 'content_visibility' => [
1478 'name' => 'content_visibility',
1479 'type' => 'checkbox-select',
1480 'label' => __( 'Restrict Access to', 'betterdocs' ),
1481 'label_subtitle' => __( 'Only selected User Roles will be able to view your Knowledge Base', 'betterdocs' ),
1482 'is_pro' => true,
1483 'priority' => 5,
1484 'multiple' => true,
1485 'search' => true,
1486 'default' => ['all'],
1487 'placeholder' => __( 'Select any', 'betterdocs' ),
1488 'options' => $this->normalize_options( array_merge( [
1489 'all' => __( 'All logged in users', 'betterdocs' )
1490 ], wp_roles()->role_names ) ),
1491 'rules' => Rules::is( 'enable_content_restriction', true ),
1492 'filterValue' => 'all'
1493 ],
1494 'restrict_template' => [
1495 'name' => 'restrict_template',
1496 'type' => 'checkbox-select',
1497 'label' => __( 'Restriction on Docs', 'betterdocs' ),
1498 'label_subtitle' => __( 'Selected Docs pages will be restricted', 'betterdocs' ),
1499 'is_pro' => true,
1500 'priority' => 6,
1501 'multiple' => true,
1502 'search' => true,
1503 'default' => ['all'],
1504 'placeholder' => __( 'Select any', 'betterdocs' ),
1505 'options' => $this->get_texanomy(),
1506 'rules' => Rules::is( 'enable_content_restriction', true ),
1507 'filterValue' => 'all'
1508 ],
1509 'restrict_category' => [
1510 'name' => 'restrict_category',
1511 'type' => 'checkbox-select',
1512 'label' => __( 'Restriction on Docs Categories', 'betterdocs' ),
1513 'label_subtitle' => __( 'Selected Docs categories will be restricted', 'betterdocs' ),
1514 'is_pro' => true,
1515 'priority' => 7,
1516 'multiple' => true,
1517 'search' => true,
1518 'default' => ['all'],
1519 'placeholder' => __( 'Select any', 'betterdocs' ),
1520 'options' => $this->get_terms( 'doc_category' ),
1521 'rules' => Rules::is( 'enable_content_restriction', true ),
1522 'filterValue' => 'all'
1523 ],
1524 'restricted_redirect_url' => [
1525 'name' => 'restricted_redirect_url',
1526 'type' => 'text',
1527 'label' => __( 'Redirect URL', 'betterdocs' ),
1528 'label_subtitle' => __( 'Set a custom URL to redirect users without permissions when they try to access internal knowledge base. By default, restricted content will redirect to the "404 not found" page', 'betterdocs' ),
1529 'default' => '',
1530 'placeholder' => 'https://',
1531 'is_pro' => true,
1532 'priority' => 9,
1533 'rules' => Rules::is( 'enable_content_restriction', true )
1534 ]
1535 ] )
1536 ]
1537 ]
1538 ] ),
1539 'tab-email-reporting' => apply_filters( 'betterdocs_settings_tab_email_reporting', [
1540 'id' => 'tab-email-reporting',
1541 'label' => __( 'Email Reporting', 'betterdocs' ),
1542 'priority' => 60,
1543 'fields' => [
1544 'title-email-reporting' => [
1545 'name' => 'title-email-reporting-tab',
1546 'type' => 'section',
1547 'label' => __( 'Email Reporting', 'betterdocs' ),
1548 'priority' => 60,
1549 'fields' => [
1550 'enable_reporting' => [
1551 'name' => 'enable_reporting',
1552 'label' => __( 'Email Reporting', 'betterdocs' ),
1553 'enable_disable_text_active' => true,
1554 'type' => 'toggle',
1555 'priority' => 1,
1556 'default' => 0
1557 ],
1558 'reporting_frequency' => apply_filters( 'betterdocs_reporting_frequency_settings', [
1559 'name' => 'reporting_frequency',
1560 'type' => 'select',
1561 'label' => __( 'Reporting Frequency', 'betterdocs' ),
1562 'default' => 'betterdocs_weekly',
1563 'priority' => 2,
1564 'is_pro' => true,
1565 'options' => $this->normalize_options( [
1566 'betterdocs_daily' => __( 'Once Daily', 'betterdocs' ),
1567 'betterdocs_weekly' => __( 'Once Weekly', 'betterdocs' ),
1568 'betterdocs_monthly' => __( 'Once Monthly', 'betterdocs' )
1569 ] ),
1570 'rules' => Rules::is( 'enable_reporting', true )
1571 ] ),
1572 'reporting_day' => [
1573 'name' => 'reporting_day',
1574 'type' => 'select',
1575 'label' => __( 'Reporting Day', 'betterdocs' ),
1576 'default' => 'monday',
1577 'rules' => Rules::logicalRule( [
1578 Rules::is( 'enable_reporting', true ),
1579 Rules::is( 'reporting_frequency', 'betterdocs_weekly' )
1580 ], 'and' ),
1581 'priority' => 3,
1582 'options' => $this->normalize_options( [
1583 'sunday' => __( 'Sunday', 'betterdocs' ),
1584 'monday' => __( 'Monday', 'betterdocs' ),
1585 'tuesday' => __( 'Tuesday', 'betterdocs' ),
1586 'wednesday' => __( 'Wednesday', 'betterdocs' ),
1587 'thursday' => __( 'Thursday', 'betterdocs' ),
1588 'friday' => __( 'Friday', 'betterdocs' ),
1589 'saturday' => __( 'Saturday', 'betterdocs' )
1590 ] ),
1591 'label_subtitle' => __( 'This is only applicable for the “Weekly” report', 'betterdocs' )
1592 ],
1593 'select_reporting_data' => apply_filters( 'betterdocs_select_reporting_data_settings', [
1594 'name' => 'select_reporting_data',
1595 'type' => 'checkbox-select',
1596 'label' => __( 'Select Reporting Data', 'betterdocs' ),
1597 'priority' => 4,
1598 'multiple' => true,
1599 'options' => $this->normalize_options( [
1600 'overview' => 'Overview',
1601 'top-docs' => 'Top Docs',
1602 'most-search' => 'Most Searched Keywords'
1603 ] ),
1604 'default' => ['overview', 'top-docs', 'most-search'],
1605 'is_pro' => true,
1606 'rules' => Rules::is( 'enable_reporting', true )
1607 ] ),
1608 'reporting_email' => [
1609 'name' => 'reporting_email',
1610 'type' => 'text',
1611 'label' => __( 'Reporting Email', 'betterdocs' ),
1612 'default' => get_option( 'admin_email' ),
1613 'priority' => 5,
1614 'rules' => Rules::is( 'enable_reporting', true )
1615 ],
1616 'reporting_subject' => apply_filters( 'betterdocs_reporting_subject_settings', [
1617 'name' => 'reporting_subject',
1618 'type' => 'textarea',
1619 'label' => __( 'Reporting Email Subject', 'betterdocs' ),
1620 'default' => wp_sprintf( __( 'Your Documentation Performance of %s Website', 'betterdocs' ), get_bloginfo( 'name' ) ),
1621 'priority' => 6,
1622 'is_pro' => true,
1623 'rules' => Rules::is( 'enable_reporting', true )
1624 ] ),
1625 'test_report' => [
1626 'name' => 'test_report',
1627 'label' => __( 'Reporting Test', 'betterdocs' ),
1628 'text' => __( 'Test Report', 'betterdocs' ),
1629 'type' => 'button',
1630 'priority' => 7,
1631 'rules' => Rules::is( 'enable_reporting', true ),
1632 'ajax' => [
1633 'on' => 'click',
1634 'api' => '/betterdocs/v1/reporting-test',
1635 'data' => [
1636 'enable_reporting' => '@enable_reporting',
1637 'select_reporting_data' => '@select_reporting_data',
1638 'reporting_subject' => '@reporting_subject',
1639 'reporting_email' => '@reporting_email',
1640 'reporting_day' => '@reporting_day',
1641 'reporting_frequency' => '@reporting_frequency'
1642 ],
1643 'swal' => [
1644 'text' => __( 'Successfully Sent a Test Report in Your Email.', 'betterdocs' ),
1645 'icon' => 'success',
1646 'autoClose' => 2000
1647 ]
1648 ]
1649 ]
1650 ]
1651 ]
1652 ]
1653 ] ),
1654 'tab-instant-answer' => apply_filters( 'betterdocs_settings_tab_instant_answer', [
1655 'id' => 'tab-instant-answer',
1656 'name' => 'tab-instant-answer',
1657 'type' => 'section',
1658 'label' => __( 'Instant Answer', 'betterdocs' ),
1659 'save' => false,
1660 'priority' => 70,
1661 'fields' => [
1662 'title-instant-answer' => [
1663 'name' => 'title-instant-answer-tab',
1664 'type' => 'section',
1665 'label' => __( 'Instant Answer', 'betterdocs' ),
1666 'priority' => 80,
1667 'save' => false,
1668 'showSubmit' => false,
1669 'fields' => apply_filters( 'betterdocs_instant_answer_fields', [
1670 'enable_disable_wrapper' => [
1671 'name' => 'enable_disable_wrapper',
1672 'type' => 'section',
1673 'priority' => 0,
1674 'save' => false,
1675 'fields' => [
1676 'enable_disable' => [
1677 'name' => 'enable_disable',
1678 'type' => 'toggle',
1679 'priority' => 100,
1680 'description' => __( 'Enable Instant Answer', 'betterdocs' ),
1681 'enable_disable_text_active' => false,
1682 'default' => true,
1683 'is_pro' => true
1684 ]
1685 ]
1686 ]
1687 ] )
1688 ]
1689 ]
1690 ] ),
1691 'tab-import-export' => apply_filters( 'betterdocs_settings_tab_import_export', [
1692 'id' => 'tab-import-export',
1693 'name' => 'tab-import-export',
1694 'classes' => 'tab-import-export',
1695 'label' => __( 'Import / Export', 'betterdocs' ),
1696 'priority' => 80,
1697 'fields' => [
1698 'sections-import-export' => [
1699 'name' => 'sections-import-export',
1700 'type' => 'section',
1701 'label' => __( 'Import / Export', 'betterdocs' ),
1702 'priority' => 30,
1703 'fields' => [
1704 'all-tab-import-export' => [
1705 'id' => 'all-tab-import-export',
1706 'name' => 'all-tab-import-export',
1707 'label' => __( 'Import Export Settings', 'betterdocs' ),
1708 'classes' => 'tab-layout',
1709 'type' => "tab",
1710 'active' => "import",
1711 'completionTrack' => true,
1712 'sidebar' => false,
1713 'save' => false,
1714 'title' => false,
1715 'config' => [
1716 'active' => 'import',
1717 'sidebar' => false,
1718 'title' => false
1719 ],
1720 'submit' => [
1721 'show' => false
1722 ],
1723 'step' => [
1724 'show' => false
1725 ],
1726 'priority' => 20,
1727 'fields' => [
1728 'import' => [
1729 'id' => 'import',
1730 'name' => 'import',
1731 'type' => 'section',
1732 'label' => __( 'Import', 'betterdocs' ),
1733 'priority' => 1,
1734 'fields' => [
1735 'import_tab_nested' => [
1736 'id' => 'import_tab_nested',
1737 'name' => 'import_tab_nested',
1738 'label' => __( 'Import', 'betterdocs' ),
1739 'classes' => 'tab-nested-layout',
1740 'type' => "tab",
1741 'active' => "import_docs_nested",
1742 'completionTrack' => true,
1743 'sidebar' => false,
1744 'save' => false,
1745 'title' => false,
1746 'config' => [
1747 'active' => 'import_docs_nested',
1748 'sidebar' => false,
1749 'title' => false
1750 ],
1751 'submit' => [
1752 'show' => false
1753 ],
1754 'step' => [
1755 'show' => false
1756 ],
1757 'priority' => 1,
1758 'fields' => [
1759 'import_docs_nested' => [
1760 'id' => 'import_docs_nested',
1761 'name' => 'import_docs_nested',
1762 'type' => 'section',
1763 'label' => __( 'Import Docs', 'betterdocs' ),
1764 'priority' => 1,
1765 'fields' => [
1766 'import_docs' => array(
1767 'name' => 'import_docs',
1768 'type' => 'importerupload',
1769 'label' => __('Import Docs', 'betterdocs'),
1770 'label_subtitle' => __( 'To import your Docs, please upload the .xml file here', 'betterdocs' ),
1771 'text' => [
1772 'normal' => __('Proceed', 'betterdocs'),
1773 'saved' => __('Proceed', 'betterdocs'),
1774 'loading' => __('Importing...', 'betterdocs'),
1775 'exists_notice' => __('It seems like documentations with same slugs already exist on your website. What would you like to do?', 'betterdocs'),
1776 ],
1777 'ajax' => [
1778 'on' => 'click',
1779 'api' => '/betterdocs/v1/import-docs',
1780 'swal' => [
1781 'text' => __('Import completed successfully.', 'betterdocs'),
1782 'icon' => 'success',
1783 'autoClose' => 2000
1784 ],
1785 ],
1786 'file_type' => '.xml',
1787 'priority' => 1,
1788 'notImage' => true,
1789 ),
1790 ]
1791 ],
1792
1793 'import_settings_nested' => [
1794 'id' => 'import_settings_nested',
1795 'name' => 'import_settings_nested',
1796 'type' => 'section',
1797 'label' => __( 'Import Settings', 'betterdocs' ),
1798 'priority' => 1,
1799 'fields' => [
1800 'settings_importer' => array(
1801 'name' => 'settings_importer',
1802 'type' => 'settingsuploader',
1803 'label' => __('Import Settings', 'notificationx'),
1804 'label_subtitle' => __( 'To import BetterDocs Settings, please upload BetterDocs settings you have exported from another website in .json format', 'betterdocs' ),
1805 'reset' => __('Change', 'notificationx'),
1806 'priority' => 1,
1807 'notImage' => true,
1808 ),
1809 'import_settings' => array(
1810 'name' => 'import_settings',
1811 'type' => 'button',
1812 'rules' => Rules::is( 'settings_importer', null, true ),
1813 'text' => [
1814 'normal' => __('Proceed', 'betterdocs'),
1815 'saved' => __('Proceed', 'betterdocs'),
1816 'loading' => __('Importing...', 'betterdocs'),
1817 ],
1818 'ajax' => [
1819 'on' => 'click',
1820 'api' => '/betterdocs/v1/import-settings',
1821 'data' => [
1822 'settings' => '@settings_importer',
1823 ],
1824 'swal' => [
1825 'text' => __('Import completed successfully.', 'betterdocs'),
1826 'icon' => 'success',
1827 'autoClose' => 1000
1828 ],
1829 'reload' => true,
1830 ],
1831 'priority' => 2,
1832 'notImage' => true,
1833 ),
1834 ]
1835 ]
1836 ]
1837 ]
1838 ],
1839 ],
1840 'export' => [
1841 'id' => 'export',
1842 'name' => 'export',
1843 'type' => 'section',
1844 'label' => __( 'Export', 'betterdocs' ),
1845 'priority' => 1,
1846 'fields' => [
1847 'export_tab_nested' => [
1848 'id' => 'export_tab_nested',
1849 'name' => 'export_tab_nested',
1850 'label' => __( 'Export', 'betterdocs' ),
1851 'classes' => 'tab-nested-layout',
1852 'type' => "tab",
1853 'active' => "export_docs_nested",
1854 'completionTrack' => true,
1855 'sidebar' => false,
1856 'save' => false,
1857 'title' => false,
1858 'config' => [
1859 'active' => 'export_docs_nested',
1860 'sidebar' => false,
1861 'title' => false
1862 ],
1863 'submit' => [
1864 'show' => false
1865 ],
1866 'step' => [
1867 'show' => false
1868 ],
1869 'priority' => 1,
1870 'fields' => [
1871 'export_docs_nested' => [
1872 'id' => 'export_docs_nested',
1873 'name' => 'export_docs_nested',
1874 'type' => 'section',
1875 'label' => __( 'Export Docs', 'betterdocs' ),
1876 'priority' => 1,
1877 'fields' => apply_filters( 'betterdocs_export_fields', [
1878 'export_type' => [
1879 'name' => 'export_type',
1880 'label' => __( 'Select Type', 'betterdocs' ),
1881 'label_subtitle' => __( 'Choose an export type: All Docs, a specific Knowledge Base, or a Doc Category', 'betterdocs' ),
1882 'type' => 'select',
1883 'default' => 'docs',
1884 'priority' => 3,
1885 'search' => true,
1886 'options' => $this->normalize_options(
1887 apply_filters( 'betterdocs_export_type_options', [
1888 'docs' => __( 'Docs', 'betterdocs' ),
1889 'doc_category' => __( 'Docs Category', 'betterdocs' )
1890 ] )
1891 ),
1892 ],
1893 'export_docs' => [
1894 'name' => 'export_docs',
1895 'type' => 'checkbox-select',
1896 'label' => __( 'Select Docs', 'betterdocs' ),
1897 'label_subtitle' => __( 'Selected docs will be included in the export.', 'betterdocs' ),
1898 'priority' => 4,
1899 'multiple' => true,
1900 'search' => true,
1901 'default' => ['all'],
1902 'placeholder' => __( 'Select any', 'betterdocs' ),
1903 'options' => array_merge( [['value' => 'all', 'label' => 'All']], $this->docs() ),
1904 'filterValue' => 'all',
1905 'rules' => Rules::is( 'export_type', 'docs' ),
1906 ],
1907 'export_categories' => [
1908 'name' => 'export_categories',
1909 'type' => 'checkbox-select',
1910 'label' => __( 'Select Categories', 'betterdocs' ),
1911 'label_subtitle' => __( 'Selected categories and its docs will be included in the export.', 'betterdocs' ),
1912 'priority' => 6,
1913 'multiple' => true,
1914 'search' => true,
1915 'default' => ['all'],
1916 'placeholder' => __( 'Select any', 'betterdocs' ),
1917 'options' => $this->get_terms( 'doc_category' ),
1918 'filterValue' => 'all',
1919 'rules' => Rules::is( 'export_type', 'doc_category' ),
1920 ],
1921 'export_docs_btn' => [
1922 'name' => 'export_docs_btn',
1923 'text' => [
1924 'normal' => __('Proceed', 'betterdocs'),
1925 'saved' => __('Proceed', 'betterdocs'),
1926 'loading' => __('Exporting...', 'betterdocs'),
1927 ],
1928 'type' => 'button',
1929 'priority' => 7,
1930 'ajax' => [
1931 'on' => 'click',
1932 'api' => '/betterdocs/v1/export-docs',
1933 'data' => [
1934 'export_type' => '@export_type',
1935 'export_docs' => '@export_docs',
1936 'export_kbs' => '@export_kbs',
1937 'export_categories' => '@export_categories',
1938 ],
1939 'swal' => [
1940 'text' => __( 'File downloaded successfully.', 'betterdocs' ),
1941 'icon' => 'success',
1942 'autoClose' => 2000
1943 ]
1944 ]
1945 ],
1946 ])
1947 ],
1948
1949 'export_settings_nested' => [
1950 'id' => 'export_settings_nested',
1951 'name' => 'export_settings_nested',
1952 'type' => 'section',
1953 'label' => __( 'Export Settings', 'betterdocs' ),
1954 'priority' => 1,
1955 'fields' => [
1956 'export_settings' => [
1957 'name' => 'export_settings',
1958 'label' => __( 'Export Settings', 'betterdocs' ),
1959 'label_subtitle' => __( 'Simply click on “Export Settings” button to download your BetterDocs settings in .json format', 'betterdocs' ),
1960 'text' => [
1961 'normal' => __('Export Settings', 'betterdocs'),
1962 'saved' => __('Export Settings', 'betterdocs'),
1963 'loading' => __('Exporting...', 'betterdocs'),
1964 ],
1965 'type' => 'button',
1966 'priority' => 8,
1967 'ajax' => [
1968 'on' => 'click',
1969 'api' => '/betterdocs/v1/export-settings',
1970 'data' => [
1971 'betterdocs_settings' => get_option('betterdocs_settings')
1972 ],
1973 'swal' => [
1974 'text' => __( 'File downloaded successfully.', 'betterdocs' ),
1975 'icon' => 'success',
1976 'autoClose' => 2000
1977 ]
1978 ]
1979 ],
1980 ]
1981 ]
1982 ]
1983 ]
1984 ]
1985 ]
1986 ]
1987 ]
1988 ]
1989 ]
1990 ]
1991 ] ),
1992 ] )
1993 ];
1994
1995 return apply_filters( 'betterdocs_settings_args', $settings );
1996 }
1997
1998 public function normalize_options( $options ) {
1999 return GlobalFields::normalize_fields( $options );
2000 }
2001
2002 public function get_texanomy() {
2003 $docs_tax = $this->database->get_cache( 'betterdocs::settings::taxonomies' );
2004
2005 if ( $docs_tax ) {
2006 return $docs_tax;
2007 }
2008
2009 $taxonomies = get_taxonomies( [
2010 'object_type' => ['docs']
2011 ], 'objects' );
2012
2013 $docs_tax = [
2014 'all' => 'All Docs Archive',
2015 'docs' => 'Docs Page'
2016 ];
2017 foreach ( $taxonomies as $key => $value ) {
2018 $docs_tax[$key] = $value->label;
2019 }
2020 unset( $docs_tax['doc_tag'] );
2021
2022 $docs_tax = $this->normalize_options( $docs_tax );
2023 if ( count( $docs_tax ) > 2 ) {
2024 $this->database->set_cache( 'betterdocs::settings::taxonomies', $docs_tax );
2025 }
2026
2027 return $docs_tax;
2028 }
2029
2030 public function get_terms( $taxonomy ) {
2031 $_cache_key = 'betterdocs::settings::terms::' . trim( $taxonomy );
2032 $docs_tax = $this->database->get_cache( $_cache_key );
2033
2034 if ( $docs_tax ) {
2035 return $docs_tax;
2036 }
2037
2038 $get_terms = get_terms( [
2039 'taxonomy' => $taxonomy,
2040 'hide_empty' => false
2041 ] );
2042
2043 $terms = [
2044 'all' => 'All'
2045 ];
2046
2047 if ( ! empty( $get_terms ) && ! is_wp_error( $get_terms ) ) {
2048 foreach ( $get_terms as $value ) {
2049 if ( isset( $value->slug ) && isset( $value->name ) ) {
2050 $terms[$value->slug] = $value->name;
2051 }
2052 }
2053 }
2054
2055 $terms = $this->normalize_options( $terms );
2056 if ( count( $terms ) > 1 ) {
2057 $this->database->set_cache( $_cache_key, $terms );
2058 }
2059
2060 return $terms;
2061 }
2062
2063 /**
2064 * Get all docs
2065 */
2066 public function docs() {
2067 $docs = $this->database->get_cache( 'betterdocs::settings::all_docs' );
2068
2069 if ( $docs ) {
2070 return $docs;
2071 }
2072
2073 $docs = [];
2074
2075 $_docs = get_posts( [
2076 'post_type' => 'docs',
2077 'numberposts' => -1,
2078 'posts_per_page' => -1
2079 ] );
2080
2081 if ( ! empty( $_docs ) ) {
2082 foreach ( $_docs as $doc ) {
2083 $docs[$doc->ID] = betterdocs()->template_helper->kses( $doc->post_title );
2084 }
2085 $docs = GlobalFields::normalize_fields( $docs );
2086 $this->database->set_cache( 'betterdocs::settings::all_docs', $docs );
2087 }
2088
2089 return $docs;
2090 }
2091
2092 public function hide_roles_management( $tabData = [] ) {
2093 global $current_user;
2094
2095 if ( $current_user instanceof WP_User && ! in_array( 'administrator', $current_user->roles ) ) {
2096 unset( $tabData['fields']['title-advance-settings']['fields']['article_roles'] );
2097 unset( $tabData['fields']['title-advance-settings']['fields']['settings_roles'] );
2098 unset( $tabData['fields']['title-advance-settings']['fields']['analytics_roles'] );
2099 }
2100
2101 return $tabData;
2102 }
2103 }
2104