PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.5.3
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.5.3
4.9.2 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 All 200 releases
← All changes | includes/Core/Settings.php +1619 -2404 4.5.63.5.3 View file →
@@ -1,20 +1,14 @@
1 1 <?php
2 +
2 3 namespace WPDeveloper\BetterDocs\Core;
3 4
4 -if ( ! defined( 'ABSPATH' ) ) {
5 - exit;
6 -}
7 -
8 -
5 +use WP_User;
9 6 use WP_Error;
10 -use WP_User;
11 -use WPDeveloper\BetterDocs\Admin\Builder\GlobalFields;
12 -use WPDeveloper\BetterDocs\Admin\Builder\Rules;
13 -use WPDeveloper\BetterDocs\Utils\AIHelper;
14 7 use WPDeveloper\BetterDocs\Utils\Base;
15 8 use WPDeveloper\BetterDocs\Utils\Database;
16 -use WPDeveloper\BetterDocs\Utils\Helper;
9 +use WPDeveloper\BetterDocs\Admin\Builder\Rules;
10 +use WPDeveloper\BetterDocs\Admin\Builder\GlobalFields;
17 11
18 12 class Settings extends Base {
19 13 public $base_key = 'betterdocs_settings';
20 14
@@ -23,11 +17,11 @@
23 17 * @var Database
24 18 */
25 19 protected $database;
26 20
27 - private $deprecated = array();
21 + private $deprecated = [];
28 22
29 - private $cannot_be_empty = array(
23 + private $cannot_be_empty = [
30 24 'breadcrumb_doc_title',
31 25 'docs_slug',
32 26 'category_slug',
33 27 'tag_slug',
@@ -32,39 +26,37 @@
32 26 'category_slug',
33 27 'tag_slug',
34 28 'permalink_structure',
35 29 'docs_page'
36 - );
30 + ];
37 31
38 32 public function __construct( Database $database ) {
39 33 $this->database = $database;
40 34 $this->deprecated = $this->deprecated_settings();
41 35
42 - add_filter( 'betterdocs_settings_tabs', array( $this, 'import_export_settings' ) );
43 - add_filter( 'betterdocs_settings_tabs', array( $this, 'maybe_remove_git_tab' ), 20 );
36 + add_filter( 'betterdocs_settings_tabs', [$this, 'import_export_settings'] );
44 37
45 - add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_old' ), 99 );
46 - add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ), 99 );
38 + add_action( 'admin_enqueue_scripts', [$this, 'enqueue'] );
47 39
48 - // if ( isset( $_GET['page'] ) && $_GET['page'] === 'betterdocs-settings' && ! has_action( 'betterdocs_settings_header' ) ) {
49 - // add_action( 'betterdocs_settings_header', [ $this, 'header' ] );
50 - // }
40 + if ( isset( $_GET['page'] ) && $_GET['page'] === 'betterdocs-settings' && ! has_action( 'betterdocs_settings_header' ) ) {
41 + add_action( 'betterdocs_settings_header', [$this, 'header'] );
42 + }
51 43
52 - add_action( 'wp_ajax_betterdocs_dark_mode', array( $this, 'dark_mode' ) );
53 - add_filter( 'betterdocs_settings_tab_advance', array( $this, 'hide_roles_management' ), 11, 1 );
54 - add_action( 'betterdocs::settings::saved', array( $this, 'fallback_slugs' ), 99, 3 );
44 + add_action( 'wp_ajax_betterdocs_dark_mode', [$this, 'dark_mode'] );
45 + add_filter( 'betterdocs_settings_tab_advance', [$this, 'hide_roles_management'], 11, 1 );
46 + add_action( 'betterdocs::settings::saved', [$this, 'fallback_slugs'], 99, 3 );
55 47 }
56 48
57 - public function fallback_slugs( $_saved, $_settings, $_old_settings = array() ) {
49 + public function fallback_slugs( $_saved, $_settings, $_old_settings = [] ) {
58 50 $_default = $this->get_default();
59 51 foreach ( $this->cannot_be_empty as $key ) {
60 - if ( 'docs_page' === $key && ! $_settings[ 'builtin_doc_page' ] && empty( $_settings[ $key ] ) ) {
52 + if ( $key === 'docs_page' && ! $_settings['builtin_doc_page'] && empty( $_settings[$key] ) ) {
61 53 $this->save( 'builtin_doc_page', true );
62 54 continue;
63 55 }
64 56
65 - if ( empty( $_settings[ $key ] ) ) {
66 - $this->save( $key, $_default[ $key ] );
57 + if ( empty( $_settings[$key] ) ) {
58 + $this->save( $key, $_default[$key] );
67 59 }
68 60 }
69 61 }
70 62
@@ -84,54 +76,19 @@
84 76 * @return void
85 77 * @since 2.5.0
86 78 */
87 79 public function enqueue( $hook ) {
88 - if ( ! betterdocs()->is_betterdocs_screen( $hook ) ) {
80 + if ( $hook !== 'betterdocs_page_betterdocs-settings' ) {
89 81 return;
90 82 }
91 83
92 - wp_enqueue_media();
93 84 wp_enqueue_script( 'betterdocs-admin' );
94 -
95 - $settings = GlobalFields::normalize( $this->settings_args() );
96 -
97 - // Mask sensitive API keys before they reach the browser. Non-admins still get them stripped entirely below.
98 - $sensitive_api_keys = array( 'ai_autowrite_api_key', 'ai_chatbot_api_key' );
99 - foreach ( $sensitive_api_keys as $api_key_field ) {
100 - if ( ! empty( $settings[ 'values' ][ $api_key_field ] ) ) {
101 - $settings[ 'values' ][ $api_key_field ] = Helper::mask_api_key( $settings[ 'values' ][ $api_key_field ] );
102 - }
103 - }
104 -
105 - if ( ! current_user_can( 'edit_docs_settings' ) ) {
106 - foreach ( $sensitive_api_keys as $api_key_field ) {
107 - if ( isset( $settings[ 'values' ][ $api_key_field ] ) ) {
108 - unset( $settings[ 'values' ][ $api_key_field ] );
109 - }
110 - }
111 - }
112 -
113 - // Inject raw git settings to bypass get() fallback (e.g., '' -> 'docs')
114 - if ( isset( $settings[ 'values' ] ) ) {
115 - $settings[ 'values' ][ 'git_provider' ] = $this->get_raw_field( 'git_provider', 'github' );
116 - $settings[ 'values' ][ 'git_repository_url' ] = $this->get_raw_field( 'git_repository_url', '' );
117 - $settings[ 'values' ][ 'git_branch' ] = $this->get_raw_field( 'git_branch', '' );
118 - $settings[ 'values' ][ 'git_docs_directory' ] = $this->get_raw_field( 'git_docs_directory', '' );
119 - }
120 -
121 - betterdocs()->assets->localize( 'betterdocs-admin', 'betterdocsAdminSettings', $settings );
85 + betterdocs()->assets->enqueue( 'betterdocs-settings', 'admin/css/settings.css' );
122 86 betterdocs()->assets->enqueue( 'betterdocs-icons', 'admin/btd-icon/style.css' );
87 + betterdocs()->assets->enqueue( 'betterdocs-settings', 'admin/js/settings.js' );
88 + betterdocs()->assets->localize( 'betterdocs-settings', 'betterdocsAdminSettings', GlobalFields::normalize( $this->settings_args() ) );
123 89 }
124 90
125 - public function enqueue_old( $hook ) {
126 - // FREE & Pro Version Compatibility Check
127 - if ( ! betterdocs()->is_betterdocs_screen( $hook ) ) {
128 - return;
129 - }
130 -
131 - $this->enqueue( 'betterdocs_page_betterdocs-settings' );
132 - }
133 -
134 91 /**
135 92 * This method is responsible for printing header in dashboard settings page.
136 93 *
137 94 * @param string $hook
@@ -139,9 +96,9 @@
139 96 * @return void
140 97 * @since 2.5.0
141 98 */
142 99 public function header( $hook ) {
143 - if ( 'settings' !== $hook ) {
100 + if ( $hook !== 'settings' ) {
144 101 return;
145 102 }
146 103
147 104 betterdocs()->views->get( 'admin/template-parts/settings-header' );
@@ -154,9 +111,9 @@
154 111 * @return array
155 112 * @since 2.5.0
156 113 */
157 114 public function deprecated_settings() {
158 - return array();
115 + return [];
159 116 }
160 117
161 118 /**
162 119 * Dynamic migration caller.
@@ -165,12 +122,12 @@
165 122 * @since 2.5.0
166 123 */
167 124 public function migration( $version ) {
168 125 if ( $version > 250 ) {
169 - for ( $v = 250; $v <= $version; ++$v ) {
126 + for ( $v = 250; $v <= $version; $v++ ) {
170 127 $_func = "v{$v}";
171 128 if ( method_exists( $this, $_func ) ) {
172 - call_user_func( array( $this, $_func ) );
129 + call_user_func( [$this, $_func] );
173 130 }
174 131 }
175 132 }
176 133 }
@@ -186,9 +143,9 @@
186 143 $this->save( 'terms_orderby', 'name' );
187 144 }
188 145
189 146 if ( $orderby = $this->get( 'alphabetically_order_post', false ) ) {
190 - if ( '1' === $orderby ) {
147 + if ( $orderby === '1' ) {
191 148 $this->save( 'alphabetically_order_post', 'title' );
192 149 }
193 150 }
194 151 }
@@ -200,105 +157,83 @@
200 157 * @since 1.0.0
201 158 *
202 159 */
203 160 public function get_default() {
204 - $_default = array(
205 - 'multiple_kb' => '',
206 - 'enable_export_faq' => true,
207 - 'builtin_doc_page' => true,
208 - 'breadcrumb_doc_title' => __( 'Docs', 'betterdocs' ),
209 - 'enable_category_hierarchy_slugs' => false,
210 - 'docs_slug' => 'docs',
211 - 'docs_page' => 0,
212 - 'category_slug' => 'docs-category',
213 - 'tag_slug' => 'docs-tag',
214 - 'permalink_structure' => 'docs/',
215 - 'enable_faq_schema' => false,
216 - 'live_search' => true,
217 - 'advance_search' => false,
218 - 'popular_keyword_limit' => 5,
219 - 'search_letter_limit' => 3,
220 - 'search_placeholder' => __( 'Search...', 'betterdocs' ),
221 - 'search_not_found_text' => __( 'Sorry, no docs were found.', 'betterdocs' ),
222 - 'search_result_image' => true,
223 - 'search_modal_search_type' => 'all',
224 - 'masonry_layout' => true,
225 - 'docs_list_icon' => array(),
226 - 'category_title_link' => false,
227 - 'terms_orderby' => 'betterdocs_order',
228 - 'alphabetically_order_term' => false,
229 - 'terms_order' => 'ASC',
230 - 'alphabetically_order_post' => 'betterdocs_order',
231 - 'docs_order' => 'ASC',
232 - 'nested_subcategory' => false,
233 - 'column_number' => 3,
234 - 'posts_number' => 10,
235 - 'post_count' => true,
236 - 'count_text' => __( 'Docs', 'betterdocs' ),
237 - 'count_text_singular' => __( 'Doc', 'betterdocs' ),
238 - 'exploremore_btn' => true,
239 - 'exploremore_btn_txt' => __( 'Explore More', 'betterdocs' ),
240 - 'doc_single' => 1,
241 - 'enable_toc' => true,
242 - 'toc_title' => __( 'Table of Contents', 'betterdocs' ),
243 - 'toc_hierarchy' => true,
244 - 'toc_list_number' => false,
245 - 'toc_dynamic_title' => false,
246 - 'enable_sticky_toc' => true,
247 - 'sticky_toc_offset' => 100,
248 - 'collapsible_toc_mobile' => false,
249 - 'supported_heading_tag' => array( '1', '2', '3', '4', '5', '6' ),
250 - 'enable_post_title' => true,
251 - 'title_link_ctc' => true,
252 - 'enable_breadcrumb' => true,
253 - 'breadcrumb_home_text' => __( 'Home', 'betterdocs' ),
254 - 'enable_breadcrumb_home_text' => true,
255 - 'breadcrumb_home_url' => get_home_url(),
161 + $_default = [
162 + 'multiple_kb' => '',
163 + 'builtin_doc_page' => true,
164 + 'breadcrumb_doc_title' => __( 'Docs', 'betterdocs' ),
165 + 'docs_slug' => 'docs',
166 + 'docs_page' => 0,
167 + 'category_slug' => 'docs-category',
168 + 'tag_slug' => 'docs-tag',
169 + 'permalink_structure' => 'docs/',
170 + 'enable_faq_schema' => false,
171 + 'live_search' => true,
172 + 'advance_search' => false,
173 + 'popular_keyword_limit' => 5,
174 + 'search_letter_limit' => 3,
175 + 'search_placeholder' => __( 'Search...', 'betterdocs' ),
176 + 'search_not_found_text' => __( 'Sorry, no docs were found.', 'betterdocs' ),
177 + 'search_result_image' => true,
178 + 'masonry_layout' => true,
179 + 'category_title_link' => false,
180 + 'terms_orderby' => 'betterdocs_order',
181 + 'alphabetically_order_term' => false,
182 + 'terms_order' => 'ASC',
183 + 'alphabetically_order_post' => 'betterdocs_order',
184 + 'docs_order' => 'ASC',
185 + 'nested_subcategory' => false,
186 + 'column_number' => 3,
187 + 'posts_number' => 10,
188 + 'post_count' => true,
189 + 'count_text' => __( 'docs', 'betterdocs' ),
190 + 'count_text_singular' => __( 'doc', 'betterdocs' ),
191 + 'exploremore_btn' => true,
192 + 'exploremore_btn_txt' => __( 'Explore More', 'betterdocs' ),
193 + 'doc_single' => 1,
194 + 'enable_toc' => true,
195 + 'toc_title' => __( 'Table of Contents', 'betterdocs' ),
196 + 'toc_hierarchy' => true,
197 + 'toc_list_number' => true,
198 + 'toc_dynamic_title' => false,
199 + 'enable_sticky_toc' => true,
200 + 'sticky_toc_offset' => 100,
201 + 'collapsible_toc_mobile' => false,
202 + 'supported_heading_tag' => ['1', '2', '3', '4', '5', '6'],
203 + 'enable_post_title' => true,
204 + 'title_link_ctc' => true,
205 + 'enable_breadcrumb' => true,
206 + 'breadcrumb_home_text' => __( 'Home', 'betterdocs' ),
207 + 'breadcrumb_home_url' => get_home_url(),
256 208 'enable_breadcrumb_category' => true,
257 - 'enable_breadcrumb_title' => true,
258 - 'enable_sidebar_cat_list' => true,
259 - 'enable_print_icon' => true,
260 - 'enable_tags' => true,
261 - 'email_feedback' => true,
262 - 'feedback_link_text' => __( 'Still stuck? How can we help?', 'betterdocs' ),
263 - 'reaction_feedback_text' => __( 'Thanks for your feedback', 'betterdocs' ),
264 - 'feedback_url' => '',
265 - 'feedback_form_title' => __( 'How can we help?', 'betterdocs' ),
266 - 'email_address' => get_option( 'admin_email' ),
267 - 'show_last_update_time' => true,
268 - 'enable_navigation' => true,
269 - 'enable_comment' => true,
270 - 'enable_credit' => false,
271 - 'enable_archive_sidebar' => true,
209 + 'enable_breadcrumb_title' => true,
210 + 'enable_sidebar_cat_list' => true,
211 + 'enable_print_icon' => true,
212 + 'enable_tags' => true,
213 + 'email_feedback' => true,
214 + 'feedback_link_text' => __( 'Still stuck? How can we help?', 'betterdocs' ),
215 + 'reaction_feedback_text' => __( 'Thanks for your feedback', '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' => false,
223 + 'enable_archive_sidebar' => true,
272 224 'archive_nested_subcategory' => true,
273 - 'archive_enable_pagination' => false,
274 225 'enable_content_restriction' => false,
275 - 'enable_reporting' => false,
276 - 'enable_sample_data' => false,
277 - 'reporting_day' => 'monday',
278 - 'reporting_email' => get_option( 'admin_email' ),
279 - 'enable_write_with_ai' => true,
280 - 'enable_faq_write_with_ai' => true,
281 - 'enable_glossaries_write_with_ai' => true,
282 - 'write_with_ai_model' => 'gpt-4o-mini',
283 - 'ai_autowrite_api_key' => '',
284 - 'ai_autowrite_max_token' => 2500,
285 - 'enable_article_summary' => false,
286 - 'article_summary_model' => 'gpt-4o-mini',
287 - 'article_summary_max_token' => 1500,
288 - 'enable_estimated_reading_time' => true,
289 - 'enable_encyclopedia' => false,
290 - 'enable_glossaries' => false,
291 - 'show_glossary_suggestions' => true,
292 - 'enable_ai_chatbot' => false,
293 - 'estimated_reading_time_title' => '',
294 - 'estimated_reading_time_text' => __( 'min read', 'betterdocs' ),
295 - 'singular_estimated_reading_time_text' => __( 'min read', 'betterdocs' ),
296 - 'betterdocs_access_control_repeater' => array(),
297 - 'internal_knowledge_base_type' => 'basic',
298 - 'betterdocs_access_control_repeater_kb' => array(),
299 - 'enable_git_integration' => false
300 - );
226 + 'enable_reporting' => false,
227 + 'enable_sample_data' => false,
228 + 'reporting_day' => 'monday',
229 + 'reporting_email' => get_option( 'admin_email' ),
230 + 'enable_write_with_ai' => true,
231 + 'enable_faq_write_with_ai' => true,
232 + 'ai_autowrite_api_key' => '',
233 + 'ai_autowrite_max_token' => 1500,
234 + 'enable_estimated_reading_time' => false
235 + ];
301 236
302 237 $_default = apply_filters( 'betterdocs_default_settings', $_default );
303 238 // $_default = apply_filters_deprecated(
304 239 // 'betterdocs_option_default_settings', [$_default], '2.5.0',
@@ -314,98 +249,34 @@
314 249 * @return array
315 250 * @since 2.5.0
316 251 */
317 252 public function get_pro_defaults() {
318 - return array();
253 + return [];
319 254 }
320 255
321 - public function is_elementor_pro() {
322 - return is_plugin_active( 'elementor-pro/elementor-pro.php' );
323 - }
324 -
325 256 /**
326 - * Get full site editor links for docs page.
257 + * Get customizer links for docs page.
327 258 *
328 259 * @return string
329 - * @since 3.5.8
260 + * @since 1.0.0
330 261 */
331 - public function gutenberg_link() {
332 - if ( betterdocs()->helper->current_theme_is_fse_theme() ) {
333 - return admin_url( 'site-editor.php?postType=wp_template&postId=betterdocs/betterdocs//archive-docs' );
334 - } else {
335 - return 'https://betterdocs.co/docs/betterdocs-provides-full-site-editor-support/';
336 - }
337 - }
338 -
339 - /**
340 - * Get elementor theme builder link for docs page.
341 - *
342 - * @return string
343 - * @since 3.5.8
344 - */
345 - public function elementor_link() {
346 - if ( $this->is_elementor_pro() ) {
347 - return admin_url( 'admin.php?page=elementor-app#/site-editor/templates/doc-archive' );
348 - } else {
349 - return 'https://betterdocs.co/docs/docs-page-with-elementor/';
350 - }
351 - }
352 -
353 262 public function customizer_link() {
354 - $query[ 'autofocus[panel]' ] = 'betterdocs_customize_options';
355 - $query[ 'return' ] = admin_url( 'edit.php?post_type=docs' );
356 - $builtin_doc_page = betterdocs()->settings->get( 'builtin_doc_page' );
357 - $docs_slug = betterdocs()->settings->get( 'docs_slug' );
358 - $docs_page = betterdocs()->settings->get( 'builtin_doc_page' );
263 + $query['autofocus[panel]'] = 'betterdocs_customize_options';
264 + $query['return'] = admin_url( 'edit.php?post_type=docs' );
265 + $builtin_doc_page = betterdocs()->settings->get( 'builtin_doc_page' );
266 + $docs_slug = betterdocs()->settings->get( 'docs_slug' );
267 + $docs_page = betterdocs()->settings->get( 'builtin_doc_page' );
359 268
360 - if ( 1 == $builtin_doc_page && $docs_slug ) {
361 - $query[ 'url' ] = site_url( '/' . $docs_slug );
362 - } elseif ( 1 != $builtin_doc_page && $docs_page ) {
363 - $post_info = get_post( $docs_page );
364 - $query[ 'url' ] = site_url( '/' . $post_info->post_name );
269 + if ( $builtin_doc_page == 1 && $docs_slug ) {
270 + $query['url'] = site_url( '/' . $docs_slug );
271 + } elseif ( $builtin_doc_page != 1 && $docs_page ) {
272 + $post_info = get_post( $docs_page );
273 + $query['url'] = site_url( '/' . $post_info->post_name );
365 274 }
366 275
367 276 return add_query_arg( $query, admin_url( 'customize.php' ) );
368 277 }
369 278
370 - public function design_tab() {
371 - $settings = array();
372 -
373 - $settings[ 'gutenberg_link' ] = array(
374 - 'name' => 'gutenberg_link',
375 - 'type' => 'action',
376 - 'action' => 'betterdocs_settings_gutenberg_link',
377 - 'button' => betterdocs()->helper->current_theme_is_fse_theme() ? __( 'Design with Gutenberg', 'betterdocs' ) : __( 'Learn More', 'betterdocs' ),
378 - 'url' => $this->gutenberg_link(),
379 - 'customizer_img' => betterdocs()->assets->icon( 'customizer/gutenberg-preview.png', true ),
380 - 'priority' => 1
381 - );
382 -
383 - $settings[ 'elementor_link' ] = array(
384 - 'name' => 'elementor_link',
385 - 'type' => 'action',
386 - 'action' => 'betterdocs_settings_elementor_link',
387 - 'button' => $this->is_elementor_pro() ? __( 'Design with Elementor', 'betterdocs' ) : __( 'Learn More', 'betterdocs' ),
388 - 'url' => $this->elementor_link(),
389 - 'customizer_img' => betterdocs()->assets->icon( 'customizer/elementor-preview.png', true ),
390 - 'priority' => 2
391 - );
392 -
393 - if ( ! betterdocs()->helper->current_theme_is_fse_theme() ) {
394 - $settings[ 'customizer_link' ] = array(
395 - 'name' => 'customizer_link',
396 - 'type' => 'action',
397 - 'action' => 'betterdocs_settings_customizer_link',
398 - 'button' => __( 'Customize in BetterDocs', 'betterdocs' ),
399 - 'url' => $this->customizer_link(),
400 - 'customizer_img' => betterdocs()->assets->icon( 'customizer/customizer-preview.png', true ),
401 - 'priority' => 3
402 - );
403 - }
404 -
405 - return $settings;
406 - }
407 -
408 279 /**
409 280 * Get All Roles
410 281 * dynamically
411 282 *
@@ -412,9 +283,9 @@
412 283 * @return array
413 284 */
414 285 public function get_roles() {
415 286 $roles = wp_roles()->role_names;
416 - unset( $roles[ 'subscriber' ] );
287 + unset( $roles['subscriber'] );
417 288
418 289 return $roles;
419 290 }
420 291
@@ -428,11 +299,10 @@
428 299 if ( ! check_ajax_referer( 'doc_cat_order_nonce', 'nonce', false ) ) {
429 300 wp_send_json_error();
430 301 }
431 302
432 - if ( isset( $_POST[ 'mode' ] ) ) {
433 - $mode = sanitize_text_field( wp_unslash( $_POST[ 'mode' ] ) );
434 - if ( $this->save( 'dark_mode', rest_sanitize_boolean( $mode ) ) ) {
303 + if ( isset( $_POST['mode'] ) ) {
304 + if ( $this->save( 'dark_mode', rest_sanitize_boolean( $_POST['mode'] ) ) ) {
435 305 wp_send_json_success();
436 306 }
437 307 }
438 308
@@ -441,9 +311,9 @@
441 311
442 312 public function get_normalized_value( $key, $value, $default = null ) {
443 313 $_origin_value = $_value = $value;
444 314
445 - if ( in_array( $_value, array( 'on', 'off', '1', 'false', 'true' ), true ) ) {
315 + if ( in_array( $_value, ['on', 'off', '1', 'false', 'true'], true ) ) {
446 316 switch ( $_value ) {
447 317 case 'on':
448 318 case 'ON':
449 319 case '1':
@@ -463,17 +333,17 @@
463 333
464 334 return $_value;
465 335 }
466 336
467 - public function get_normalized_values( $values, $default_values = array() ) {
337 + public function get_normalized_values( $values, $default_values = [] ) {
468 338 if ( empty( $values ) ) {
469 - return array();
339 + return [];
470 340 }
471 341
472 - $_settings = array();
342 + $_settings = [];
473 343 foreach ( $values as $key => $value ) {
474 - $_default_value = isset( $default_values[ $key ] ) ? $default_values[ $key ] : null;
475 - $_settings[ $key ] = $this->get_normalized_value( $key, $value, $_default_value );
344 + $_default_value = isset( $default_values[$key] ) ? $default_values[$key] : null;
345 + $_settings[$key] = $this->get_normalized_value( $key, $value, $_default_value );
476 346 }
477 347
478 348 return $_settings;
479 349 }
@@ -478,9 +348,9 @@
478 348 return $_settings;
479 349 }
480 350
481 351 public function get_all( $raw = false ) {
482 - $_default_settings = $raw ? array() : array_merge( $this->get_default(), $this->get_pro_defaults() );
352 + $_default_settings = $raw ? [] : array_merge( $this->get_default(), $this->get_pro_defaults() );
483 353 $_settings = $this->database->get( $this->base_key, $_default_settings );
484 354
485 355 return $this->get_normalized_values( $_settings, $_default_settings );
486 356 }
@@ -485,9 +355,9 @@
485 355 return $this->get_normalized_values( $_settings, $_default_settings );
486 356 }
487 357
488 358 public function type_validation( &$value, $defaultValue = null ) {
489 - if ( null !== $defaultValue ) {
359 + if ( $defaultValue !== null ) {
490 360 /**
491 361 * Check if value is not in same type
492 362 */
493 363 $_default_type = gettype( $defaultValue );
@@ -517,28 +387,28 @@
517 387
518 388 $_value = $default;
519 389 switch ( true ) {
520 390 // Check if it's a PRO Option
521 - case ! isset( $_default_settings[ $key ] ):
391 + case ! isset( $_default_settings[$key] ):
522 392 $_value = $default;
523 393 break;
524 394 // Check if it's a FREE Option and not in DB.
525 - case ! isset( $_settings[ $key ] ) && isset( $_default_settings[ $key ] ):
526 - $_value = null !== $default ? $default : $_default_settings[ $key ];
395 + case ! isset( $_settings[$key] ) && isset( $_default_settings[$key] ):
396 + $_value = $default !== null ? $default : $_default_settings[$key];
527 397 break;
528 398 // Check if it's a FREE Option
529 - case isset( $_settings[ $key ] ) && isset( $_default_settings[ $key ] ):
530 - $_value = $_settings[ $key ];
399 + case isset( $_settings[$key] ) && isset( $_default_settings[$key] ):
400 + $_value = $_settings[$key];
531 401 break;
532 402 }
533 403
534 - $_value = $this->get_normalized_value( $key, $_value, isset( $_default_settings[ $key ] ) ? $_default_settings[ $key ] : null );
404 + $_value = $this->get_normalized_value( $key, $_value, isset( $_default_settings[$key] ) ? $_default_settings[$key] : null );
535 405
536 406 if ( gettype( $_value ) === 'string' ) {
537 - if ( empty( $_value ) && null != $default ) {
407 + if ( empty( $_value ) && $default != null ) {
538 408 $_value = $default;
539 - } elseif ( empty( $_value ) && null === $default && isset( $_default_settings[ $key ] ) ) {
540 - $_value = $_default_settings[ $key ];
409 + } elseif ( empty( $_value ) && $default === null && isset( $_default_settings[$key] ) ) {
410 + $_value = $_default_settings[$key];
541 411 }
542 412 }
543 413
544 414 return $_value;
@@ -544,12 +414,12 @@
544 414 return $_value;
545 415 }
546 416
547 417 public function get_raw_field( $key, $default = null ) {
548 - $_settings = $this->database->get( $this->base_key, array() );
418 + $_settings = $this->database->get( $this->base_key, [] );
549 419
550 - if ( isset( $_settings[ $key ] ) ) {
551 - return $this->get_normalized_value( $key, $_settings[ $key ], $default );
420 + if ( isset( $_settings[$key] ) ) {
421 + return $this->get_normalized_value( $key, $_settings[$key], $default );
552 422 }
553 423
554 424 return $default;
555 425 }
@@ -554,10 +424,10 @@
554 424 return $default;
555 425 }
556 426
557 427 public function save( $key, $value ) {
558 - $_settings = $this->database->get( $this->base_key, array() );
559 - $_settings[ $key ] = $value;
428 + $_settings = $this->database->get( $this->base_key, [] );
429 + $_settings[$key] = $value;
560 430
561 431 return $this->database->save( $this->base_key, $_settings );
562 432 }
563 433
@@ -566,116 +436,20 @@
566 436 if ( ! current_user_can( 'edit_docs_settings' ) ) {
567 437 return new WP_Error( 'unauthorized_action', __( 'You don\'t have any rights for saving settings.', 'betterdocs' ) );
568 438 }
569 439
570 - // The frontend sends the currently-active settings tab as a transport-only hint so
571 - // tab-scoped validation (the AI min-token floor below) only runs when that tab is being
572 - // saved. It must never be persisted into the settings option.
573 - $active_tab = '';
574 - if ( array_key_exists( '_active_tab', $settings ) ) {
575 - $active_tab = (string) $settings[ '_active_tab' ];
576 - unset( $settings[ '_active_tab' ] );
577 - }
578 -
579 - // Quickbuilder sends back the full UI-loaded payload. To avoid overwriting values that we
580 - // asynchronously updated in the DB via AJAX (like Git integration fields), we strictly remove them
581 - // from the incoming save payload so that the freshly loaded `$_old_settings` values persist.
582 - $exclude_ajax_keys = array( 'git_provider', 'git_repository_url', 'git_branch', 'git_docs_directory' );
583 - foreach ( $exclude_ajax_keys as $key ) {
584 - if ( array_key_exists( $key, $settings ) ) {
585 - unset( $settings[ $key ] );
586 - }
587 - if ( isset( $settings[ 'values' ] ) && is_array( $settings[ 'values' ] ) && array_key_exists( $key, $settings[ 'values' ] ) ) {
588 - unset( $settings[ 'values' ][ $key ] );
589 - }
590 - }
591 -
592 440 $_old_settings = $this->database->get( $this->base_key, $this->get_default() );
593 -
594 - // The frontend only ever sees masked API keys. If a submitted value matches the mask of
595 - // the stored value, the user did not change it — restore the original so the mask string
596 - // is never persisted.
597 - $sensitive_api_keys = array( 'ai_autowrite_api_key', 'ai_chatbot_api_key' );
598 - foreach ( $sensitive_api_keys as $api_key_field ) {
599 - if ( ! isset( $settings[ $api_key_field ] ) ) {
600 - continue;
601 - }
602 - $stored = isset( $_old_settings[ $api_key_field ] ) ? $_old_settings[ $api_key_field ] : '';
603 - if ( '' !== $stored && trim( (string) $settings[ $api_key_field ] ) === Helper::mask_api_key( $stored ) ) {
604 - $settings[ $api_key_field ] = $stored;
605 - }
606 - }
607 -
608 - // Minimum-token policy: reject saves where a feature's max_token field is below the
609 - // per-model floor defined by AIHelper::get_min_tokens(). The model may be unchanged in
610 - // this submission, so fall back to the stored value when it isn't part of the payload.
611 - // Both token fields live under the AI Content Suite tab, so enforce the floor only when
612 - // that tab is the one being saved — saving any other settings page never trips it (e.g.
613 - // old users whose stored value predates the floor). When the active-tab hint is absent
614 - // (stale cached JS, the quick-setup wizard, or any programmatic caller) the loop is
615 - // skipped and the save is allowed through.
616 - $token_pairs = array(
617 - array(
618 - 'tab' => 'tab-betterdocs-ai',
619 - 'context' => 'write_with_ai',
620 - 'token_key' => 'ai_autowrite_max_token',
621 - 'model_key' => 'write_with_ai_model',
622 - 'label' => __( 'Write with AI', 'betterdocs' )
623 - ),
624 - array(
625 - 'tab' => 'tab-betterdocs-ai',
626 - 'context' => 'article_summary',
627 - 'token_key' => 'article_summary_max_token',
628 - 'model_key' => 'article_summary_model',
629 - 'label' => __( 'AI Doc Summarizer', 'betterdocs' )
630 - )
631 - );
632 - foreach ( $token_pairs as $pair ) {
633 - if ( $active_tab !== $pair[ 'tab' ] ) {
634 - continue;
635 - }
636 - if ( ! array_key_exists( $pair[ 'token_key' ], $settings ) ) {
637 - continue;
638 - }
639 - $incoming_tokens = (int) $settings[ $pair[ 'token_key' ] ];
640 - $incoming_model = isset( $settings[ $pair[ 'model_key' ] ] )
641 - ? $settings[ $pair[ 'model_key' ] ]
642 - : ( isset( $_old_settings[ $pair[ 'model_key' ] ] ) ? $_old_settings[ $pair[ 'model_key' ] ] : '' );
643 - $min = AIHelper::get_min_tokens( $pair[ 'context' ], $incoming_model );
644 - if ( $min > 0 && $incoming_tokens < $min ) {
645 - return new WP_Error(
646 - 'min_tokens_below_threshold',
647 - sprintf(
648 - /* translators: 1: feature label, 2: minimum tokens, 3: model id */
649 - __( '%1$s max tokens must be at least %2$d for %3$s.', 'betterdocs' ),
650 - $pair[ 'label' ],
651 - $min,
652 - $incoming_model
653 - )
654 - );
655 - }
656 - }
657 -
658 441 // @todo: sanitize the data before inject in DB.
659 442 $_normalized_settings = $this->get_normalized_values( $settings );
660 - if ( $existing_plugins && isset( $_normalized_settings[ 'migration_step' ] ) && true == $_normalized_settings[ 'migration_step' ] ) {
443 + if ( $existing_plugins && isset( $_normalized_settings['migration_step'] ) && $_normalized_settings['migration_step'] == true ) {
661 444 betterdocs()->kbmigration->migrate();
662 445 }
663 446 $_settings = wp_parse_args( $_normalized_settings, $_old_settings );
447 + $_saved = $this->database->save( $this->base_key, $_settings );
664 448
665 - // Check if there are actual changes before saving.
666 - // update_option returns false when values serialize identically, which can happen
667 - // due to object caching or type normalization even when user made changes.
668 - $_has_changes = $_settings != $_old_settings;
449 + do_action_ref_array( 'betterdocs::settings::saved', [$_saved, $_settings, $_old_settings, &$this] );
669 450
670 - $_saved = $this->database->save( $this->base_key, $_settings );
671 -
672 - do_action_ref_array( 'betterdocs::settings::saved', array( $_saved, $_settings, $_old_settings, &$this ) );
673 -
674 - // Return true if save succeeded OR if there were changes to attempt saving.
675 - // This handles cases where update_option returns false due to identical serialization
676 - // (e.g., object caching, type coercion during serialization).
677 - return $_saved || $_has_changes;
451 + return $_saved;
678 452 }
679 453
680 454 public function views( $hook ) {
681 455 return betterdocs()->views->get( 'admin/settings' );
@@ -687,21 +461,21 @@
687 461 return $this->database->save( $this->base_key, $_settings );
688 462 }
689 463
690 464 public function get_pages() {
691 - $_pages = betterdocs()->query->get_posts( array(
692 - 'post_type' => 'page',
693 - 'numberposts' => -1,
694 - 'post_status' => 'publish',
465 + $_pages = betterdocs()->query->get_posts( [
466 + 'post_type' => 'page',
467 + 'numberposts' => -1,
468 + 'post_status' => 'publish',
695 469 'posts_per_page' => -1
696 - ) );
470 + ] );
697 471
698 - $__pages = array();
472 + $__pages = [];
699 473
700 474 if ( ! empty( $_pages ) ) {
701 - $__pages[ 0 ] = __( 'Select a Page', 'betterdocs' );
475 + $__pages[0] = __( 'Select a Page', 'betterdocs' );
702 476 foreach ( $_pages->posts as $page ) {
703 - $__pages[ $page->ID ] = esc_html( $page->post_title );
477 + $__pages[$page->ID] = esc_html( $page->post_title );
704 478 }
705 479 }
706 480
707 481 return $__pages;
@@ -709,791 +483,701 @@
709 483
710 484 public function settings_args() {
711 485 $wp_roles = $this->normalize_options( $this->get_roles() );
712 486
713 - $roles_for_ikb = $this->normalize_options( array_merge( array( 'all' => __( 'All logged in users', 'betterdocs' ) ), wp_roles()->role_names ) );
714 -
715 - unset( $roles_for_ikb[ 'administrator' ] );
716 -
717 - $settings = array(
718 - 'id' => 'betterdocs_settings_metabox_wrapper',
719 - 'title' => __( 'betterdocs', 'betterdocs' ),
720 - 'object_types' => array( 'betterdocs' ),
721 - 'context' => 'normal',
722 - 'priority' => 'high',
723 - 'show_header' => false,
724 - 'tabnumber' => false,
487 + $settings = [
488 + 'id' => 'betterdocs_settings_metabox_wrapper',
489 + 'title' => __( 'betterdocs', 'betterdocs' ),
490 + 'object_types' => ['betterdocs'],
491 + 'context' => 'normal',
492 + 'priority' => 'high',
493 + 'show_header' => false,
494 + 'tabnumber' => false,
725 495 'is_pro_active' => betterdocs()->is_pro_active(),
726 - 'logoURL' => betterdocs()->assets->icon( 'betterdocs-icon.svg', true ),
727 - 'layout' => 'vertical',
728 - 'config' => array(
729 - 'active' => 'tab-general',
496 + 'logoURL' => betterdocs()->assets->icon( 'betterdocs-icon.svg', true ),
497 + 'layout' => 'vertical',
498 + 'config' => [
499 + 'active' => 'tab-general',
730 500 'sidebar' => true,
731 - 'title' => false
732 - ),
733 - 'submit' => array(
734 - 'show' => true,
735 - 'label' => __( 'Save', 'betterdocs' ),
501 + 'title' => false
502 + ],
503 + 'submit' => [
504 + 'show' => true,
505 + 'label' => __( 'Save', 'betterdocs' ),
736 506 'loadingLabel' => __( 'Saving...', 'betterdocs' ),
737 - 'class' => 'save-settings',
738 - 'rules' => Rules::logicalRule( array(
507 + 'class' => 'save-settings',
508 + 'rules' => Rules::logicalRule( [
739 509 Rules::is( 'config.active', 'tab-design', true ),
740 510 Rules::is( 'config.active', 'tab-shortcodes', true ),
741 511 Rules::is( 'config.active', 'tab-instant-answer', true ),
742 512 Rules::is( 'config.active', 'tab-import-export', true ),
743 513 Rules::is( 'config.active', 'tab-migration', true )
744 - ), 'and' )
745 - ),
746 - 'values' => betterdocs()->is_pro_active() ? $this->get_all() : array_merge( $this->get_all(), $this->pro_settings_default_values() ),
747 - 'tabs' => apply_filters( 'betterdocs_settings_tabs', array(
748 - 'tab-general' => apply_filters( 'betterdocs_settings_tab_general', array(
749 - 'id' => 'tab-general',
750 - 'label' => __( 'General', 'betterdocs' ),
751 - 'classes' => 'tab-general',
514 + ], 'and' )
515 + ],
516 + 'values' => $this->get_all(),
517 + 'tabs' => apply_filters( 'betterdocs_settings_tabs', [
518 + 'tab-general' => apply_filters( 'betterdocs_settings_tab_general', [
519 + 'id' => 'tab-general',
520 + 'label' => __( 'General', 'betterdocs' ),
521 + 'classes' => 'tab-general',
752 522 'priority' => 10,
753 - 'fields' => array(
754 - 'title-general' => apply_filters( 'betterdocs_encyclopedia_settings', array(
755 - 'name' => 'title-general-tab',
756 - 'type' => 'section',
757 - 'label' => __( 'General Settings', 'betterdocs' ),
523 + 'fields' => [
524 + 'title-general' => [
525 + 'name' => 'title-general-tab',
526 + 'type' => 'section',
527 + 'label' => __( 'General Settings', 'betterdocs' ),
758 528 'priority' => 10,
759 - 'fields' => array(
760 - 'multiple_kb' => apply_filters( 'betterdocs_multi_kb_settings', array(
761 - 'name' => 'multiple_kb',
762 - 'type' => 'toggle',
763 - 'label' => __( 'Multiple Knowledge Base', 'betterdocs' ),
529 + 'fields' => [
530 + 'multiple_kb' => apply_filters( 'betterdocs_multi_kb_settings', [
531 + 'name' => 'multiple_kb',
532 + 'type' => 'toggle',
533 + 'label' => __( 'Multiple Knowledge Base', 'betterdocs' ),
764 534 'enable_disable_text_active' => true,
765 - 'default' => '',
766 - 'priority' => 1,
767 - 'is_pro' => true
768 - ) ),
769 - 'builtin_doc_page' => array(
770 - 'name' => 'builtin_doc_page',
771 - 'type' => 'toggle',
772 - 'label' => __( 'Built-in Documentation Page', 'betterdocs' ),
535 + 'default' => '',
536 + 'priority' => 1,
537 + 'is_pro' => true
538 + ] ),
539 + 'builtin_doc_page' => [
540 + 'name' => 'builtin_doc_page',
541 + 'type' => 'toggle',
542 + 'label' => __( 'Built-in Documentation Page', 'betterdocs' ),
773 543 'enable_disable_text_active' => true,
774 - 'default' => 1,
775 - 'priority' => 2
776 - ),
777 - 'enable_category_hierarchy_slugs' => array(
778 - 'name' => 'enable_category_hierarchy_slugs',
779 - 'type' => 'toggle',
780 - 'label' => __( 'Enable Category Hierarchy Slug', 'betterdocs' ),
781 - 'enable_disable_text_active' => true,
782 - 'default' => false,
544 + 'default' => 1,
545 + 'priority' => 2
546 + ],
547 + 'breadcrumb_doc_title' => [
548 + 'name' => 'breadcrumb_doc_title',
549 + 'type' => 'text',
550 + 'label' => __( 'Documentation Page Title', 'betterdocs' ),
551 + 'default' => __( 'Docs', 'betterdocs' ),
783 552 'priority' => 3,
784 - 'label_subtitle' => __( "Shows Hierarchy Based Permalink Slugs For Doc Categories & Single Doc Page", 'betterdocs' )
785 - ),
786 - 'breadcrumb_doc_title' => array(
787 - 'name' => 'breadcrumb_doc_title',
788 - 'type' => 'text',
789 - 'label' => __( 'Documentation Page Title', 'betterdocs' ),
790 - 'default' => __( 'Docs', 'betterdocs' ),
553 + 'rules' => Rules::is( 'builtin_doc_page', true )
554 + ],
555 + 'docs_slug' => [
556 + 'name' => 'docs_slug',
557 + 'type' => 'text',
558 + 'label' => __( 'BetterDocs Root Slug', 'betterdocs' ),
559 + 'default' => 'docs',
791 560 'priority' => 4,
792 - 'rules' => Rules::is( 'builtin_doc_page', true )
793 - ),
794 - 'docs_slug' => array(
795 - 'name' => 'docs_slug',
796 - 'type' => 'text',
797 - 'label' => __( 'BetterDocs Root Slug', 'betterdocs' ),
798 - 'default' => 'docs',
799 - 'priority' => 5,
800 - 'rules' => Rules::is( 'builtin_doc_page', true )
801 - ),
802 - 'docs_page' => array(
803 - 'name' => 'docs_page',
804 - 'label' => __( 'Docs Page', 'betterdocs' ),
805 - 'type' => 'select',
806 - 'default' => 0,
807 - 'priority' => 6,
808 - 'search' => true,
809 - 'options' => $this->normalize_options( $this->get_pages() ),
561 + 'rules' => Rules::is( 'builtin_doc_page', true )
562 + ],
563 + 'docs_page' => [
564 + 'name' => 'docs_page',
565 + 'label' => __( 'Docs Page', 'betterdocs' ),
566 + 'type' => 'select',
567 + 'default' => 0,
568 + 'priority' => 5,
569 + 'search' => true,
570 + 'options' => $this->normalize_options( $this->get_pages() ),
810 571 'label_subtitle' => __( 'You will need to insert BetterDocs Shortcode inside the page. This page will be used as docs permalink.', 'betterdocs' ),
811 - 'rules' => Rules::is( 'builtin_doc_page', false )
812 - ),
813 -
814 - 'category_slug' => array(
815 - 'name' => 'category_slug',
816 - 'type' => 'text',
817 - 'label' => __( 'Custom Category Slug', 'betterdocs' ),
818 - 'default' => 'docs-category',
572 + 'rules' => Rules::is( 'builtin_doc_page', false )
573 + ],
574 + 'category_slug' => [
575 + 'name' => 'category_slug',
576 + 'type' => 'text',
577 + 'label' => __( 'Custom Category Slug', 'betterdocs' ),
578 + 'default' => 'docs-category',
579 + 'priority' => 6
580 + ],
581 + 'tag_slug' => [
582 + 'name' => 'tag_slug',
583 + 'type' => 'text',
584 + 'label' => __( 'Custom Tag Slug', 'betterdocs' ),
585 + 'default' => 'docs-tag',
819 586 'priority' => 7
820 - ),
821 - 'tag_slug' => array(
822 - 'name' => 'tag_slug',
823 - 'type' => 'text',
824 - 'label' => __( 'Custom Tag Slug', 'betterdocs' ),
825 - 'default' => 'docs-tag',
826 - 'priority' => 8
827 - ),
828 - 'permalink_structure' => array(
829 - 'name' => 'permalink_structure',
830 - 'type' => 'permalink_structure',
831 - 'label' => __( 'Single Docs Permalink', 'betterdocs' ),
832 - 'default' => PostType::permalink_structure(),
833 - 'priority' => 9,
834 - 'tags' => $this->normalize_options( array(
835 - '%doc_category%' => '%doc_category%',
587 + ],
588 + 'permalink_structure' => [
589 + 'name' => 'permalink_structure',
590 + 'type' => 'permalink_structure',
591 + 'label' => __( 'Single Docs Permalink', 'betterdocs' ),
592 + 'default' => PostType::permalink_structure(),
593 + 'priority' => 9,
594 + 'tags' => $this->normalize_options( [
595 + '%doc_category%' => '%doc_category%',
836 596 '%knowledge_base%' => '%knowledge_base%'
837 - ) ),
597 + ] ),
838 598 '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' )
839 - ),
840 - 'enable_glossaries' => array(
841 - 'name' => 'enable_glossaries',
842 - 'type' => 'toggle',
843 - 'label' => __( 'Show Glossary', 'betterdocs' ),
844 - 'label_subtitle' => __( 'Enable the glossary feature to allow users to look up definitions for terms used within your encyclopedia or glossaries themselves.', 'betterdocs' ),
599 + ],
600 + 'enable_faq_schema' => [
601 + 'name' => 'enable_faq_schema',
602 + 'type' => 'toggle',
603 + 'label' => __( 'FAQ Schema', 'betterdocs' ),
845 604 'enable_disable_text_active' => true,
846 - 'default' => false,
847 - 'priority' => 10,
848 - 'is_pro' => true
849 - ),
850 - 'enable_encyclopedia' => array(
851 - 'name' => 'enable_encyclopedia',
852 - 'type' => 'toggle',
853 - 'label' => __( 'Built-in Encyclopedia Page', 'betterdocs' ),
854 - 'enable_disable_text_active' => true,
855 - 'default' => false,
605 + 'default' => '',
606 + 'priority' => 10
607 + ],
608 + 'analytics_from' => [
609 + 'name' => 'analytics_from',
610 + 'type' => 'select',
611 + 'label' => __( 'Analytics From', 'betterdocs' ),
612 + 'options' => $this->normalize_options( [
613 + 'everyone' => __( 'Everyone', 'betterdocs' ),
614 + 'guests' => __( 'Guests Only', 'betterdocs' ),
615 + 'registered_users' => __( 'Registered Users Only', 'betterdocs' )
616 + ] ),
617 + 'default' => 'everyone',
856 618 'priority' => 11,
857 - 'is_pro' => true
858 - ),
859 - 'enable_faq_schema' => array(
860 - 'name' => 'enable_faq_schema',
861 - 'type' => 'toggle',
862 - 'label' => __( 'FAQ Schema', 'betterdocs' ),
619 + 'is_pro' => true
620 + ],
621 + 'unique_visitor_count' => [
622 + 'name' => 'unique_visitor_count',
623 + 'type' => 'toggle',
624 + 'label' => __( 'Unique Visitor Count', 'betterdocs' ),
863 625 'enable_disable_text_active' => true,
864 - 'default' => '',
865 - 'priority' => 12
866 - ),
867 - 'analytics_from' => array(
868 - 'name' => 'analytics_from',
869 - 'type' => 'select',
870 - 'label' => __( 'Analytics From', 'betterdocs' ),
871 - 'options' => $this->normalize_options( array(
872 - 'everyone' => __( 'Everyone', 'betterdocs' ),
873 - 'guests' => __( 'Guests Only', 'betterdocs' ),
874 - 'registered_users' => __( 'Registered Users Only', 'betterdocs' )
875 - ) ),
876 - 'default' => 'everyone',
877 - 'priority' => 13,
878 - 'is_pro' => true
879 - ),
880 - 'unique_visitor_count' => array(
881 - 'name' => 'unique_visitor_count',
882 - 'type' => 'toggle',
883 - 'label' => __( 'Unique Visitor Count', 'betterdocs' ),
626 + 'default' => true,
627 + 'priority' => 12,
628 + 'is_pro' => true
629 + ],
630 + 'exclude_bot_analytics' => [
631 + 'name' => 'exclude_bot_analytics',
632 + 'type' => 'toggle',
633 + 'label' => __( 'Exclude Bot Analytics', 'betterdocs' ),
884 634 'enable_disable_text_active' => true,
885 - 'default' => false,
886 - 'priority' => 14,
887 - 'is_pro' => true
888 - ),
889 - 'exclude_bot_analytics' => array(
890 - 'name' => 'exclude_bot_analytics',
891 - 'type' => 'toggle',
892 - 'label' => __( 'Exclude Bot Analytics', 'betterdocs' ),
893 - 'enable_disable_text_active' => true,
894 - 'default' => false,
895 - 'priority' => 15,
896 - 'is_pro' => true
897 - )
898 -
899 - )
900 - ) )
901 - )
902 - ) ),
903 - 'tab-layout' => apply_filters( 'betterdocs_settings_tab_layout', array(
904 - 'id' => 'tab-layout',
905 - 'label' => __( 'Layout', 'betterdocs' ),
906 - 'classes' => 'tab-layout',
635 + 'default' => true,
636 + 'priority' => 13,
637 + 'is_pro' => true
638 + ]
639 + ]
640 + ]
641 + ]
642 + ] ),
643 + 'tab-layout' => apply_filters( 'betterdocs_settings_tab_layout', [
644 + 'id' => 'tab-layout',
645 + 'label' => __( 'Layout', 'betterdocs' ),
646 + 'classes' => 'tab-layout',
907 647 'priority' => 20,
908 - 'fields' => array(
909 - 'title-layout' => array(
910 - 'name' => 'title-layout-tab',
911 - 'type' => 'section',
912 - 'label' => __( 'Layout Settings', 'betterdocs' ),
648 + 'fields' => [
649 + 'title-layout' => [
650 + 'name' => 'title-layout-tab',
651 + 'type' => 'section',
652 + 'label' => __( 'Layout Settings', 'betterdocs' ),
913 653 'priority' => 20,
914 - 'fields' => array(
915 - 'tab-sidebar-layout' => apply_filters( 'betterdocs_settings_tab_sidebar_layout', array(
916 - 'id' => 'tab-sidebar-layout',
917 - 'name' => 'tab_sidebar_layout',
918 - 'label' => __( 'Layout Settings', 'betterdocs' ),
919 - 'classes' => 'tab-layout',
920 - 'type' => 'tab',
921 - 'active' => 'layout_documentation_page',
654 + 'fields' => [
655 + 'tab-sidebar-layout' => apply_filters( 'betterdocs_settings_tab_sidebar_layout', [
656 + 'id' => 'tab-sidebar-layout',
657 + 'name' => 'tab_sidebar_layout',
658 + 'label' => __( 'Layout Settings', 'betterdocs' ),
659 + 'classes' => 'tab-layout',
660 + 'type' => "tab",
661 + 'active' => "layout_documentation_page",
922 662 'completionTrack' => true,
923 - 'sidebar' => false,
924 - 'save' => false,
925 - 'title' => false,
926 - 'config' => array(
927 - 'active' => 'layout_documentation_page',
663 + 'sidebar' => false,
664 + 'save' => false,
665 + 'title' => false,
666 + 'config' => [
667 + 'active' => 'layout_documentation_page',
928 668 'sidebar' => false,
929 - 'title' => false
930 - ),
931 - 'submit' => array(
669 + 'title' => false
670 + ],
671 + 'submit' => [
932 672 'show' => false
933 - ),
934 - 'step' => array(
673 + ],
674 + 'step' => [
935 675 'show' => false
936 - ),
937 - 'priority' => 20,
938 - 'fields' => array(
939 - 'layout_documentation_page' => array(
940 - 'id' => 'layout_documentation_page',
941 - 'name' => 'layout_documentation_page',
942 - 'type' => 'section',
943 - 'label' => __( 'Documentation Page', 'betterdocs' ),
676 + ],
677 + 'priority' => 20,
678 + 'fields' => [
679 + 'layout_documentation_page' => [
680 + 'id' => 'layout_documentation_page',
681 + 'name' => 'layout_documentation_page',
682 + 'type' => 'section',
683 + 'label' => __( 'Documentation Page', 'betterdocs' ),
944 684 'priority' => 1,
945 - 'fields' => array(
946 - 'tab-nested-layout-1' => array(
947 - 'id' => 'tab-nested-layout-1',
948 - 'name' => 'tab_nested_layout_1',
949 - 'label' => __( 'Documentation Page', 'betterdocs' ),
950 - 'classes' => 'tab-nested-layout',
951 - 'type' => 'tab',
952 - 'active' => 'layout_documentation_page_general',
685 + 'fields' => [
686 + 'tab-nested-layout-1' => [
687 + 'id' => 'tab-nested-layout-1',
688 + 'name' => 'tab_nested_layout_1',
689 + 'label' => __( 'Documentation Page', 'betterdocs' ),
690 + 'classes' => 'tab-nested-layout',
691 + 'type' => "tab",
692 + 'active' => "layout_documentation_page_general",
953 693 'completionTrack' => true,
954 - 'sidebar' => false,
955 - 'save' => false,
956 - 'title' => false,
957 - 'config' => array(
958 - 'active' => 'layout_documentation_page_general',
694 + 'sidebar' => false,
695 + 'save' => false,
696 + 'title' => false,
697 + 'config' => [
698 + 'active' => 'layout_documentation_page_general',
959 699 'sidebar' => false,
960 - 'title' => false
961 - ),
962 - 'submit' => array(
700 + 'title' => false
701 + ],
702 + 'submit' => [
963 703 'show' => false
964 - ),
965 - 'step' => array(
704 + ],
705 + 'step' => [
966 706 'show' => false
967 - ),
968 - 'priority' => 1,
969 - 'fields' => array(
970 - 'layout_documentation_page_general' => array(
971 - 'id' => 'layout_documentation_page_general',
972 - 'name' => 'layout_documentation_page_general',
973 - 'type' => 'section',
974 - 'label' => __( 'General', 'betterdocs' ),
707 + ],
708 + 'priority' => 1,
709 + 'fields' => [
710 + 'layout_documentation_page_general' => [
711 + 'id' => 'layout_documentation_page_general',
712 + 'name' => 'layout_documentation_page_general',
713 + 'type' => 'section',
714 + 'label' => __( 'General', 'betterdocs' ),
975 715 'priority' => 1,
976 - 'fields' => array(
977 - 'docs_list_icon' => array(
978 - 'name' => 'docs_list_icon',
979 - 'type' => 'media',
980 - 'value' => '',
981 - 'label' => __( 'Docs List Icon', 'betterdocs' ),
982 - 'label_subtitle' => __( 'Upload your own preferred document list icon', 'betterdocs' ),
983 - 'priority' => 0
984 - ),
985 - 'category_title_link' => array(
986 - 'name' => 'category_title_link',
987 - 'type' => 'toggle',
988 - 'label' => __( 'Category Title Link', 'betterdocs' ),
989 - 'label_subtitle' => __( 'This setting is applicable for category grid layout', 'betterdocs' ),
716 + 'fields' => [
717 + 'category_title_link' => [
718 + 'name' => 'category_title_link',
719 + 'type' => 'toggle',
720 + 'label' => __( 'Category Title Link', 'betterdocs' ),
721 + 'label_subtitle' => __( 'This setting is applicable for category grid layout', 'betterdocs' ),
990 722 'enable_disable_text_active' => true,
991 - 'default' => false,
992 - 'priority' => 0
993 - ),
994 - 'masonry_layout' => array(
995 - 'name' => 'masonry_layout',
996 - 'type' => 'toggle',
997 - 'label' => __( 'Masonry', 'betterdocs' ),
723 + 'default' => false,
724 + 'priority' => 0
725 + ],
726 + 'masonry_layout' => [
727 + 'name' => 'masonry_layout',
728 + 'type' => 'toggle',
729 + 'label' => __( 'Masonry', 'betterdocs' ),
998 730 'enable_disable_text_active' => true,
999 - 'default' => 1,
1000 - 'priority' => 1
1001 - ),
1002 - 'nested_subcategory' => array(
1003 - 'name' => 'nested_subcategory',
1004 - 'type' => 'toggle',
1005 - 'label' => __( 'Nested Sub Category', 'betterdocs' ),
731 + 'default' => 1,
732 + 'priority' => 1
733 + ],
734 + 'nested_subcategory' => [
735 + 'name' => 'nested_subcategory',
736 + 'type' => 'toggle',
737 + 'label' => __( 'Nested Sub Category', 'betterdocs' ),
1006 738 'enable_disable_text_active' => true,
1007 - 'default' => '',
1008 - 'priority' => 2
1009 - ),
1010 - 'column_number' => array(
1011 - 'name' => 'column_number',
1012 - 'type' => 'number',
1013 - 'label' => __( 'Number Of Columns', 'betterdocs' ),
1014 - 'label_subtitle' => __( 'This setting is not applicable for sleek layout.', 'betterdocs' ),
1015 - 'default' => 3,
739 + 'default' => '',
740 + 'priority' => 2
741 + ],
742 + 'column_number' => [
743 + 'name' => 'column_number',
744 + 'type' => 'number',
745 + 'label' => __( 'Number Of Columns', 'betterdocs' ),
746 + 'default' => 3,
1016 747 'priority' => 3
1017 - ),
1018 - 'posts_number' => apply_filters( 'betterdocs_posts_number', array(
1019 - 'name' => 'posts_number',
1020 - 'type' => 'number',
1021 - 'label' => __( 'Number Of Docs', 'betterdocs' ),
748 + ],
749 + 'posts_number' => apply_filters( 'betterdocs_posts_number', [
750 + 'name' => 'posts_number',
751 + 'type' => 'number',
752 + 'label' => __( 'Number Of Docs', 'betterdocs' ),
1022 753 'label_subtitle' => __( 'This setting is not applicable for handbook layout.', 'betterdocs' ),
1023 - 'default' => 10,
1024 - 'priority' => 4
1025 - ) ),
1026 - 'post_count' => array(
1027 - 'name' => 'post_count',
1028 - 'type' => 'toggle',
1029 - 'label' => __( 'Doc Count', 'betterdocs' ),
754 + 'default' => 10,
755 + 'priority' => 4
756 + ] ),
757 + 'post_count' => [
758 + 'name' => 'post_count',
759 + 'type' => 'toggle',
760 + 'label' => __( 'Doc Count', 'betterdocs' ),
1030 761 'enable_disable_text_active' => true,
1031 - 'default' => 1,
1032 - 'priority' => 5
1033 - ),
1034 - 'count_text' => array(
1035 - 'name' => 'count_text',
1036 - 'type' => 'text',
1037 - 'label' => __( 'Count Text', 'betterdocs' ),
1038 - 'default' => __( 'Docs', 'betterdocs' ),
762 + 'default' => 1,
763 + 'priority' => 5
764 + ],
765 + 'count_text' => [
766 + 'name' => 'count_text',
767 + 'type' => 'text',
768 + 'label' => __( 'Count Text', 'betterdocs' ),
769 + 'default' => __( 'docs', 'betterdocs' ),
1039 770 'priority' => 6
1040 - ),
1041 - 'count_text_singular' => array(
1042 - 'name' => 'count_text_singular',
1043 - 'type' => 'text',
1044 - 'label' => __( 'Count Text Singular', 'betterdocs' ),
1045 - 'default' => __( 'Doc', 'betterdocs' ),
771 + ],
772 + 'count_text_singular' => [
773 + 'name' => 'count_text_singular',
774 + 'type' => 'text',
775 + 'label' => __( 'Count Text Singular', 'betterdocs' ),
776 + 'default' => __( 'doc', 'betterdocs' ),
1046 777 'priority' => 7
1047 - ),
1048 - 'exploremore_btn' => array(
1049 - 'name' => 'exploremore_btn',
1050 - 'type' => 'toggle',
1051 - 'label' => __( 'Explore More Button', 'betterdocs' ),
778 + ],
779 + 'exploremore_btn' => [
780 + 'name' => 'exploremore_btn',
781 + 'type' => 'toggle',
782 + 'label' => __( 'Explore More Button', 'betterdocs' ),
1052 783 'enable_disable_text_active' => true,
1053 - 'default' => true,
1054 - 'priority' => 8
1055 - ),
1056 - 'exploremore_btn_txt' => array(
1057 - 'name' => 'exploremore_btn_txt',
1058 - 'type' => 'text',
1059 - 'label' => __( 'Explore More Button Text', 'betterdocs' ),
1060 - 'default' => __( 'Explore More', 'betterdocs' ),
784 + 'default' => true,
785 + 'priority' => 8
786 + ],
787 + 'exploremore_btn_txt' => [
788 + 'name' => 'exploremore_btn_txt',
789 + 'type' => 'text',
790 + 'label' => __( 'Explore More Button Text', 'betterdocs' ),
791 + 'default' => __( 'Explore More', 'betterdocs' ),
1061 792 'priority' => 9,
1062 - 'rules' => Rules::is( 'exploremore_btn', true )
1063 - ),
1064 - 'betterdocs_popular_docs_text' => array(
1065 - 'name' => 'betterdocs_popular_docs_text',
1066 - 'type' => 'text',
1067 - 'label' => __( 'Popular Docs Text', 'betterdocs' ),
1068 - 'default' => __( 'Popular Docs', 'betterdocs' ),
793 + 'rules' => Rules::is( 'exploremore_btn', true )
794 + ],
795 + 'betterdocs_popular_docs_text' => [
796 + 'name' => 'betterdocs_popular_docs_text',
797 + 'type' => 'text',
798 + 'label' => __( 'Popular Docs Text', 'betterdocs' ),
799 + 'default' => __( 'Popular Docs', 'betterdocs' ),
1069 800 'priority' => 10,
1070 - 'is_pro' => true
1071 - ),
1072 - 'betterdocs_popular_docs_number' => array(
1073 - 'name' => 'betterdocs_popular_docs_number',
1074 - 'type' => 'number',
1075 - 'label' => __( 'Popular Docs Number', 'betterdocs' ),
1076 - 'default' => 10,
801 + "is_pro" => true
802 + ],
803 + 'betterdocs_popular_docs_number' => [
804 + 'name' => 'betterdocs_popular_docs_number',
805 + 'type' => 'number',
806 + 'label' => __( 'Popular Docs Number', 'betterdocs' ),
807 + 'default' => 10,
1077 808 'priority' => 11,
1078 - 'is_pro' => true
1079 - )
1080 - )
1081 - ),
1082 - 'layout_documentation_page_search' => array(
1083 - 'id' => 'layout_documentation_page_search',
1084 - 'name' => 'layout_documentation_page_search',
1085 - 'type' => 'section',
1086 - 'label' => __( 'Search', 'betterdocs' ),
809 + "is_pro" => true
810 + ]
811 + ]
812 + ],
813 + 'layout_documentation_page_search' => [
814 + 'id' => 'layout_documentation_page_search',
815 + 'name' => 'layout_documentation_page_search',
816 + 'type' => 'section',
817 + 'label' => __( 'Search', 'betterdocs' ),
1087 818 'priority' => 2,
1088 - 'fields' => array(
1089 - 'live_search' => array(
1090 - 'name' => 'live_search',
1091 - 'type' => 'toggle',
1092 - 'label' => __( 'Live Search', 'betterdocs' ),
819 + 'fields' => [
820 + 'live_search' => [
821 + 'name' => 'live_search',
822 + 'type' => 'toggle',
823 + 'label' => __( 'Live Search', 'betterdocs' ),
1093 824 'enable_disable_text_active' => true,
1094 - 'default' => 1,
1095 - 'priority' => 1
1096 - ),
1097 - 'advance_search' => apply_filters( 'betterdocs_advance_search_settings', array(
1098 - 'name' => 'advance_search',
1099 - 'type' => 'toggle',
1100 - 'label' => __( 'Advanced Search', 'betterdocs' ),
825 + 'default' => 1,
826 + 'priority' => 1
827 + ],
828 + 'advance_search' => apply_filters( 'betterdocs_advance_search_settings', [
829 + 'name' => 'advance_search',
830 + 'type' => 'toggle',
831 + 'label' => __( 'Advanced Search', 'betterdocs' ),
1101 832 'enable_disable_text_active' => true,
1102 - 'default' => '',
1103 - 'priority' => 2,
1104 - 'is_pro' => true
1105 - ) ),
1106 - // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- legacy public filter name for category-exclude settings field, retained for back-compat.
1107 - 'child_category_exclude' => apply_filters( 'child_category_exclude', array(
1108 - 'name' => 'child_category_exclude',
1109 - 'type' => 'toggle',
1110 - 'label' => __( 'Exclude Child Terms In Category Search', 'betterdocs' ),
833 + 'default' => '',
834 + 'priority' => 2,
835 + 'is_pro' => true
836 + ] ),
837 + 'child_category_exclude' => apply_filters( 'child_category_exclude', [
838 + 'name' => 'child_category_exclude',
839 + 'type' => 'toggle',
840 + 'label' => __( 'Exclude Child Terms In Category Search', 'betterdocs' ),
1111 841 'enable_disable_text_active' => true,
1112 - 'default' => '',
1113 - 'priority' => 3,
1114 - 'is_pro' => true
1115 - ) ),
1116 - 'popular_keyword_limit' => apply_filters( 'betterdocs_popular_keyword_limit_settings', array(
1117 - 'name' => 'popular_keyword_limit',
1118 - 'type' => 'number',
1119 - 'label' => __( 'Minimum amount of Keywords Search', 'betterdocs' ),
1120 - 'default' => 5,
842 + 'default' => '',
843 + 'priority' => 3,
844 + 'is_pro' => true
845 + ] ),
846 + 'popular_keyword_limit' => apply_filters( 'betterdocs_popular_keyword_limit_settings', [
847 + 'name' => 'popular_keyword_limit',
848 + 'type' => 'number',
849 + 'label' => __( 'Minimum amount of Keywords Search', 'betterdocs' ),
850 + 'default' => 5,
1121 851 'priority' => 4,
1122 - 'is_pro' => true
1123 - ) ),
1124 - 'search_letter_limit' => array(
1125 - 'name' => 'search_letter_limit',
1126 - 'type' => 'number',
1127 - 'label' => __( 'Minimum Character Limit For Search Result', 'betterdocs' ),
852 + 'is_pro' => true
853 + ] ),
854 + 'search_letter_limit' => [
855 + 'name' => 'search_letter_limit',
856 + 'type' => 'number',
857 + 'label' => __( 'Minimum Character Limit For Search Result', 'betterdocs' ),
1128 858 'priority' => 5,
1129 - 'default' => 3
1130 - ),
1131 - 'search_placeholder' => array(
1132 - 'name' => 'search_placeholder',
1133 - 'type' => 'text',
1134 - 'label' => __( 'Search Placeholder', 'betterdocs' ),
1135 - 'default' => __( 'Search..', 'betterdocs' ),
859 + 'default' => 3
860 + ],
861 + 'search_placeholder' => [
862 + 'name' => 'search_placeholder',
863 + 'type' => 'text',
864 + 'label' => __( 'Search Placeholder', 'betterdocs' ),
865 + 'default' => __( 'Search..', 'betterdocs' ),
1136 866 'priority' => 6
1137 - ),
1138 - 'search_button_text' => apply_filters( 'betterdocs_search_button_text', array(
1139 - 'name' => 'search_button_text',
1140 - 'type' => 'text',
1141 - 'label' => __( 'Search Button Text', 'betterdocs' ),
867 + ],
868 + 'search_button_text' => apply_filters( 'betterdocs_search_button_text', [
869 + 'name' => 'search_button_text',
870 + 'type' => 'text',
871 + 'label' => __( 'Search Button Text', 'betterdocs' ),
1142 872 'priority' => 7,
1143 - 'default' => __( 'Search', 'betterdocs' )
1144 - ) ),
1145 - 'search_not_found_text' => array(
1146 - 'name' => 'search_not_found_text',
1147 - 'type' => 'text',
1148 - 'label' => __( 'Search Not Found Text', 'betterdocs' ),
1149 - 'default' => 'Sorry, no docs were found.',
873 + 'default' => __( 'Search', 'betterdocs' ),
874 + 'is_pro' => true
875 + ] ),
876 + 'search_not_found_text' => [
877 + 'name' => 'search_not_found_text',
878 + 'type' => 'text',
879 + 'label' => __( 'Search Not Found Text', 'betterdocs' ),
880 + 'default' => 'Sorry, no docs were found.',
1150 881 'priority' => 8
1151 - ),
1152 - 'search_result_image' => array(
1153 - 'name' => 'search_result_image',
1154 - 'type' => 'toggle',
1155 - 'label' => __( 'Search Result Image', 'betterdocs' ),
882 + ],
883 + 'search_result_image' => [
884 + 'name' => 'search_result_image',
885 + 'type' => 'toggle',
886 + 'label' => __( 'Search Result Image', 'betterdocs' ),
1156 887 'enable_disable_text_active' => true,
1157 - 'default' => 1,
1158 - 'priority' => 9
1159 - ),
1160 - 'kb_based_search' => apply_filters( 'betterdocs_kb_based_search_settings', array(
1161 - 'name' => 'kb_based_search',
1162 - 'type' => 'toggle',
1163 - 'label' => __( 'KB Based Search', 'betterdocs' ),
888 + 'default' => 1,
889 + 'priority' => 9
890 + ],
891 + 'kb_based_search' => apply_filters( 'betterdocs_kb_based_search_settings', [
892 + 'name' => 'kb_based_search',
893 + 'type' => 'toggle',
894 + 'label' => __( 'KB Based Search', 'betterdocs' ),
1164 895 'enable_disable_text_active' => true,
1165 - 'default' => '',
1166 - 'priority' => 10,
1167 - 'is_pro' => true,
1168 - 'rules' => Rules::is( 'multiple_kb', true )
1169 - ) ),
1170 - 'search_modal_search_type' => array(
1171 - 'name' => 'search_modal_search_type',
1172 - 'type' => 'select',
1173 - 'label' => __( 'Search Modal Source', 'betterdocs' ),
1174 - 'label_subtitle' => __( 'Choose the content type to be shown in the search modal. <br> <b>Note:</b> This is only applicable on Modal Search.', 'betterdocs' ),
1175 - 'default' => 'all',
1176 - 'options' => $this->normalize_options( array(
1177 - 'all' => __( 'Both (Docs + FAQs)', 'betterdocs' ),
1178 - 'docs' => __( 'Docs only', 'betterdocs' ),
1179 - 'faq' => __( 'FAQs only', 'betterdocs' )
1180 - ) ),
1181 - 'priority' => 11
1182 - )
1183 - )
1184 - ),
1185 - 'layout_documentation_page_order_by' => array(
1186 - 'id' => 'layout_documentation_page_order_by',
1187 - 'name' => 'layout_documentation_page_order_by',
1188 - 'type' => 'section',
1189 - 'label' => __( 'Order By', 'betterdocs' ),
896 + 'default' => '',
897 + 'priority' => 10,
898 + 'is_pro' => true,
899 + 'rules' => Rules::is( 'multiple_kb', true )
900 + ] )
901 + ]
902 + ],
903 + 'layout_documentation_page_order_by' => [
904 + 'id' => 'layout_documentation_page_order_by',
905 + 'name' => 'layout_documentation_page_order_by',
906 + 'type' => 'section',
907 + 'label' => __( 'Order By', 'betterdocs' ),
1190 908 'priority' => 3,
1191 - 'fields' => array(
1192 - 'terms_orderby' => array(
1193 - 'name' => 'terms_orderby',
1194 - 'type' => 'select',
1195 - 'label' => __( 'Terms Order By', 'betterdocs' ),
1196 - 'default' => 'betterdocs_order',
1197 - 'options' => $this->normalize_options( apply_filters( 'betterdocs_terms_orderby_options', array(
1198 - 'none' => __( 'No order', 'betterdocs' ),
1199 - 'name' => __( 'Name', 'betterdocs' ),
1200 - 'slug' => __( 'Slug', 'betterdocs' ),
1201 - 'term_group' => __( 'Term Group', 'betterdocs' ),
1202 - 'term_id' => __( 'Term ID', 'betterdocs' ),
1203 - 'id' => __( 'ID', 'betterdocs' ),
1204 - 'description' => __( 'Description', 'betterdocs' ),
1205 - 'parent' => __( 'Parent', 'betterdocs' ),
909 + 'fields' => [
910 + 'terms_orderby' => [
911 + 'name' => 'terms_orderby',
912 + 'type' => 'select',
913 + 'label' => __( 'Terms Order By', 'betterdocs' ),
914 + 'default' => 'betterdocs_order',
915 + 'options' => $this->normalize_options( apply_filters( 'betterdocs_terms_orderby_options', [
916 + 'none' => __( 'No order', 'betterdocs' ),
917 + 'name' => __( 'Name', 'betterdocs' ),
918 + 'slug' => __( 'Slug', 'betterdocs' ),
919 + 'term_group' => __( 'Term Group', 'betterdocs' ),
920 + 'term_id' => __( 'Term ID', 'betterdocs' ),
921 + 'id' => __( 'ID', 'betterdocs' ),
922 + 'description' => __( 'Description', 'betterdocs' ),
923 + 'parent' => __( 'Parent', 'betterdocs' ),
1206 924 'betterdocs_order' => __( 'BetterDocs Order', 'betterdocs' )
1207 - ) ) ),
925 + ] ) ),
1208 926 'priority' => 1
1209 - ),
1210 - 'terms_order' => array(
1211 - 'name' => 'terms_order',
1212 - 'type' => 'select',
1213 - 'label' => __( 'Terms Order', 'betterdocs' ),
1214 - 'default' => 'ASC',
1215 - 'options' => $this->normalize_options( array(
1216 - 'ASC' => 'Ascending',
927 + ],
928 + 'terms_order' => [
929 + 'name' => 'terms_order',
930 + 'type' => 'select',
931 + 'label' => __( 'Terms Order', 'betterdocs' ),
932 + 'default' => 'ASC',
933 + 'options' => $this->normalize_options( [
934 + 'ASC' => 'Ascending',
1217 935 'DESC' => 'Descending'
1218 - ) ),
1219 - 'priority' => 3,
1220 - 'rules' => Rules::includes( 'terms_orderby', 'betterdocs_order', true )
1221 - ),
1222 - 'alphabetically_order_post' => array(
1223 - 'name' => 'alphabetically_order_post',
1224 - 'type' => 'select',
1225 - 'label' => __( 'Docs Order By', 'betterdocs' ),
1226 - 'default' => 'betterdocs_order',
1227 - 'options' => $this->normalize_options( array(
1228 - 'none' => __( 'No order', 'betterdocs' ),
1229 - 'ID' => __( 'Docs ID', 'betterdocs' ),
1230 - 'author' => __( 'Docs Author', 'betterdocs' ),
1231 - 'title' => __( 'Title', 'betterdocs' ),
1232 - 'date' => __( 'Date', 'betterdocs' ),
1233 - 'modified' => __( 'Last Modified Date', 'betterdocs' ),
1234 - 'parent' => __( 'Parent Id', 'betterdocs' ),
1235 - 'rand' => __( 'Random', 'betterdocs' ),
1236 - 'comment_count' => __( 'Comment Count', 'betterdocs' ),
1237 - 'menu_order' => __( 'Menu Order', 'betterdocs' ),
936 + ] ),
937 + 'priority' => 3
938 + ],
939 + 'alphabetically_order_post' => [
940 + 'name' => 'alphabetically_order_post',
941 + 'type' => 'select',
942 + 'label' => __( 'Docs Order By', 'betterdocs' ),
943 + 'default' => 'betterdocs_order',
944 + 'options' => $this->normalize_options( [
945 + 'none' => __( 'No order', 'betterdocs' ),
946 + 'ID' => __( 'Docs ID', 'betterdocs' ),
947 + 'author' => __( 'Docs Author', 'betterdocs' ),
948 + 'title' => __( 'Title', 'betterdocs' ),
949 + 'date' => __( 'Date', 'betterdocs' ),
950 + 'modified' => __( 'Last Modified Date', 'betterdocs' ),
951 + 'parent' => __( 'Parent Id', 'betterdocs' ),
952 + 'rand' => __( 'Random', 'betterdocs' ),
953 + 'comment_count' => __( 'Comment Count', 'betterdocs' ),
954 + 'menu_order' => __( 'Menu Order', 'betterdocs' ),
1238 955 'betterdocs_order' => __( 'BetterDocs Order', 'betterdocs' )
1239 - ) ),
956 + ] ),
1240 957 'priority' => 4
1241 - ),
1242 - 'docs_order' => array(
1243 - 'name' => 'docs_order',
1244 - 'type' => 'select',
1245 - 'label' => __( 'Docs Order', 'betterdocs' ),
1246 - 'default' => 'ASC',
1247 - 'options' => $this->normalize_options( array(
1248 - 'ASC' => 'Ascending',
958 + ],
959 + 'docs_order' => [
960 + 'name' => 'docs_order',
961 + 'type' => 'select',
962 + 'label' => __( 'Docs Order', 'betterdocs' ),
963 + 'default' => 'ASC',
964 + 'options' => $this->normalize_options( [
965 + 'ASC' => 'Ascending',
1249 966 'DESC' => 'Descending'
1250 - ) ),
1251 - 'priority' => 5,
1252 - 'rules' => Rules::includes( 'alphabetically_order_post', 'betterdocs_order', true )
1253 - )
1254 - )
1255 - )
1256 - )
1257 - )
1258 - )
1259 - ),
1260 - // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- legacy public filter name for single-doc setting section, retained for back-compat.
1261 - 'layout_single_doc' => apply_filters( 'single_doc_setting_section', array(
1262 - 'id' => 'layout_single_doc',
1263 - 'name' => 'layout_single_doc',
1264 - 'type' => 'section',
1265 - 'label' => __( 'Single Doc', 'betterdocs' ),
967 + ] ),
968 + 'priority' => 5
969 + ]
970 + ]
971 + ]
972 + ]
973 + ]
974 + ]
975 + ],
976 + 'layout_single_doc' => apply_filters( 'single_doc_setting_section', [
977 + 'id' => 'layout_single_doc',
978 + 'name' => 'layout_single_doc',
979 + 'type' => 'section',
980 + 'label' => __( 'Single Doc', 'betterdocs' ),
1266 981 'priority' => 2,
1267 - 'fields' => array(
1268 - 'tab-nested-layout-2' => array(
1269 - 'id' => 'tab-nested-layout-2',
1270 - 'name' => 'tab_nested_layout_2',
1271 - 'label' => __( 'Single Doc', 'betterdocs' ),
1272 - 'classes' => 'tab-nested-layout',
1273 - 'type' => 'tab',
1274 - 'active' => 'layout_single_doc_general',
982 + 'fields' => [
983 + 'tab-nested-layout-2' => [
984 + 'id' => 'tab-nested-layout-2',
985 + 'name' => 'tab_nested_layout_2',
986 + 'label' => __( 'Single Doc', 'betterdocs' ),
987 + 'classes' => 'tab-nested-layout',
988 + 'type' => "tab",
989 + 'active' => "layout_single_doc_general",
1275 990 'completionTrack' => true,
1276 - 'sidebar' => false,
1277 - 'save' => false,
1278 - 'title' => false,
1279 - 'config' => array(
1280 - 'active' => 'layout_single_doc_general',
991 + 'sidebar' => false,
992 + 'save' => false,
993 + 'title' => false,
994 + 'config' => [
995 + 'active' => 'layout_single_doc_general',
1281 996 'sidebar' => false,
1282 - 'title' => false
1283 - ),
1284 - 'submit' => array(
997 + 'title' => false
998 + ],
999 + 'submit' => [
1285 1000 'show' => false
1286 - ),
1287 - 'step' => array(
1001 + ],
1002 + 'step' => [
1288 1003 'show' => false
1289 - ),
1290 - 'priority' => 20,
1291 - 'fields' => array(
1292 - 'layout_single_doc_general' => array(
1293 - 'id' => 'layout_single_doc_general',
1294 - 'name' => 'layout_single_doc_general',
1295 - 'type' => 'section',
1296 - 'label' => __( 'General', 'betterdocs' ),
1004 + ],
1005 + 'priority' => 20,
1006 + 'fields' => [
1007 + 'layout_single_doc_general' => [
1008 + 'id' => 'layout_single_doc_general',
1009 + 'name' => 'layout_single_doc_general',
1010 + 'type' => 'section',
1011 + 'label' => __( 'General', 'betterdocs' ),
1297 1012 'priority' => 5,
1298 - 'fields' => array(
1299 - 'enable_post_title' => array(
1300 - 'name' => 'enable_post_title',
1301 - 'type' => 'toggle',
1302 - 'label' => __( 'Doc Title', 'betterdocs' ),
1013 + 'fields' => [
1014 + 'enable_post_title' => [
1015 + 'name' => 'enable_post_title',
1016 + 'type' => 'toggle',
1017 + 'label' => __( 'Doc Title', 'betterdocs' ),
1303 1018 'enable_disable_text_active' => true,
1304 - 'default' => 1,
1305 - 'priority' => 1
1306 - ),
1307 - 'enable_sidebar_cat_list' => array(
1308 - 'name' => 'enable_sidebar_cat_list',
1309 - 'type' => 'toggle',
1310 - 'label' => __( 'Sidebar Category List', 'betterdocs' ),
1019 + 'default' => 1,
1020 + 'priority' => 1
1021 + ],
1022 + 'enable_sidebar_cat_list' => [
1023 + 'name' => 'enable_sidebar_cat_list',
1024 + 'type' => 'toggle',
1025 + 'label' => __( 'Sidebar Category List', 'betterdocs' ),
1311 1026 'enable_disable_text_active' => true,
1312 - 'default' => 1,
1313 - 'priority' => 2
1314 - ),
1315 - 'enable_print_icon' => array(
1316 - 'name' => 'enable_print_icon',
1317 - 'type' => 'toggle',
1318 - 'label' => __( 'Print Icon', 'betterdocs' ),
1027 + 'default' => 1,
1028 + 'priority' => 2
1029 + ],
1030 + 'enable_print_icon' => [
1031 + 'name' => 'enable_print_icon',
1032 + 'type' => 'toggle',
1033 + 'label' => __( 'Print Icon', 'betterdocs' ),
1319 1034 'enable_disable_text_active' => true,
1320 - 'default' => 1,
1321 - 'priority' => 3
1322 - ),
1323 - 'enable_tags' => array(
1324 - 'name' => 'enable_tags',
1325 - 'type' => 'toggle',
1326 - 'label' => __( 'Tags', 'betterdocs' ),
1035 + 'default' => 1,
1036 + 'priority' => 3
1037 + ],
1038 + 'enable_tags' => [
1039 + 'name' => 'enable_tags',
1040 + 'type' => 'toggle',
1041 + 'label' => __( 'Tags', 'betterdocs' ),
1327 1042 'enable_disable_text_active' => true,
1328 - 'default' => 1,
1329 - 'priority' => 4
1330 - ),
1331 - 'show_last_update_time' => array(
1332 - 'name' => 'show_last_update_time',
1333 - 'type' => 'toggle',
1334 - 'label' => __( 'Last Update Time', 'betterdocs' ),
1043 + 'default' => 1,
1044 + 'priority' => 4
1045 + ],
1046 + 'show_last_update_time' => [
1047 + 'name' => 'show_last_update_time',
1048 + 'type' => 'toggle',
1049 + 'label' => __( 'Last Update Time', 'betterdocs' ),
1335 1050 'enable_disable_text_active' => true,
1336 - 'default' => 1,
1337 - 'priority' => 5
1338 - ),
1339 - 'enable_navigation' => array(
1340 - 'name' => 'enable_navigation',
1341 - 'type' => 'toggle',
1342 - 'label' => __( 'Navigation', 'betterdocs' ),
1051 + 'default' => 1,
1052 + 'priority' => 5
1053 + ],
1054 + 'enable_navigation' => [
1055 + 'name' => 'enable_navigation',
1056 + 'type' => 'toggle',
1057 + 'label' => __( 'Navigation', 'betterdocs' ),
1343 1058 'enable_disable_text_active' => true,
1344 - 'default' => 1,
1345 - 'priority' => 6
1346 - ),
1347 - 'enable_comment' => array(
1348 - 'name' => 'enable_comment',
1349 - 'type' => 'toggle',
1350 - 'label' => __( 'Comment', 'betterdocs' ),
1059 + 'default' => 1,
1060 + 'priority' => 6
1061 + ],
1062 + 'enable_comment' => [
1063 + 'name' => 'enable_comment',
1064 + 'type' => 'toggle',
1065 + 'label' => __( 'Comment', 'betterdocs' ),
1351 1066 'enable_disable_text_active' => true,
1352 - 'default' => '',
1353 - 'priority' => 7
1354 - ),
1355 - 'enable_credit' => array(
1356 - 'name' => 'enable_credit',
1357 - 'type' => 'toggle',
1358 - 'label' => __( 'Show Powered by BetterDocs', 'betterdocs' ),
1067 + 'default' => '',
1068 + 'priority' => 7
1069 + ],
1070 + 'enable_credit' => [
1071 + 'name' => 'enable_credit',
1072 + 'type' => 'toggle',
1073 + 'label' => __( 'Show Powered by BetterDocs', 'betterdocs' ),
1359 1074 'enable_disable_text_active' => true,
1360 - 'default' => '',
1361 - 'priority' => 8
1362 - ),
1363 - 'reaction_feedback_text' => array(
1364 - 'name' => 'reaction_feedback_text',
1365 - 'type' => 'text',
1366 - 'label' => __( 'Reaction Feedback Text', 'betterdocs' ),
1367 - 'default' => __( 'Thanks for your feedback.', 'betterdocs' ),
1368 - 'priority' => 9
1369 - ),
1370 - 'enable_estimated_reading_time' => array(
1371 - 'name' => 'enable_estimated_reading_time',
1372 - 'type' => 'toggle',
1373 - 'label' => __( 'Estimated Reading Time', 'betterdocs' ),
1075 + 'default' => '',
1076 + 'priority' => 8
1077 + ],
1078 + 'enable_estimated_reading_time' => [
1079 + 'name' => 'enable_estimated_reading_time',
1080 + 'type' => 'toggle',
1081 + 'label' => __( 'Estimated Reading Time', 'betterdocs' ),
1374 1082 'enable_disable_text_active' => true,
1375 - 'default' => 0,
1376 - 'priority' => 10
1377 - ),
1378 - 'estimated_reading_time_title' => array(
1379 - 'name' => 'estimated_reading_time_title',
1380 - 'type' => 'text',
1381 - 'label' => __( 'Estimated Reading Time Title', 'betterdocs' ),
1382 - 'default' => '',
1383 - 'priority' => 11,
1384 - 'rules' => Rules::is( 'enable_estimated_reading_time', true )
1385 - ),
1386 - 'estimated_reading_time_text' => array(
1387 - 'name' => 'estimated_reading_time_text',
1388 - 'type' => 'text',
1389 - 'label' => __( 'Estimated Reading Time Text', 'betterdocs' ),
1390 - 'default' => __( 'min read', 'betterdocs' ),
1391 - 'priority' => 12,
1392 - 'rules' => Rules::is( 'enable_estimated_reading_time', true )
1393 - ),
1394 - 'singular_estimated_reading_time_text' => array(
1395 - 'name' => 'singular_estimated_reading_time_text',
1396 - 'type' => 'text',
1397 - 'label' => __( 'Estimated Reading Time Text Singular', 'betterdocs' ),
1398 - 'default' => __( 'min read', 'betterdocs' ),
1399 - 'priority' => 13,
1400 - 'rules' => Rules::is( 'enable_estimated_reading_time', true )
1401 - )
1402 - )
1403 - ),
1404 - 'layout_single_doc_TOC' => array(
1405 - 'id' => 'layout_single_doc_TOC',
1406 - 'name' => 'layout_single_doc_TOC',
1407 - 'type' => 'section',
1408 - 'label' => __( 'TOC', 'betterdocs' ),
1083 + 'default' => 0,
1084 + 'priority' => 9
1085 + ],
1086 + 'reaction_feedback_text' => [
1087 + 'name' => 'reaction_feedback_text',
1088 + 'type' => 'text',
1089 + 'label' => __( 'Reaction Feedback Text', 'betterdocs' ),
1090 + 'default' => __( 'Thanks for your feedback', 'betterdocs' ),
1091 + 'priority' => 10,
1092 + ],
1093 + ]
1094 + ],
1095 + 'layout_single_doc_TOC' => [
1096 + 'id' => 'layout_single_doc_TOC',
1097 + 'name' => 'layout_single_doc_TOC',
1098 + 'type' => 'section',
1099 + 'label' => __( 'TOC', 'betterdocs' ),
1409 1100 'priority' => 5,
1410 - 'fields' => array(
1411 - 'enable_toc' => array(
1412 - 'name' => 'enable_toc',
1413 - 'type' => 'toggle',
1414 - 'label' => __( 'Table of Contents', 'betterdocs' ),
1101 + 'fields' => [
1102 + 'enable_toc' => [
1103 + 'name' => 'enable_toc',
1104 + 'type' => 'toggle',
1105 + 'label' => __( 'Table of Contents', 'betterdocs' ),
1415 1106 'enable_disable_text_active' => true,
1416 - 'default' => 1,
1417 - 'priority' => 1
1418 - ),
1419 - 'toc_title' => array(
1420 - 'name' => 'toc_title',
1421 - 'type' => 'text',
1422 - 'label' => __( 'TOC Title', 'betterdocs' ),
1423 - 'default' => __( 'Table of Contents', 'betterdocs' ),
1107 + 'default' => 1,
1108 + 'priority' => 1
1109 + ],
1110 + 'toc_title' => [
1111 + 'name' => 'toc_title',
1112 + 'type' => 'text',
1113 + 'label' => __( 'TOC Title', 'betterdocs' ),
1114 + 'default' => __( 'Table of Contents', 'betterdocs' ),
1424 1115 'priority' => 2,
1425 - 'rules' => Rules::is( 'enable_toc', true )
1116 + 'rules' => Rules::is( 'enable_toc', true )
1426 1117
1427 - ),
1428 - 'toc_hierarchy' => array(
1429 - 'name' => 'toc_hierarchy',
1430 - 'type' => 'toggle',
1431 - 'label' => __( 'TOC Hierarchy', 'betterdocs' ),
1118 + ],
1119 + 'toc_hierarchy' => [
1120 + 'name' => 'toc_hierarchy',
1121 + 'type' => 'toggle',
1122 + 'label' => __( 'TOC Hierarchy', 'betterdocs' ),
1432 1123 'enable_disable_text_active' => true,
1433 - 'default' => 1,
1434 - 'priority' => 3,
1435 - 'rules' => Rules::is( 'enable_toc', true )
1436 - ),
1437 - 'toc_list_number' => array(
1438 - 'name' => 'toc_list_number',
1439 - 'type' => 'toggle',
1440 - 'label' => __( 'TOC List Number', 'betterdocs' ),
1124 + 'default' => 1,
1125 + 'priority' => 3,
1126 + 'rules' => Rules::is( 'enable_toc', true )
1127 + ],
1128 + 'toc_list_number' => [
1129 + 'name' => 'toc_list_number',
1130 + 'type' => 'toggle',
1131 + 'label' => __( 'TOC List Number', 'betterdocs' ),
1441 1132 'enable_disable_text_active' => true,
1442 - 'default' => 1,
1443 - 'priority' => 4,
1444 - 'rules' => Rules::is( 'enable_toc', true )
1445 - ),
1446 - 'toc_dynamic_title' => array(
1447 - 'name' => 'toc_dynamic_title',
1448 - 'type' => 'toggle',
1449 - 'label' => __( 'Show TOC Title in Anchor Links', 'betterdocs' ),
1133 + 'default' => 1,
1134 + 'priority' => 4,
1135 + 'rules' => Rules::is( 'enable_toc', true )
1136 + ],
1137 + 'toc_dynamic_title' => [
1138 + 'name' => 'toc_dynamic_title',
1139 + 'type' => 'toggle',
1140 + 'label' => __( 'Show TOC Title in Anchor Links', 'betterdocs' ),
1450 1141 'enable_disable_text_active' => true,
1451 - 'default' => 0,
1452 - 'priority' => 5,
1453 - 'rules' => Rules::is( 'enable_toc', true )
1454 - ),
1455 - 'enable_sticky_toc' => array(
1456 - 'name' => 'enable_sticky_toc',
1457 - 'type' => 'toggle',
1458 - 'label' => __( 'Sticky TOC', 'betterdocs' ),
1142 + 'default' => 0,
1143 + 'priority' => 5,
1144 + 'rules' => Rules::is( 'enable_toc', true )
1145 + ],
1146 + 'enable_sticky_toc' => [
1147 + 'name' => 'enable_sticky_toc',
1148 + 'type' => 'toggle',
1149 + 'label' => __( 'Sticky TOC', 'betterdocs' ),
1459 1150 'enable_disable_text_active' => true,
1460 - 'default' => 1,
1461 - 'priority' => 6,
1462 - 'rules' => Rules::is( 'enable_toc', true )
1463 - ),
1464 - 'collapsible_toc_mobile' => array(
1465 - 'name' => 'collapsible_toc_mobile',
1466 - 'type' => 'toggle',
1467 - 'label' => __( 'Collapsible TOC on small devices', 'betterdocs' ),
1151 + 'default' => 1,
1152 + 'priority' => 6,
1153 + 'rules' => Rules::is( 'enable_toc', true )
1154 + ],
1155 + 'collapsible_toc_mobile' => [
1156 + 'name' => 'collapsible_toc_mobile',
1157 + 'type' => 'toggle',
1158 + 'label' => __( 'Collapsible TOC on small devices', 'betterdocs' ),
1468 1159 'enable_disable_text_active' => true,
1469 - 'default' => '',
1470 - 'priority' => 7,
1471 - 'rules' => Rules::is( 'enable_toc', true )
1472 - ),
1473 - 'title_link_ctc' => array(
1474 - 'name' => 'title_link_ctc',
1475 - 'type' => 'toggle',
1476 - 'label' => __( 'Title Link Copy To Clipboard', 'betterdocs' ),
1160 + 'default' => '',
1161 + 'priority' => 7,
1162 + 'rules' => Rules::is( 'enable_toc', true )
1163 + ],
1164 + 'title_link_ctc' => [
1165 + 'name' => 'title_link_ctc',
1166 + 'type' => 'toggle',
1167 + 'label' => __( 'Title Link Copy To Clipboard', 'betterdocs' ),
1477 1168 'enable_disable_text_active' => true,
1478 - 'default' => 1,
1479 - 'priority' => 8
1480 - ),
1481 - 'supported_heading_tag' => array(
1482 - 'name' => 'supported_heading_tag',
1483 - 'label' => __( 'TOC Supported Heading Tag', 'betterdocs' ),
1484 - 'type' => 'checkbox-select',
1169 + 'default' => 1,
1170 + 'priority' => 8
1171 + ],
1172 + 'supported_heading_tag' => [
1173 + 'name' => 'supported_heading_tag',
1174 + 'label' => __( 'TOC Supported Heading Tag', 'betterdocs' ),
1175 + 'type' => 'checkbox-select',
1485 1176 'multiple' => true,
1486 1177 'priority' => 10,
1487 - 'default' => array(
1488 - '1',
1489 - '2',
1490 - '3',
1491 - '4',
1492 - '5',
1493 - '6'
1494 - ),
1495 - 'options' => $this->normalize_options( array(
1178 + 'default' => ['1', '2', '3', '4', '5', '6'],
1179 + 'options' => $this->normalize_options( [
1496 1180 '1' => 'H1',
1497 1181 '2' => 'H2',
1498 1182 '3' => 'H3',
1499 1183 '4' => 'H4',
@@ -1498,1399 +1182,963 @@
1498 1182 '3' => 'H3',
1499 1183 '4' => 'H4',
1500 1184 '5' => 'H5',
1501 1185 '6' => 'H6'
1502 - ) ),
1186 + ] ),
1503 1187 'priority' => 9,
1504 - 'rules' => Rules::is( 'enable_toc', true )
1505 - ),
1506 - 'sticky_toc_offset' => array(
1507 - 'name' => 'sticky_toc_offset',
1508 - 'type' => 'number',
1509 - 'label' => __( 'Content Offset', 'betterdocs' ),
1510 - 'default' => 100,
1511 - 'priority' => 10,
1188 + 'rules' => Rules::is( 'enable_toc', true )
1189 + ],
1190 + 'sticky_toc_offset' => [
1191 + 'name' => 'sticky_toc_offset',
1192 + 'type' => 'number',
1193 + 'label' => __( 'Content Offset', 'betterdocs' ),
1194 + 'default' => 100,
1195 + 'priority' => 10,
1512 1196 'label_subtitle' => __( 'content offset from top on scroll.', 'betterdocs' ),
1513 - 'rules' => Rules::is( 'enable_toc', true )
1514 - )
1515 - )
1516 - ),
1517 - 'layout_single_doc_breadcrumb' => array(
1518 - 'id' => 'layout_single_doc_breadcrumb',
1519 - 'name' => 'layout_single_doc_breadcrumb',
1520 - 'type' => 'section',
1521 - 'label' => __( 'Breadcrumb', 'betterdocs' ),
1197 + 'rules' => Rules::is( 'enable_toc', true )
1198 + ]
1199 + ]
1200 + ],
1201 + 'layout_single_doc_breadcrumb' => [
1202 + 'id' => 'layout_single_doc_breadcrumb',
1203 + 'name' => 'layout_single_doc_breadcrumb',
1204 + 'type' => 'section',
1205 + 'label' => __( 'Breadcrumb', 'betterdocs' ),
1522 1206 'priority' => 5,
1523 - 'fields' => array(
1524 - 'enable_breadcrumb' => array(
1525 - 'name' => 'enable_breadcrumb',
1526 - 'type' => 'toggle',
1527 - 'label' => __( 'Breadcrumb', 'betterdocs' ),
1207 + 'fields' => [
1208 + 'enable_breadcrumb' => [
1209 + 'name' => 'enable_breadcrumb',
1210 + 'type' => 'toggle',
1211 + 'label' => __( 'Breadcrumb', 'betterdocs' ),
1528 1212 'enable_disable_text_active' => true,
1529 - 'default' => 1,
1530 - 'priority' => 1
1531 - ),
1532 - 'enable_breadcrumb_home_text' => array(
1533 - 'name' => 'enable_breadcrumb_home_text',
1534 - 'type' => 'toggle',
1535 - 'label' => __( 'Enable Breadcrumb Home Text', 'betterdocs' ),
1536 - 'enable_disable_text_active' => true,
1537 - 'default' => true,
1213 + 'default' => 1,
1214 + 'priority' => 1
1215 + ],
1216 + 'breadcrumb_home_text' => [
1217 + 'name' => 'breadcrumb_home_text',
1218 + 'type' => 'text',
1219 + 'label' => __( 'Breadcrumb Home Text', 'betterdocs' ),
1220 + 'default' => __( 'Home', 'betterdocs' ),
1538 1221 'priority' => 2,
1539 - 'rules' => Rules::is( 'enable_breadcrumb', true )
1540 - ),
1541 - 'breadcrumb_home_text' => array(
1542 - 'name' => 'breadcrumb_home_text',
1543 - 'type' => 'text',
1544 - 'label' => __( 'Breadcrumb Home Text', 'betterdocs' ),
1545 - 'default' => __( 'Home', 'betterdocs' ),
1222 + 'rules' => Rules::is( 'enable_breadcrumb', true )
1223 + ],
1224 + 'breadcrumb_home_url' => [
1225 + 'name' => 'breadcrumb_home_url',
1226 + 'type' => 'text',
1227 + 'label' => __( 'Breadcrumb Home URL', 'betterdocs' ),
1546 1228 'priority' => 3,
1547 - 'rules' => Rules::logicalRule(
1548 - array(
1549 - Rules::is( 'enable_breadcrumb', true ),
1550 - Rules::is( 'enable_breadcrumb_home_text', true )
1551 - ),
1552 - 'and'
1553 - )
1554 - ),
1555 - 'breadcrumb_home_url' => array(
1556 - 'name' => 'breadcrumb_home_url',
1557 - 'type' => 'text',
1558 - 'label' => __( 'Breadcrumb Home URL', 'betterdocs' ),
1559 - 'priority' => 4,
1560 - 'default' => get_home_url(),
1561 - 'rules' => Rules::is( 'enable_breadcrumb', true )
1562 - ),
1563 - 'enable_breadcrumb_category' => array(
1564 - 'name' => 'enable_breadcrumb_category',
1565 - 'type' => 'toggle',
1566 - 'label' => __( 'Category on Breadcrumb', 'betterdocs' ),
1229 + 'default' => get_home_url(),
1230 + 'rules' => Rules::is( 'enable_breadcrumb', true )
1231 + ],
1232 + 'enable_breadcrumb_category' => [
1233 + 'name' => 'enable_breadcrumb_category',
1234 + 'type' => 'toggle',
1235 + 'label' => __( 'Category on Breadcrumb', 'betterdocs' ),
1567 1236 'enable_disable_text_active' => true,
1568 - 'default' => 1,
1569 - 'priority' => 5,
1570 - 'rules' => Rules::is( 'enable_breadcrumb', true )
1571 - ),
1572 - 'enable_breadcrumb_title' => array(
1573 - 'name' => 'enable_breadcrumb_title',
1574 - 'type' => 'toggle',
1575 - 'label' => __( 'Title on Breadcrumb', 'betterdocs' ),
1237 + 'default' => 1,
1238 + 'priority' => 4,
1239 + 'rules' => Rules::is( 'enable_breadcrumb', true )
1240 + ],
1241 + 'enable_breadcrumb_title' => [
1242 + 'name' => 'enable_breadcrumb_title',
1243 + 'type' => 'toggle',
1244 + 'label' => __( 'Title on Breadcrumb', 'betterdocs' ),
1576 1245 'enable_disable_text_active' => true,
1577 - 'default' => 1,
1578 - 'priority' => 6,
1579 - 'rules' => Rules::is( 'enable_breadcrumb', true )
1580 - )
1581 - )
1582 - ),
1583 - 'layout_single_doc_email_feedback' => array(
1584 - 'id' => 'layout_single_doc_email_feedback',
1585 - 'name' => 'layout_single_doc_email_feedback',
1586 - 'type' => 'section',
1587 - 'label' => __( 'Email Feedback', 'betterdocs' ),
1246 + 'default' => 1,
1247 + 'priority' => 5,
1248 + 'rules' => Rules::is( 'enable_breadcrumb', true )
1249 + ]
1250 + ]
1251 + ],
1252 + 'layout_single_doc_email_feedback' => [
1253 + 'id' => 'layout_single_doc_email_feedback',
1254 + 'name' => 'layout_single_doc_email_feedback',
1255 + 'type' => 'section',
1256 + 'label' => __( 'Email Feedback', 'betterdocs' ),
1588 1257 'priority' => 5,
1589 - 'fields' => array(
1590 - 'email_feedback' => array(
1591 - 'name' => 'email_feedback',
1592 - 'type' => 'toggle',
1593 - 'label' => __( 'Email Feedback', 'betterdocs' ),
1258 + 'fields' => [
1259 + 'email_feedback' => [
1260 + 'name' => 'email_feedback',
1261 + 'type' => 'toggle',
1262 + 'label' => __( 'Email Feedback', 'betterdocs' ),
1594 1263 'enable_disable_text_active' => true,
1595 - 'default' => 1,
1596 - 'priority' => 1
1597 - ),
1598 - 'feedback_link_text' => array(
1599 - 'name' => 'feedback_link_text',
1600 - 'type' => 'text',
1601 - 'label' => __( 'Feedback Link Text', 'betterdocs' ),
1602 - 'default' => __( 'Still stuck? How can we help?', 'betterdocs' ),
1264 + 'default' => 1,
1265 + 'priority' => 1
1266 + ],
1267 + 'feedback_link_text' => [
1268 + 'name' => 'feedback_link_text',
1269 + 'type' => 'text',
1270 + 'label' => __( 'Feedback Link Text', 'betterdocs' ),
1271 + 'default' => __( 'Still stuck? How can we help?', 'betterdocs' ),
1603 1272 'priority' => 2,
1604 - 'rules' => Rules::is( 'email_feedback', true )
1605 - ),
1606 - 'feedback_form_title' => array(
1607 - 'name' => 'feedback_form_title',
1608 - 'type' => 'text',
1609 - 'label' => __( 'Feedback Form Title', 'betterdocs' ),
1610 - 'default' => __( 'Still stuck? How can we help?', 'betterdocs' ),
1273 + 'rules' => Rules::is( 'email_feedback', true )
1274 + ],
1275 + 'feedback_form_title' => [
1276 + 'name' => 'feedback_form_title',
1277 + 'type' => 'text',
1278 + 'label' => __( 'Feedback Form Title', 'betterdocs' ),
1279 + 'default' => __( 'Still stuck? How can we help?', 'betterdocs' ),
1611 1280 'priority' => 3,
1612 - 'rules' => Rules::is( 'email_feedback', true )
1613 - ),
1614 - 'email_address' => array(
1615 - 'name' => 'email_address',
1616 - 'type' => 'text',
1617 - 'label' => __( 'Email Address', 'betterdocs' ),
1618 - 'default' => get_option( 'admin_email' ),
1619 - 'priority' => 4,
1281 + 'rules' => Rules::is( 'email_feedback', true )
1282 + ],
1283 + 'email_address' => [
1284 + 'name' => 'email_address',
1285 + 'type' => 'text',
1286 + 'label' => __( 'Email Address', 'betterdocs' ),
1287 + 'default' => get_option( 'admin_email' ),
1288 + 'priority' => 4,
1620 1289 'label_subtitle' => __( 'The email address where the Feedback form will be sent', 'betterdocs' ),
1621 - 'rules' => Rules::is( 'email_feedback', true )
1622 - ),
1623 - 'feedback_url' => array(
1624 - 'name' => 'feedback_url',
1625 - 'type' => 'text',
1626 - 'label' => __( 'Feedback URL', 'betterdocs' ),
1627 - 'default' => '',
1290 + 'rules' => Rules::is( 'email_feedback', true )
1291 + ],
1292 + 'feedback_url' => [
1293 + 'name' => 'feedback_url',
1294 + 'type' => 'text',
1295 + 'label' => __( 'Feedback URL', 'betterdocs' ),
1296 + 'default' => '',
1628 1297 'priority' => 5,
1629 - 'rules' => Rules::is( 'email_feedback', true )
1630 - )
1631 - )
1632 - ),
1633 - array(
1634 - 'id' => 'layout_single_doc_attachments',
1635 - 'name' => 'layout_single_doc_attachments',
1636 - 'type' => 'section',
1637 - 'label' => __( 'Attachments', 'betterdocs' ),
1298 + 'rules' => Rules::is( 'email_feedback', true )
1299 + ]
1300 + ]
1301 + ],
1302 + [
1303 + 'id' => 'layout_single_doc_attachments',
1304 + 'name' => 'layout_single_doc_attachments',
1305 + 'type' => 'section',
1306 + 'label' => __( 'Attachments', 'betterdocs-pro' ),
1638 1307 'priority' => 6,
1639 - 'fields' => apply_filters( 'betterdocs_single_doc_attachments', array(
1640 - 'show_attachment' => array(
1641 - 'name' => 'show_attachment',
1642 - 'type' => 'toggle',
1643 - 'is_pro' => true,
1644 - 'priority' => 1,
1645 - 'label' => __( 'Show Attachment', 'betterdocs' ),
1308 + 'fields' => apply_filters( 'betterdocs_single_doc_attachments', [
1309 + 'show_attachment' => [
1310 + 'name' => 'show_attachment',
1311 + 'type' => 'toggle',
1312 + 'is_pro' => true,
1313 + 'priority' => 1,
1314 + 'label' => __( 'Show Attachment', 'betterdocs-pro' ),
1646 1315 'enable_disable_text_active' => true,
1647 - 'default' => false
1648 - )
1649 - ) )
1650 - ),
1651 - array(
1652 - 'id' => 'layout_single_doc_related_docs',
1653 - 'name' => 'layout_single_doc_related_docs',
1654 - 'type' => 'section',
1655 - 'label' => __( 'Related Docs', 'betterdocs' ),
1316 + 'default' => false
1317 + ]
1318 + ] )
1319 + ],
1320 + [
1321 + 'id' => 'layout_single_doc_related_docs',
1322 + 'name' => 'layout_single_doc_related_docs',
1323 + 'type' => 'section',
1324 + 'label' => __( 'Related Docs', 'betterdocs-pro' ),
1656 1325 'priority' => 7,
1657 - 'fields' => apply_filters( 'betterdocs_single_doc_related_docs', array(
1658 - 'show_related_docs' => array(
1659 - 'name' => 'show_related_docs',
1660 - 'type' => 'toggle',
1661 - 'is_pro' => true,
1662 - 'priority' => 1,
1663 - 'label' => __( 'Show Related Docs', 'betterdocs' ),
1326 + 'fields' => apply_filters( 'betterdocs_single_doc_related_docs', [
1327 + 'show_related_docs' => [
1328 + 'name' => 'show_related_docs',
1329 + 'type' => 'toggle',
1330 + 'is_pro' => true,
1331 + 'priority' => 1,
1332 + 'label' => __( 'Show Related Docs', 'betterdocs-pro' ),
1664 1333 'enable_disable_text_active' => true,
1665 - 'default' => false
1666 - )
1667 - ) )
1668 - )
1669 - )
1670 - )
1671 - )
1672 - ) ),
1673 - 'layout_archive_page' => array(
1674 - 'id' => 'layout_archive_page',
1675 - 'name' => 'layout_archive_page',
1676 - 'type' => 'section',
1677 - 'label' => __( 'Archive Page', 'betterdocs' ),
1334 + 'default' => false
1335 + ]
1336 + ] )
1337 + ]
1338 + ]
1339 + ]
1340 + ]
1341 + ] ),
1342 + 'layout_archive_page' => [
1343 + 'id' => 'layout_archive_page',
1344 + 'name' => 'layout_archive_page',
1345 + 'type' => 'section',
1346 + 'label' => __( 'Archive Page', 'betterdocs' ),
1678 1347 'priority' => 3,
1679 - 'fields' => array(
1680 - 'enable_archive_sidebar' => array(
1681 - 'name' => 'enable_archive_sidebar',
1682 - 'type' => 'toggle',
1683 - 'label' => __( 'Sidebar Category List', 'betterdocs' ),
1348 + 'fields' => [
1349 + 'enable_archive_sidebar' => [
1350 + 'name' => 'enable_archive_sidebar',
1351 + 'type' => 'toggle',
1352 + 'label' => __( 'Sidebar Category List', 'betterdocs' ),
1684 1353 'enable_disable_text_active' => true,
1685 - 'default' => 1,
1686 - 'priority' => 31
1687 - ),
1688 - 'archive_nested_subcategory' => array(
1689 - 'name' => 'archive_nested_subcategory',
1690 - 'type' => 'toggle',
1691 - 'label' => __( 'Nested Subcategory', 'betterdocs' ),
1354 + 'default' => 1,
1355 + 'priority' => 31
1356 + ],
1357 + 'archive_nested_subcategory' => [
1358 + 'name' => 'archive_nested_subcategory',
1359 + 'type' => 'toggle',
1360 + 'label' => __( 'Nested Subcategory', 'betterdocs' ),
1692 1361 'enable_disable_text_active' => true,
1693 - 'default' => 1,
1694 - 'priority' => 32
1695 - ),
1696 - 'archive_enable_pagination' => array(
1697 - 'name' => 'archive_enable_pagination',
1698 - 'type' => 'toggle',
1699 - 'label' => __( 'Enable Pagination', 'betterdocs' ),
1700 - 'enable_disable_text_active' => true,
1701 - 'default' => false,
1702 - 'priority' => 33
1703 - )
1704 - )
1705 - )
1706 - )
1707 - ) )
1708 - )
1709 - )
1710 - )
1711 - ) ),
1712 - 'tab-design' => apply_filters( 'betterdocs_settings_tab_design', array(
1713 - 'id' => 'tab-design',
1714 - 'label' => __( 'Design', 'betterdocs' ),
1362 + 'default' => 1,
1363 + 'priority' => 32
1364 + ]
1365 + ]
1366 + ]
1367 + ]
1368 + ] )
1369 + ]
1370 + ]
1371 + ]
1372 + ] ),
1373 + 'tab-design' => apply_filters( 'betterdocs_settings_tab_design', [
1374 + 'id' => 'tab-design',
1375 + 'label' => __( 'Design', 'betterdocs' ),
1715 1376 'priority' => 30,
1716 - 'fields' => array(
1717 - 'title-design' => array(
1718 - 'name' => 'title-design-tab',
1719 - 'type' => 'section',
1720 - 'label' => __( 'Design', 'betterdocs' ),
1377 + 'fields' => [
1378 + 'title-design' => [
1379 + 'name' => 'title-design-tab',
1380 + 'type' => 'section',
1381 + 'label' => __( 'Design', 'betterdocs' ),
1721 1382 'priority' => 30,
1722 - 'fields' => $this->design_tab()
1723 - )
1724 - )
1725 - ) ),
1726 - 'tab-shortcodes' => apply_filters( 'betterdocs_settings_tab_shortcodes', array(
1727 - 'label' => __( 'Shortcodes', 'betterdocs' ),
1728 - 'id' => 'tab-shortcodes',
1729 - 'classes' => 'tab-shortcodes',
1383 + 'fields' => [
1384 + 'customizer_link' => [
1385 + 'name' => 'customizer_link',
1386 + 'type' => 'action',
1387 + 'action' => 'betterdocs_settings_customizer_link',
1388 + 'label' => __( 'Customize BetterDocs', 'betterdocs' ),
1389 + 'url' => $this->customizer_link(),
1390 + 'customizer_img' => betterdocs()->assets->icon( 'customizer/betterdocs-customize.png', true ),
1391 + 'priority' => 1
1392 + ]
1393 + ]
1394 + ]
1395 + ]
1396 + ] ),
1397 + 'tab-shortcodes' => apply_filters( 'betterdocs_settings_tab_shortcodes', [
1398 + 'label' => __( 'Shortcodes', 'betterdocs' ),
1399 + 'id' => 'tab-shortcodes',
1400 + 'classes' => 'tab-shortcodes',
1730 1401 'priority' => 40,
1731 - 'fields' => array(
1732 - 'title-shortcodes' => array(
1733 - 'name' => 'title-shortcodes-tab',
1734 - 'type' => 'section',
1735 - 'label' => __( 'Shortcodes', 'betterdocs' ),
1736 - 'priority' => 40,
1737 - 'searchable' => true,
1738 - 'searchPlaceholder' => __( 'Search for shortcode', 'betterdocs' ),
1402 + 'fields' => [
1403 + 'title-shortcodes' => [
1404 + 'name' => 'title-shortcodes-tab',
1405 + 'type' => 'section',
1406 + 'label' => __( 'Shortcodes', 'betterdocs' ),
1407 + 'priority' => 40,
1408 + 'searchable' => true,
1409 + 'searchPlaceholder' => __( 'Search for shortcode', 'betterdocs' ),
1739 1410 'searchNotFoundMessage' => '<img src="' . betterdocs()->assets->icon( 'not-found.svg', true ) . '"/><p>' . __( 'No Shortcodes Found with these keywords', 'betterdocs' ) . '</p>',
1740 - 'fields' => apply_filters( 'betterdocs_shortcode_fields', array(
1741 - 'search_form' => array(
1742 - 'name' => 'search_form',
1743 - 'type' => 'copy-to-clipboard',
1744 - 'label' => __( 'Search Form', 'betterdocs' ),
1745 - 'default' => '[betterdocs_search_form]',
1746 - 'readOnly' => true,
1747 - 'priority' => 1,
1748 - 'description' => __( '[betterdocs_search_form placeholder="Search..." heading="Heading" subheading="Subheading" category_search="true" search_button="true" popular_search="true"]', 'betterdocs' ),
1749 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1411 + 'fields' => apply_filters( 'betterdocs_shortcode_fields', [
1412 + 'search_form' => [
1413 + 'name' => 'search_form',
1414 + 'type' => 'copy-to-clipboard',
1415 + 'label' => __( 'Search Form', 'betterdocs' ),
1416 + 'default' => '[betterdocs_search_form]',
1417 + 'readOnly' => true,
1418 + 'priority' => 1,
1419 + 'description' => __( '[betterdocs_search_form placeholder="Search..." heading="Heading" subheading="Subheading" category_search="true" search_button="true" popular_search="true"]', 'betterdocs' ),
1420 + 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1750 1421 'descriptionCopyable' => true
1751 - ),
1752 - 'feedback_form' => array(
1753 - 'name' => 'feedback_form',
1754 - 'type' => 'copy-to-clipboard',
1755 - 'label' => __( 'Feedback Form', 'betterdocs' ),
1756 - 'default' => '[betterdocs_feedback_form]',
1757 - 'readOnly' => true,
1758 - 'priority' => 2,
1759 - 'description' => __( '[betterdocs_feedback_form button_text="Send"]', 'betterdocs' ),
1760 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1422 + ],
1423 + 'feedback_form' => [
1424 + 'name' => 'feedback_form',
1425 + 'type' => 'copy-to-clipboard',
1426 + 'label' => __( 'Feedback Form', 'betterdocs' ),
1427 + 'default' => '[betterdocs_feedback_form]',
1428 + 'readOnly' => true,
1429 + 'priority' => 2,
1430 + 'description' => __( '[betterdocs_feedback_form button_text="Send"]', 'betterdocs' ),
1431 + 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1761 1432 'descriptionCopyable' => true
1762 - ),
1763 - 'category_grid' => array(
1764 - 'name' => 'category_grid',
1765 - 'type' => 'copy-to-clipboard',
1766 - 'label' => __( 'Category Grid- Layout 1', 'betterdocs' ),
1767 - 'default' => '[betterdocs_category_grid]',
1768 - 'readOnly' => true,
1769 - 'priority' => 3,
1770 - 'description' => __( '[betterdocs_category_grid show_count="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' ),
1771 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1433 + ],
1434 + 'category_grid' => [
1435 + 'name' => 'category_grid',
1436 + 'type' => 'copy-to-clipboard',
1437 + 'label' => __( 'Category Grid- Layout 1', 'betterdocs' ),
1438 + 'default' => '[betterdocs_category_grid]',
1439 + 'readOnly' => true,
1440 + 'priority' => 3,
1441 + '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' ),
1442 + 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1772 1443 'descriptionCopyable' => true
1773 - ),
1774 - 'category_box' => array(
1775 - 'name' => 'category_box',
1776 - 'type' => 'copy-to-clipboard',
1777 - 'label' => __( 'Category Box- Layout 2', 'betterdocs' ),
1778 - 'default' => '[betterdocs_category_box]',
1779 - 'readOnly' => true,
1780 - 'priority' => 4,
1781 - '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' ),
1782 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1444 + ],
1445 + 'category_box' => [
1446 + 'name' => 'category_box',
1447 + 'type' => 'copy-to-clipboard',
1448 + 'label' => __( 'Category Box- Layout 2', 'betterdocs' ),
1449 + 'default' => '[betterdocs_category_box]',
1450 + 'readOnly' => true,
1451 + 'priority' => 4,
1452 + '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' ),
1453 + 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1783 1454 'descriptionCopyable' => true
1784 - ),
1785 - 'category_list' => array(
1786 - 'name' => 'category_list',
1787 - 'type' => 'copy-to-clipboard',
1788 - 'label' => __( 'Category List', 'betterdocs' ),
1789 - 'default' => '[betterdocs_category_list]',
1790 - 'readOnly' => true,
1791 - 'priority' => 5,
1792 - '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' ),
1793 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1455 + ],
1456 + 'category_list' => [
1457 + 'name' => 'category_list',
1458 + 'type' => 'copy-to-clipboard',
1459 + 'label' => __( 'Category List', 'betterdocs' ),
1460 + 'default' => '[betterdocs_category_list]',
1461 + 'readOnly' => true,
1462 + 'priority' => 5,
1463 + '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' ),
1464 + 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1794 1465 'descriptionCopyable' => true
1795 - ),
1796 - 'faq_modern_layout' => array(
1797 - 'name' => 'faq_modern_layout',
1798 - 'type' => 'copy-to-clipboard',
1799 - 'label' => __( 'FAQ Layout - 1', 'betterdocs' ),
1800 - 'default' => '[betterdocs_faq_list_modern]',
1801 - 'readOnly' => true,
1802 - 'priority' => 13,
1803 - 'description' => __( '[betterdocs_faq_list_modern groups="group_id" class="" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1804 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1466 + ],
1467 + 'faq_modern_layout' => [
1468 + 'name' => 'faq_modern_layout',
1469 + 'type' => 'copy-to-clipboard',
1470 + 'label' => __( 'FAQ Layout - 1', 'betterdocs' ),
1471 + 'default' => '[betterdocs_faq_list_modern]',
1472 + 'readOnly' => true,
1473 + 'priority' => 13,
1474 + 'description' => __( '[betterdocs_faq_list_modern groups="group_id" class="" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1475 + 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1805 1476 'descriptionCopyable' => true
1806 - ),
1807 - 'faq_classic_layout' => array(
1808 - 'name' => 'faq_classic_layout',
1809 - 'type' => 'copy-to-clipboard',
1810 - 'label' => __( 'FAQ Layout - 2', 'betterdocs' ),
1811 - 'default' => '[betterdocs_faq_list_classic]',
1812 - 'readOnly' => true,
1813 - 'priority' => 14,
1814 - 'description' => __( '[betterdocs_faq_list_classic groups="group_id" class="" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1815 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1477 + ],
1478 + 'faq_classic_layout' => [
1479 + 'name' => 'faq_classic_layout',
1480 + 'type' => 'copy-to-clipboard',
1481 + 'label' => __( 'FAQ Layout - 2', 'betterdocs' ),
1482 + 'default' => '[betterdocs_faq_list_classic]',
1483 + 'readOnly' => true,
1484 + 'priority' => 14,
1485 + 'description' => __( '[betterdocs_faq_list_classic groups="group_id" class="" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1486 + 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1816 1487 'descriptionCopyable' => true
1817 - ),
1818 - 'betterdocs_faq_list_layout_3' => array(
1819 - 'name' => 'betterdocs_faq_list_layout_3',
1820 - 'type' => 'copy-to-clipboard',
1821 - 'label' => __( 'FAQ Layout - 3', 'betterdocs' ),
1822 - 'default' => '[betterdocs_faq_list_layout_3 class="faq-doc betterdocs-faq-layout-3"]',
1823 - 'readOnly' => true,
1824 - 'priority' => 15,
1825 - 'description' => __( '[betterdocs_faq_list_layout_3 class="faq-doc betterdocs-faq-layout-3" groups="group_id" class="" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1826 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1827 - 'descriptionCopyable' => true
1828 - ),
1829 - 'betterdocs_faq_tab' => array(
1830 - 'name' => 'betterdocs_faq_tab',
1831 - 'type' => 'copy-to-clipboard',
1832 - 'label' => __( 'FAQ Layout - 4', 'betterdocs' ),
1833 - 'default' => '[betterdocs_faq_tab class="faq-doc betterdocs-faq-layout-4"]',
1834 - 'readOnly' => true,
1835 - 'priority' => 16,
1836 - 'description' => __( '[betterdocs_faq_tab class="faq-doc betterdocs-faq-layout-4" groups="group_id" group_exclude="group_id" faq_heading="Frequently Asked Questions"]', 'betterdocs' ),
1837 - 'descriptionLabel' => __( 'Example with parameters:', 'betterdocs' ),
1838 - 'descriptionCopyable' => true
1839 - )
1840 - ) )
1841 - )
1842 - )
1843 - ) ),
1844 - 'tab-advance-settings' => apply_filters( 'betterdocs_settings_tab_advance', array(
1845 - 'id' => 'tab-advance-settings',
1846 - 'label' => __( 'Access & Restrictions', 'betterdocs' ),
1847 - 'classes' => 'tab-layout',
1488 + ]
1489 + ] )
1490 + ]
1491 + ]
1492 + ] ),
1493 + 'tab-advance-settings' => apply_filters( 'betterdocs_settings_tab_advance', [
1494 + 'id' => 'tab-advance-settings',
1495 + 'label' => __( 'Advanced Settings', 'betterdocs' ),
1848 1496 'priority' => 50,
1849 - 'fields' => array(
1850 - 'title_advance_settings' => array(
1851 - 'name' => 'title-advance-settings-tab',
1852 - 'type' => 'section',
1853 - 'label' => __( 'Access & Restrictions', 'betterdocs' ),
1497 + 'fields' => [
1498 + 'title-advance-settings' => [
1499 + 'name' => 'title-advance-settings-tab',
1500 + 'type' => 'section',
1501 + 'label' => __( 'Advanced Settings', 'betterdocs' ),
1854 1502 'priority' => 50,
1855 - 'fields' => array(
1856 - 'tab-advanced-settings' => array(
1857 - 'id' => 'tab-advanced-settings',
1858 - 'name' => 'tab-advanced-settings',
1859 - 'label' => __( 'Access & Restrictions', 'betterdocs' ),
1860 - 'classes' => 'tab-layout',
1861 - 'type' => 'tab',
1862 - 'active' => 'global_role_management',
1863 - 'completionTrack' => true,
1864 - 'sidebar' => false,
1865 - 'save' => false,
1866 - 'title' => false,
1867 - 'config' => array(
1868 - 'active' => '',
1869 - 'sidebar' => false,
1870 - 'title' => false
1871 - ),
1872 - 'submit' => array(
1873 - 'show' => false
1874 - ),
1875 - 'step' => array(
1876 - 'show' => false
1877 - ),
1878 - 'priority' => 50,
1879 - 'fields' => array(
1880 - 'global_role_management' => array(
1881 - 'id' => 'global_role_management',
1882 - 'name' => 'global_role_management',
1883 - 'type' => 'section',
1884 - 'label' => __( 'Global Role Management', 'betterdocs' ),
1885 - 'priority' => 1,
1886 - 'fields' => array(
1887 - 'article_roles' => array(
1888 - 'name' => 'article_roles',
1889 - 'type' => 'checkbox-select',
1890 - 'label' => __( 'Who Can Write Docs?', 'betterdocs' ),
1891 - 'priority' => 1,
1892 - 'multiple' => true,
1893 - 'search' => true,
1894 - 'is_pro' => true,
1895 - 'default' => array( 'administrator' ),
1896 - 'options' => $wp_roles
1897 - ),
1898 - 'settings_roles' => array(
1899 - 'name' => 'settings_roles',
1900 - 'type' => 'checkbox-select',
1901 - 'label' => __( 'Who Can Edit Settings?', 'betterdocs' ),
1902 - 'priority' => 2,
1903 - 'multiple' => true,
1904 - 'is_pro' => true,
1905 - 'search' => true,
1906 - 'default' => array( 'administrator' ),
1907 - 'options' => $wp_roles
1908 - ),
1909 - 'analytics_roles' => array(
1910 - 'name' => 'analytics_roles',
1911 - 'type' => 'checkbox-select',
1912 - 'label' => __( 'Who Can Check Analytics?', 'betterdocs' ),
1913 - 'priority' => 3,
1914 - 'multiple' => true,
1915 - 'is_pro' => true,
1916 - 'search' => true,
1917 - 'default' => array( 'administrator' ),
1918 - 'options' => $wp_roles
1919 - ),
1920 - 'faq_roles' => array(
1921 - 'name' => 'faq_roles',
1922 - 'type' => 'checkbox-select',
1923 - 'label' => __( 'Who Can Check FAQ Builder?', 'betterdocs' ),
1924 - 'priority' => 4,
1925 - 'multiple' => true,
1926 - 'is_pro' => true,
1927 - 'search' => true,
1928 - 'default' => array( 'administrator' ),
1929 - 'options' => $wp_roles
1930 - )
1931 -
1932 - )
1933 - ),
1934 - 'internal_knowledge_base' => array(
1935 - 'id' => 'internal_knowledge_base',
1936 - 'name' => 'internal_knowledge_base',
1937 - 'type' => 'section',
1938 - 'label' => __( 'Internal Knowledge Base', 'betterdocs' ),
1939 - 'priority' => 1,
1940 - 'fields' => apply_filters( 'betterdocs_settings_content_restriction_fields', array(
1941 - 'enable_content_restriction' => array(
1942 - 'name' => 'enable_content_restriction',
1943 - 'type' => 'toggle',
1944 - 'is_pro' => true,
1945 - 'priority' => 5,
1946 - 'label' => __( 'Internal Knowledge Base', 'betterdocs' ),
1947 - 'enable_disable_text_active' => true,
1948 - 'default' => array( 'all' )
1949 - ),
1950 - 'internal_knowledge_base_type' => array(
1951 - 'name' => 'internal_knowledge_base_type',
1952 - 'type' => 'radio-card',
1953 - 'label' => __( 'Choose a Rule Type', 'betterdocs' ),
1954 - 'label_subtitle' => __( 'Choose a rule type: apply access globally (Basic), or configure detailed restrictions (Advanced) for docs, categories, and KBs.', 'betterdocs' ),
1955 - 'priority' => 6,
1956 - 'multiple' => true,
1957 - 'search' => true,
1958 - 'default' => array( 'all' ),
1959 - 'placeholder' => __( 'Select any', 'betterdocs' ),
1960 - 'options' => array(
1961 - array(
1962 - 'label' => 'Basic',
1963 - 'value' => 'basic'
1964 - ),
1965 - array(
1966 - 'label' => 'Advanced',
1967 - 'value' => 'advanced'
1968 - )
1969 - ),
1970 - 'filterValue' => 'all',
1971 - 'rules' => Rules::is( 'enable_content_restriction', true )
1972 - ),
1973 - 'content_visibility' => array(
1974 - 'name' => 'content_visibility',
1975 - 'type' => 'checkbox-select',
1976 - 'label' => __( 'Restrict Access to', 'betterdocs' ),
1977 - 'label_subtitle' => __( 'Only selected User Roles will be able to view your Knowledge Base', 'betterdocs' ),
1978 - 'is_pro' => true,
1979 - 'priority' => 7,
1980 - 'multiple' => true,
1981 - 'search' => true,
1982 - 'default' => array( 'all' ),
1983 - 'placeholder' => __( 'Select any', 'betterdocs' ),
1984 - 'options' => $roles_for_ikb,
1985 - 'rules' => Rules::logicalRule(
1986 - array(
1987 - Rules::is( 'enable_content_restriction', true ),
1988 - Rules::is( 'internal_knowledge_base_type', 'basic' )
1989 - ),
1990 - 'and'
1991 - ),
1992 - 'filterValue' => 'all'
1993 - ),
1994 - 'restrict_template' => array(
1995 - 'name' => 'restrict_template',
1996 - 'type' => 'checkbox-select',
1997 - 'label' => __( 'Restriction on Docs', 'betterdocs' ),
1998 - 'label_subtitle' => __( 'Selected Docs pages will be restricted', 'betterdocs' ),
1999 - 'is_pro' => true,
2000 - 'priority' => 8,
2001 - 'multiple' => true,
2002 - 'search' => true,
2003 - 'default' => array( 'all' ),
2004 - 'placeholder' => __( 'Select any', 'betterdocs' ),
2005 - 'options' => $this->get_texanomy(),
2006 - 'rules' => Rules::logicalRule(
2007 - array(
2008 - Rules::is( 'enable_content_restriction', true ),
2009 - Rules::is( 'internal_knowledge_base_type', 'basic' )
2010 - ),
2011 - 'and'
2012 - ),
2013 - 'filterValue' => 'all'
2014 - ),
2015 - 'restrict_category' => array(
2016 - 'name' => 'restrict_category',
2017 - 'type' => 'checkbox-select',
2018 - 'label' => __( 'Restriction on Docs Categories', 'betterdocs' ),
2019 - 'label_subtitle' => __( 'Selected Docs categories will be restricted', 'betterdocs' ),
2020 - 'is_pro' => true,
2021 - 'priority' => 9,
2022 - 'multiple' => true,
2023 - 'search' => true,
2024 - 'default' => array( 'all' ),
2025 - 'placeholder' => __( 'Select any', 'betterdocs' ),
2026 - 'options' => $this->get_terms( 'doc_category' ),
2027 - 'rules' => Rules::logicalRule(
2028 - array(
2029 - Rules::is( 'enable_content_restriction', true ),
2030 - Rules::is( 'internal_knowledge_base_type', 'basic' )
2031 - ),
2032 - 'and'
2033 - ),
2034 - 'filterValue' => 'all'
2035 - ),
2036 - 'restricted_redirect_url' => array(
2037 - 'name' => 'restricted_redirect_url',
2038 - 'type' => 'text',
2039 - 'label' => __( 'Redirect URL', 'betterdocs' ),
2040 - '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' ),
2041 - 'default' => '',
2042 - 'placeholder' => 'https://',
2043 - 'is_pro' => true,
2044 - 'priority' => 20,
2045 - 'rules' => Rules::logicalRule(
2046 - array(
2047 - Rules::is( 'enable_content_restriction', true )
2048 - ),
2049 - 'and'
2050 - )
2051 - )
2052 - ) )
2053 - )
2054 - )
2055 - )
2056 - )
2057 - )
2058 - )
2059 - ) ),
2060 - 'tab-email-reporting' => apply_filters( 'betterdocs_settings_tab_email_reporting', array(
2061 - 'id' => 'tab-email-reporting',
2062 - 'label' => __( 'Email Reporting', 'betterdocs' ),
1503 + 'fields' => apply_filters( 'betterdocs_internal_kb_fields', [
1504 + 'article_roles' => [
1505 + 'name' => 'article_roles',
1506 + 'type' => 'checkbox-select',
1507 + 'label' => __( 'Who Can Write Docs?', 'betterdocs' ),
1508 + 'priority' => 1,
1509 + 'multiple' => true,
1510 + 'search' => true,
1511 + 'is_pro' => true,
1512 + 'default' => ['administrator'],
1513 + 'options' => $wp_roles
1514 + ],
1515 + 'settings_roles' => [
1516 + 'name' => 'settings_roles',
1517 + 'type' => 'checkbox-select',
1518 + 'label' => __( 'Who Can Edit Settings?', 'betterdocs' ),
1519 + 'priority' => 2,
1520 + 'multiple' => true,
1521 + 'is_pro' => true,
1522 + 'search' => true,
1523 + 'default' => ['administrator'],
1524 + 'options' => $wp_roles
1525 + ],
1526 + 'analytics_roles' => [
1527 + 'name' => 'analytics_roles',
1528 + 'type' => 'checkbox-select',
1529 + 'label' => __( 'Who Can Check Analytics?', 'betterdocs' ),
1530 + 'priority' => 3,
1531 + 'multiple' => true,
1532 + 'is_pro' => true,
1533 + 'search' => true,
1534 + 'default' => ['administrator'],
1535 + 'options' => $wp_roles
1536 + ],
1537 + 'enable_content_restriction' => [
1538 + 'name' => 'enable_content_restriction',
1539 + 'type' => 'toggle',
1540 + 'is_pro' => true,
1541 + 'priority' => 4,
1542 + 'label' => __( 'Internal Knowledge Base', 'betterdocs' ),
1543 + 'enable_disable_text_active' => true,
1544 + 'default' => ['all']
1545 + ],
1546 + 'content_visibility' => [
1547 + 'name' => 'content_visibility',
1548 + 'type' => 'checkbox-select',
1549 + 'label' => __( 'Restrict Access to', 'betterdocs' ),
1550 + 'label_subtitle' => __( 'Only selected User Roles will be able to view your Knowledge Base', 'betterdocs' ),
1551 + 'is_pro' => true,
1552 + 'priority' => 5,
1553 + 'multiple' => true,
1554 + 'search' => true,
1555 + 'default' => ['all'],
1556 + 'placeholder' => __( 'Select any', 'betterdocs' ),
1557 + 'options' => $this->normalize_options( array_merge( [
1558 + 'all' => __( 'All logged in users', 'betterdocs' )
1559 + ], wp_roles()->role_names ) ),
1560 + 'rules' => Rules::is( 'enable_content_restriction', true ),
1561 + 'filterValue' => 'all'
1562 + ],
1563 + 'restrict_template' => [
1564 + 'name' => 'restrict_template',
1565 + 'type' => 'checkbox-select',
1566 + 'label' => __( 'Restriction on Docs', 'betterdocs' ),
1567 + 'label_subtitle' => __( 'Selected Docs pages will be restricted', 'betterdocs' ),
1568 + 'is_pro' => true,
1569 + 'priority' => 6,
1570 + 'multiple' => true,
1571 + 'search' => true,
1572 + 'default' => ['all'],
1573 + 'placeholder' => __( 'Select any', 'betterdocs' ),
1574 + 'options' => $this->get_texanomy(),
1575 + 'rules' => Rules::is( 'enable_content_restriction', true ),
1576 + 'filterValue' => 'all'
1577 + ],
1578 + 'restrict_category' => [
1579 + 'name' => 'restrict_category',
1580 + 'type' => 'checkbox-select',
1581 + 'label' => __( 'Restriction on Docs Categories', 'betterdocs' ),
1582 + 'label_subtitle' => __( 'Selected Docs categories will be restricted', 'betterdocs' ),
1583 + 'is_pro' => true,
1584 + 'priority' => 7,
1585 + 'multiple' => true,
1586 + 'search' => true,
1587 + 'default' => ['all'],
1588 + 'placeholder' => __( 'Select any', 'betterdocs' ),
1589 + 'options' => $this->get_terms( 'doc_category' ),
1590 + 'rules' => Rules::is( 'enable_content_restriction', true ),
1591 + 'filterValue' => 'all'
1592 + ],
1593 + 'restricted_redirect_url' => [
1594 + 'name' => 'restricted_redirect_url',
1595 + 'type' => 'text',
1596 + 'label' => __( 'Redirect URL', 'betterdocs' ),
1597 + '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' ),
1598 + 'default' => '',
1599 + 'placeholder' => 'https://',
1600 + 'is_pro' => true,
1601 + 'priority' => 9,
1602 + 'rules' => Rules::is( 'enable_content_restriction', true )
1603 + ]
1604 + ] )
1605 + ]
1606 + ]
1607 + ] ),
1608 + 'tab-email-reporting' => apply_filters( 'betterdocs_settings_tab_email_reporting', [
1609 + 'id' => 'tab-email-reporting',
1610 + 'label' => __( 'Email Reporting', 'betterdocs' ),
2063 1611 'priority' => 60,
2064 - 'fields' => array(
2065 - 'title-email-reporting' => array(
2066 - 'name' => 'title-email-reporting-tab',
2067 - 'type' => 'section',
2068 - 'label' => __( 'Email Reporting', 'betterdocs' ),
1612 + 'fields' => [
1613 + 'title-email-reporting' => [
1614 + 'name' => 'title-email-reporting-tab',
1615 + 'type' => 'section',
1616 + 'label' => __( 'Email Reporting', 'betterdocs' ),
2069 1617 'priority' => 60,
2070 - 'fields' => array(
2071 - 'enable_reporting' => array(
2072 - 'name' => 'enable_reporting',
2073 - 'label' => __( 'Email Reporting', 'betterdocs' ),
1618 + 'fields' => [
1619 + 'enable_reporting' => [
1620 + 'name' => 'enable_reporting',
1621 + 'label' => __( 'Email Reporting', 'betterdocs' ),
2074 1622 'enable_disable_text_active' => true,
2075 - 'type' => 'toggle',
2076 - 'priority' => 1,
2077 - 'default' => 0
2078 - ),
2079 - 'reporting_frequency' => apply_filters( 'betterdocs_reporting_frequency_settings', array(
2080 - 'name' => 'reporting_frequency',
2081 - 'type' => 'select',
2082 - 'label' => __( 'Reporting Frequency', 'betterdocs' ),
2083 - 'default' => 'betterdocs_weekly',
1623 + 'type' => 'toggle',
1624 + 'priority' => 1,
1625 + 'default' => 0
1626 + ],
1627 + 'reporting_frequency' => apply_filters( 'betterdocs_reporting_frequency_settings', [
1628 + 'name' => 'reporting_frequency',
1629 + 'type' => 'select',
1630 + 'label' => __( 'Reporting Frequency', 'betterdocs' ),
1631 + 'default' => 'betterdocs_weekly',
2084 1632 'priority' => 2,
2085 - 'is_pro' => true,
2086 - 'options' => $this->normalize_options( array(
2087 - 'betterdocs_daily' => __( 'Once Daily', 'betterdocs' ),
2088 - 'betterdocs_weekly' => __( 'Once Weekly', 'betterdocs' ),
1633 + 'is_pro' => true,
1634 + 'options' => $this->normalize_options( [
1635 + 'betterdocs_daily' => __( 'Once Daily', 'betterdocs' ),
1636 + 'betterdocs_weekly' => __( 'Once Weekly', 'betterdocs' ),
2089 1637 'betterdocs_monthly' => __( 'Once Monthly', 'betterdocs' )
2090 - ) ),
2091 - 'rules' => Rules::is( 'enable_reporting', true )
2092 - ) ),
2093 - 'reporting_day' => array(
2094 - 'name' => 'reporting_day',
2095 - 'type' => 'select',
2096 - 'label' => __( 'Reporting Day', 'betterdocs' ),
2097 - 'default' => 'monday',
2098 - 'rules' => Rules::logicalRule( array(
1638 + ] ),
1639 + 'rules' => Rules::is( 'enable_reporting', true )
1640 + ] ),
1641 + 'reporting_day' => [
1642 + 'name' => 'reporting_day',
1643 + 'type' => 'select',
1644 + 'label' => __( 'Reporting Day', 'betterdocs' ),
1645 + 'default' => 'monday',
1646 + 'rules' => Rules::logicalRule( [
2099 1647 Rules::is( 'enable_reporting', true ),
2100 1648 Rules::is( 'reporting_frequency', 'betterdocs_weekly' )
2101 - ), 'and' ),
2102 - 'priority' => 3,
2103 - 'options' => $this->normalize_options( array(
2104 - 'sunday' => __( 'Sunday', 'betterdocs' ),
2105 - 'monday' => __( 'Monday', 'betterdocs' ),
2106 - 'tuesday' => __( 'Tuesday', 'betterdocs' ),
1649 + ], 'and' ),
1650 + 'priority' => 3,
1651 + 'options' => $this->normalize_options( [
1652 + 'sunday' => __( 'Sunday', 'betterdocs' ),
1653 + 'monday' => __( 'Monday', 'betterdocs' ),
1654 + 'tuesday' => __( 'Tuesday', 'betterdocs' ),
2107 1655 'wednesday' => __( 'Wednesday', 'betterdocs' ),
2108 - 'thursday' => __( 'Thursday', 'betterdocs' ),
2109 - 'friday' => __( 'Friday', 'betterdocs' ),
2110 - 'saturday' => __( 'Saturday', 'betterdocs' )
2111 - ) ),
1656 + 'thursday' => __( 'Thursday', 'betterdocs' ),
1657 + 'friday' => __( 'Friday', 'betterdocs' ),
1658 + 'saturday' => __( 'Saturday', 'betterdocs' )
1659 + ] ),
2112 1660 'label_subtitle' => __( 'This is only applicable for the “Weekly” report', 'betterdocs' )
2113 - ),
2114 - 'select_reporting_data' => apply_filters( 'betterdocs_select_reporting_data_settings', array(
2115 - 'name' => 'select_reporting_data',
2116 - 'type' => 'checkbox-select',
2117 - 'label' => __( 'Select Reporting Data', 'betterdocs' ),
1661 + ],
1662 + 'select_reporting_data' => apply_filters( 'betterdocs_select_reporting_data_settings', [
1663 + 'name' => 'select_reporting_data',
1664 + 'type' => 'checkbox-select',
1665 + 'label' => __( 'Select Reporting Data', 'betterdocs' ),
2118 1666 'priority' => 4,
2119 1667 'multiple' => true,
2120 - 'options' => $this->normalize_options( array(
2121 - 'overview' => 'Overview',
2122 - 'top-docs' => 'Top Docs',
1668 + 'options' => $this->normalize_options( [
1669 + 'overview' => 'Overview',
1670 + 'top-docs' => 'Top Docs',
2123 1671 'most-search' => 'Most Searched Keywords'
2124 - ) ),
2125 - 'default' => array( 'overview', 'top-docs', 'most-search' ),
2126 - 'is_pro' => true,
2127 - 'rules' => Rules::is( 'enable_reporting', true )
2128 - ) ),
2129 - 'reporting_email' => array(
2130 - 'name' => 'reporting_email',
2131 - 'type' => 'text',
2132 - 'label' => __( 'Reporting Email', 'betterdocs' ),
2133 - 'default' => get_option( 'admin_email' ),
1672 + ] ),
1673 + 'default' => ['overview', 'top-docs', 'most-search'],
1674 + 'is_pro' => true,
1675 + 'rules' => Rules::is( 'enable_reporting', true )
1676 + ] ),
1677 + 'reporting_email' => [
1678 + 'name' => 'reporting_email',
1679 + 'type' => 'text',
1680 + 'label' => __( 'Reporting Email', 'betterdocs' ),
1681 + 'default' => get_option( 'admin_email' ),
2134 1682 'priority' => 5,
2135 - 'rules' => Rules::is( 'enable_reporting', true )
2136 - ),
2137 - 'reporting_subject' => apply_filters( 'betterdocs_reporting_subject_settings', array(
2138 - 'name' => 'reporting_subject',
2139 - 'type' => 'textarea',
2140 - 'label' => __( 'Reporting Email Subject', 'betterdocs' ),
2141 - 'default' => wp_sprintf( // Translators: %s is replaced with the website name.
2142 - __( 'Your Documentation Performance of %s Website', 'betterdocs' ), get_bloginfo( 'name' ) ),
1683 + 'rules' => Rules::is( 'enable_reporting', true )
1684 + ],
1685 + 'reporting_subject' => apply_filters( 'betterdocs_reporting_subject_settings', [
1686 + 'name' => 'reporting_subject',
1687 + 'type' => 'textarea',
1688 + 'label' => __( 'Reporting Email Subject', 'betterdocs' ),
1689 + 'default' => wp_sprintf( __( 'Your Documentation Performance of %s Website', 'betterdocs' ), get_bloginfo( 'name' ) ),
2143 1690 'priority' => 6,
2144 - 'is_pro' => true,
2145 - 'rules' => Rules::is( 'enable_reporting', true )
2146 - ) ),
2147 - 'test_report' => array(
2148 - 'name' => 'test_report',
2149 - 'label' => __( 'Reporting Test', 'betterdocs' ),
2150 - 'text' => __( 'Test Report', 'betterdocs' ),
2151 - 'type' => 'button',
1691 + 'is_pro' => true,
1692 + 'rules' => Rules::is( 'enable_reporting', true )
1693 + ] ),
1694 + 'test_report' => [
1695 + 'name' => 'test_report',
1696 + 'label' => __( 'Reporting Test', 'betterdocs' ),
1697 + 'text' => __( 'Test Report', 'betterdocs' ),
1698 + 'type' => 'button',
2152 1699 'priority' => 7,
2153 - 'rules' => Rules::is( 'enable_reporting', true ),
2154 - 'ajax' => array(
2155 - 'on' => 'click',
2156 - 'api' => '/betterdocs/v1/reporting-test',
2157 - 'data' => array(
2158 - 'enable_reporting' => '@enable_reporting',
1700 + 'rules' => Rules::is( 'enable_reporting', true ),
1701 + 'ajax' => [
1702 + 'on' => 'click',
1703 + 'api' => '/betterdocs/v1/reporting-test',
1704 + 'data' => [
1705 + 'enable_reporting' => '@enable_reporting',
2159 1706 'select_reporting_data' => '@select_reporting_data',
2160 - 'reporting_subject' => '@reporting_subject',
2161 - 'reporting_email' => '@reporting_email',
2162 - 'reporting_day' => '@reporting_day',
2163 - 'reporting_frequency' => '@reporting_frequency'
2164 - ),
2165 - 'swal' => array(
2166 - 'text' => __( 'Successfully Sent a Test Report in Your Email.', 'betterdocs' ),
2167 - 'icon' => 'success',
1707 + 'reporting_subject' => '@reporting_subject',
1708 + 'reporting_email' => '@reporting_email',
1709 + 'reporting_day' => '@reporting_day',
1710 + 'reporting_frequency' => '@reporting_frequency'
1711 + ],
1712 + 'swal' => [
1713 + 'text' => __( 'Successfully Sent a Test Report in Your Email.', 'betterdocs' ),
1714 + 'icon' => 'success',
2168 1715 'autoClose' => 2000
2169 - )
2170 - )
2171 - )
2172 - )
2173 - )
2174 - )
2175 - ) ),
2176 - 'tab-git-sync' => apply_filters( 'betterdocs_settings_tab_github_integration', array(
2177 - 'id' => 'tab-git-sync',
2178 - 'label' => __( 'Git Sync', 'betterdocs' ),
2179 - 'priority' => 60,
2180 - 'fields' => array(
2181 - 'title-git-sync' => array(
2182 - 'name' => 'title-git-sync-tab',
2183 - 'type' => 'section',
2184 - 'label' => __( 'Git Sync Settings', 'betterdocs' ),
2185 - 'priority' => 60,
2186 - 'fields' => array(
2187 - 'enable_git_integration' => array(
2188 - 'name' => 'enable_git_integration',
2189 - 'type' => 'toggle',
2190 - 'label' => __( 'Enable Git Sync', 'betterdocs' ),
2191 - 'enable_disable_text_active' => true,
2192 - 'default' => false,
2193 - 'priority' => 1,
2194 - 'is_pro' => true,
2195 - 'label_subtitle' => __( 'Enable bidirectional synchronization between BetterDocs and Git repositories', 'betterdocs' )
2196 - )
2197 - )
2198 - )
2199 - )
2200 - ) ),
2201 - 'tab-instant-answer' => apply_filters( 'betterdocs_settings_tab_instant_answer', array(
2202 - 'id' => 'tab-instant-answer',
2203 - 'name' => 'tab-instant-answer',
2204 - 'type' => 'section',
2205 - 'label' => __( 'Instant Answer', 'betterdocs' ),
2206 - 'save' => false,
1716 + ]
1717 + ]
1718 + ]
1719 + ]
1720 + ]
1721 + ]
1722 + ] ),
1723 + 'tab-instant-answer' => apply_filters( 'betterdocs_settings_tab_instant_answer', [
1724 + 'id' => 'tab-instant-answer',
1725 + 'name' => 'tab-instant-answer',
1726 + 'type' => 'section',
1727 + 'label' => __( 'Instant Answer', 'betterdocs' ),
1728 + 'save' => false,
2207 1729 'priority' => 70,
2208 - 'fields' => array(
2209 - 'title-instant-answer' => array(
2210 - 'name' => 'title-instant-answer-tab',
2211 - 'type' => 'section',
2212 - 'label' => __( 'Instant Answer', 'betterdocs' ),
2213 - 'priority' => 80,
2214 - 'save' => false,
1730 + 'fields' => [
1731 + 'title-instant-answer' => [
1732 + 'name' => 'title-instant-answer-tab',
1733 + 'type' => 'section',
1734 + 'label' => __( 'Instant Answer', 'betterdocs' ),
1735 + 'priority' => 80,
1736 + 'save' => false,
2215 1737 'showSubmit' => false,
2216 - 'fields' => apply_filters( 'betterdocs_instant_answer_fields', array(
2217 - 'enable_disable_wrapper' => array(
2218 - 'name' => 'enable_disable_wrapper',
2219 - 'type' => 'section',
1738 + 'fields' => apply_filters( 'betterdocs_instant_answer_fields', [
1739 + 'enable_disable_wrapper' => [
1740 + 'name' => 'enable_disable_wrapper',
1741 + 'type' => 'section',
2220 1742 'priority' => 0,
2221 - 'save' => false,
2222 - 'fields' => array(
2223 - 'enable_disable' => array(
2224 - 'name' => 'enable_disable',
2225 - 'type' => 'toggle',
2226 - 'priority' => 100,
2227 - 'description' => __( 'Enable Instant Answer', 'betterdocs' ),
1743 + 'save' => false,
1744 + 'fields' => [
1745 + 'enable_disable' => [
1746 + 'name' => 'enable_disable',
1747 + 'type' => 'toggle',
1748 + 'priority' => 100,
1749 + 'description' => __( 'Enable Instant Answer', 'betterdocs' ),
2228 1750 'enable_disable_text_active' => false,
2229 - 'default' => false,
2230 - 'is_pro' => true
2231 - )
2232 - )
2233 - )
2234 - ) )
2235 - )
2236 - )
2237 - ) ),
2238 - 'tab-betterdocs-ai' => array(
2239 - 'id' => 'tab-betterdocs-ai',
2240 - 'name' => 'tab-betterdocs-ai',
2241 - 'type' => 'section',
2242 - 'label' => __( 'AI Content Suite', 'betterdocs' ),
2243 - 'priority' => 74,
2244 - 'fields' => array(
2245 - 'sections-betterdocs-ai' => array(
2246 - 'name' => 'sections-betterdocs-ai',
2247 - 'type' => 'section',
2248 - 'label' => __( 'AI Content Suite', 'betterdocs' ),
2249 - 'priority' => 10,
2250 - 'fields' => array(
2251 - 'all-betterdocs-ai' => array(
2252 - 'id' => 'all-tab-betterdocs-ai',
2253 - 'name' => 'all-tab-betterdocs-ai',
2254 - 'label' => __( 'AI Content Suite Settings', 'betterdocs' ),
2255 - 'classes' => 'tab-layout',
2256 - 'type' => 'tab',
2257 - 'active' => 'open-ai-settings',
2258 - 'completionTrack' => true,
2259 - 'sidebar' => false,
2260 - 'save' => false,
2261 - 'title' => false,
2262 - 'config' => array(
2263 - 'active' => 'open-ai-settings',
2264 - 'sidebar' => false,
2265 - 'title' => false
2266 - ),
2267 - 'submit' => array(
2268 - 'show' => false
2269 - ),
2270 - 'step' => array(
2271 - 'show' => false
2272 - ),
2273 - 'priority' => 20,
2274 - 'fields' => apply_filters(
2275 - 'betterdocs_migration_tab_sections',
2276 - array(
2277 - 'open-ai-settings' => array(
2278 - 'id' => 'open-ai-settings',
2279 - 'name' => 'open-ai-settings',
2280 - 'type' => 'section',
2281 - 'label' => __( 'API Settings', 'betterdocs' ),
2282 - 'priority' => 1,
2283 - 'fields' => array(
2284 - 'ai_autowrite_api_key' => array(
2285 - 'name' => 'ai_autowrite_api_key',
2286 - 'type' => 'text',
2287 - 'label' => __( 'API Key', 'betterdocs' ),
2288 - 'label_subtitle' => sprintf( /* translators: %s is a link to the documentation about generating an OpenAI API key. */__( 'Check out this <a target="_blank" href="%s">documentation</a> to find out how to generate your OpenAI API Key.', 'betterdocs' ), esc_url( 'https://betterdocs.co/docs/write-with-ai/' ) ),
2289 - 'default' => '',
2290 - 'priority' => 1
2291 - )
2292 - )
2293 - ),
2294 - 'write-with-ai' => array(
2295 - 'id' => 'write-with-ai',
2296 - 'name' => 'write-with-ai',
2297 - 'type' => 'section',
2298 - 'label' => __( 'Write with AI', 'betterdocs' ),
2299 - 'priority' => 5,
2300 - 'fields' => array(
2301 - 'enable_write_with_ai' => array(
2302 - 'name' => 'enable_write_with_ai',
2303 - 'type' => 'toggle',
2304 - 'priority' => 0,
2305 - 'label' => __( 'Write Docs with AI', 'betterdocs' ),
2306 - 'label_subtitle' => __( 'Generate AI based Documentation in your Gutenberg Editor', 'betterdocs' ),
2307 - 'enable_disable_text_active' => true,
2308 - 'default' => true
2309 - ),
2310 - 'enable_faq_write_with_ai' => array(
2311 - 'name' => 'enable_faq_write_with_ai',
2312 - 'type' => 'toggle',
2313 - 'priority' => 5,
2314 - 'label' => __( 'Write FAQ with AI', 'betterdocs' ),
2315 - 'label_subtitle' => __( 'Generate AI based FAQ in your Editor', 'betterdocs' ),
2316 - 'enable_disable_text_active' => true,
2317 - 'default' => true
2318 - ),
2319 - 'enable_glossaries_write_with_ai' => array(
2320 - 'name' => 'enable_glossaries_write_with_ai',
2321 - 'type' => 'toggle',
2322 - 'priority' => 6,
2323 - 'label' => __( 'Write Glossaries with AI', 'betterdocs' ),
2324 - 'label_subtitle' => __( 'Generate AI based Glossary definitions from the Glossaries admin page', 'betterdocs' ),
2325 - 'enable_disable_text_active' => true,
2326 - 'default' => true
2327 - ),
2328 - 'write_with_ai_model' => array(
2329 - 'name' => 'write_with_ai_model',
2330 - 'type' => 'select',
2331 - 'label' => __( 'OpenAI Model*', 'betterdocs' ),
2332 - 'priority' => 20,
2333 - 'multiple' => false,
2334 - 'default' => 'gpt-4o-mini',
2335 - 'options' => GlobalFields::normalize_fields( array(
2336 - 'gpt-4o-mini' => 'GPT-4o Mini',
2337 - 'gpt-4o' => 'GPT-4o',
2338 - 'gpt-4.1-nano' => 'GPT-4.1 Nano',
2339 - 'gpt-4.1-mini' => 'GPT-4.1 Mini',
2340 - 'gpt-4.1' => 'GPT-4.1',
2341 - 'gpt-5-nano' => 'GPT-5 Nano',
2342 - 'gpt-5-mini' => 'GPT-5 Mini',
2343 - 'gpt-5' => 'GPT-5',
2344 - 'gpt-5.5' => 'GPT-5.5'
2345 - ) )
2346 - ),
2347 - 'ai_autowrite_max_token' => array(
2348 - 'name' => 'ai_autowrite_max_token',
2349 - 'type' => 'min_token_number',
2350 - 'label' => __( 'Set Max Tokens', 'betterdocs' ),
2351 - 'label_subtitle' => sprintf( // translators: %s is a link to more information about token limits.
2352 - __( 'Documentation will be generated based on the Token Limits you have set. For more information on Token Limits, you can check out this <a target="_blank" href="%s">link</a>.', 'betterdocs' ), esc_url( 'https://platform.openai.com/account/limits' ) ),
2353 - 'default' => 2500,
2354 - 'priority' => 10,
2355 - 'model_field' => 'write_with_ai_model',
2356 - 'context' => 'write_with_ai',
2357 - 'min_token_map' => AIHelper::get_min_tokens_map( 'write_with_ai' ),
2358 - 'classes' => 'wprf-type-text'
2359 - )
2360 - )
2361 - ),
2362 - 'article-summary' => array(
2363 - 'id' => 'article-summary',
2364 - 'name' => 'article-summary',
2365 - 'type' => 'section',
2366 - 'label' => __( 'AI Doc Summarizer', 'betterdocs' ),
2367 - 'priority' => 10,
2368 - 'fields' => array(
2369 - 'enable_article_summary' => array(
2370 - 'name' => 'enable_article_summary',
2371 - 'type' => 'toggle',
2372 - 'priority' => 1,
2373 - 'label' => __( 'AI Powered Doc Summarizer', 'betterdocs' ),
2374 - 'label_subtitle' => __( 'Enable AI-powered article summaries on single doc pages. Requires OpenAI API key.', 'betterdocs' ),
2375 - 'enable_disable_text_active' => true,
2376 - 'default' => false
2377 - ),
2378 - 'article_summary_max_token' => array(
2379 - 'name' => 'article_summary_max_token',
2380 - 'type' => 'min_token_number',
2381 - 'label' => __( 'Set Max Tokens', 'betterdocs' ),
2382 - 'label_subtitle' => sprintf( // translators: %s is a link to more information about token limits.
2383 - __( 'Single Doc summarizer will be generated based on the token limits you have set. For more information on Token Limits, you can check out this <a target="_blank" href="%s">link</a>.', 'betterdocs' ), esc_url( 'https://platform.openai.com/account/limits' ) ),
2384 - 'default' => 1500,
2385 - 'priority' => 5,
2386 - 'model_field' => 'article_summary_model',
2387 - 'context' => 'article_summary',
2388 - 'min_token_map' => AIHelper::get_min_tokens_map( 'article_summary' ),
2389 - 'classes' => 'wprf-type-text'
2390 - ),
2391 - 'article_summary_model' => array(
2392 - 'name' => 'article_summary_model',
2393 - 'type' => 'select',
2394 - 'label' => __( 'OpenAI Model*', 'betterdocs' ),
2395 - 'priority' => 10,
2396 - 'multiple' => false,
2397 - 'default' => 'gpt-4o-mini',
2398 - 'options' => GlobalFields::normalize_fields( array(
2399 - 'gpt-4o-mini' => 'GPT-4o Mini',
2400 - 'gpt-4o' => 'GPT-4o',
2401 - 'gpt-4.1-nano' => 'GPT-4.1 Nano',
2402 - 'gpt-4.1-mini' => 'GPT-4.1 Mini',
2403 - 'gpt-4.1' => 'GPT-4.1',
2404 - 'gpt-5-nano' => 'GPT-5 Nano',
2405 - 'gpt-5-mini' => 'GPT-5 Mini',
2406 - 'gpt-5' => 'GPT-5',
2407 - 'gpt-5.5' => 'GPT-5.5'
2408 - ) )
2409 - )
2410 - )
2411 - )
2412 - )
2413 - )
2414 - )
2415 - )
2416 - )
2417 - )
2418 - ),
2419 - 'tab-ai-chatbot' => apply_filters( 'betterdocs_settings_tab_ai_chatbot', array(
2420 - 'id' => 'tab-ai-chatbot',
2421 - 'name' => 'tab-ai-chatbot',
2422 - 'type' => 'section',
2423 - 'label' => __( 'AI Chatbot', 'betterdocs' ),
2424 - 'submit' => array(
2425 - 'show' => false
2426 - ),
2427 - 'save' => false,
1751 + 'default' => true,
1752 + 'is_pro' => true
1753 + ]
1754 + ]
1755 + ]
1756 + ] )
1757 + ]
1758 + ]
1759 + ] ),
1760 + 'tab-ai-autowrite' => [
1761 + 'id' => 'tab-ai-autowrite',
1762 + 'name' => 'tab-ai-autowrite',
1763 + 'type' => 'section',
1764 + 'label' => __( 'Write with AI', 'betterdocs' ),
2428 1765 'priority' => 75,
2429 - 'fields' => array(
2430 - 'title-ai-chatbot-tab' => array(
2431 - 'name' => 'title-ai-chatbot-tab',
2432 - 'type' => 'section',
2433 - 'label' => __( 'AI Chatbot', 'betterdocs' ),
2434 - 'priority' => 80,
2435 - 'submit' => array(
2436 - 'show' => false
2437 - ),
2438 - 'save' => false,
2439 - 'fields' => apply_filters( 'betterdocs_ai_chatbot_fields', array(
2440 - 'ai_chatbot_fields' => array(
2441 - 'name' => 'ai_chatbot_fields',
2442 - 'type' => 'section',
2443 - 'priority' => 0,
2444 - 'fields' => array(
2445 - 'enable_ai_chatbot' => array(
2446 - 'name' => 'enable_ai_chatbot',
2447 - 'label' => __( 'AI Chatbot', 'betterdocs' ),
2448 - 'description' => __( 'Enable AI Chatbot', 'betterdocs' ),
2449 - 'type' => 'toggle',
2450 - 'priority' => 5,
2451 - 'default' => 0,
2452 - 'is_pro' => true,
2453 - 'is_license_active' => false,
2454 - 'disabled' => ! betterdocs()->is_pro_active() || ! defined( 'BETTERDOCS_CHATBOT_FILE' )
2455 - ),
2456 - 'instant_answer_warning' => array(
2457 - 'name' => 'instant_answer_warning',
2458 - 'type' => 'html',
2459 - 'priority' => 6,
2460 - 'html' => sprintf(
2461 - '<div class="betterdocs-ia-warning" style="margin:8px 0 0;padding:12px 16px;background:#fffaeb;border-left:4px solid #fdb022;border-radius:4px;display:flex;align-items:flex-start;gap:10px;"><span style="font-size:18px;line-height:1;flex-shrink:0;color:#b54708;">&#9888;</span><div style="font-size:13px;color:#202223;line-height:1.5;">%1$s<br><a href="?page=betterdocs-settings&amp;tab=tab-instant-answer" style="display:inline-block;margin-top:6px;color:#5a6bff;text-decoration:none;font-weight:500;">%2$s &rarr;</a></div></div>',
2462 - esc_html__( 'Instant Answer is currently disabled. The AI Chatbot won\'t appear on your site until Instant Answer is enabled.', 'betterdocs' ),
2463 - esc_html__( 'Enable Instant Answer', 'betterdocs' )
2464 - ),
2465 - 'rules' => Rules::logicalRule( array(
2466 - Rules::is( 'enable_ai_chatbot', true ),
2467 - Rules::is( 'enable_disable', false ),
2468 - ), 'and' ),
2469 - )
2470 - )
2471 - )
2472 - ) )
2473 - )
2474 - )
2475 - ) )
2476 - ) ),
2477 - 'TAB_AI_CHATBOT' => get_option( 'enable_ai_chatbot' ),
2478 - 'CHATBOT_LICENSE' => get_option( 'betterdocs_chatbot_software__license_status' ),
2479 - 'PRO_ACTIVE' => is_plugin_active( 'betterdocs-pro/betterdocs-pro.php' ),
2480 - 'PRO_LICENSE' => get_option( 'betterdocs_pro_software__license_status' )
2481 - );
1766 + 'fields' => [
1767 + 'title-ai-autowrite' => apply_filters( 'betterdocs_settings_ai_autowrite_fields', [
1768 + 'name' => 'title-ai-autowrite-tab',
1769 + 'type' => 'section',
1770 + 'label' => __( 'Write with AI', 'betterdocs' ),
1771 + 'priority' => 60,
1772 + 'fields' => [
1773 + 'enable_write_with_ai' => [
1774 + 'name' => 'enable_write_with_ai',
1775 + 'type' => 'toggle',
1776 + 'priority' => 0,
1777 + 'label' => __( 'Write Docs with AI', 'betterdocs' ),
1778 + 'label_subtitle' => __( 'Generate AI based Documentation in your Gutenberg Editor', 'betterdocs' ),
1779 + 'enable_disable_text_active' => true,
1780 + 'default' => true
1781 + ],
1782 + 'enable_faq_write_with_ai' => [
1783 + 'name' => 'enable_faq_write_with_ai',
1784 + 'type' => 'toggle',
1785 + 'priority' => 5,
1786 + 'label' => __( 'Write FAQ with AI', 'betterdocs' ),
1787 + 'label_subtitle' => __( 'Generate AI based FAQ in your Editor', 'betterdocs' ),
1788 + 'enable_disable_text_active' => true,
1789 + 'default' => true
1790 + ],
1791 + 'ai_autowrite_api_key' => [
1792 + 'name' => 'ai_autowrite_api_key',
1793 + 'type' => 'text',
1794 + 'label' => __( 'API Key', 'betterdocs' ),
1795 + 'label_subtitle' => __( 'Check out this <a target="_blank" href="' . esc_url( 'https://betterdocs.co/docs/write-with-ai/' ) . '">documentation</a> to find out to generate your OpenAI API Key', 'betterdocs' ),
1796 + 'default' => '',
1797 + 'priority' => 10
1798 + ],
1799 + 'ai_autowrite_max_token' => [
1800 + 'name' => 'ai_autowrite_max_token',
1801 + 'type' => 'number',
1802 + 'label' => __( 'Set Max Tokens', 'betterdocs' ),
1803 + 'label_subtitle' => __( 'Documentation will be generated based on the Token Limits you have set. For more information on Token Limits, you can check out this <a target="_blank" href="' . esc_url( 'https://platform.openai.com/account/limits' ) . '">link</a>.', 'betterdocs' ),
1804 + 'default' => 1500,
1805 + 'priority' => 15
1806 + ]
1807 + ]
1808 + ] )
1809 + ]
1810 + ]
1811 + ] )
1812 + ];
2482 1813
2483 - $settings = array_merge( $settings, $this->chatbot_active_localize() );
2484 -
2485 1814 return apply_filters( 'betterdocs_settings_args', $settings );
2486 1815 }
2487 1816
2488 - /**
2489 - * @return array
2490 - */
2491 - public function chatbot_active_localize() {
2492 - $chatbot_active = is_plugin_active( 'betterdocs-ai-chatbot/betterdocs-ai-chatbot.php' );
2493 - $chatbot_license_valid = get_option( 'betterdocs_chatbot_software__license_status' ) === 'valid';
2494 - $chatbot_enabled = $this->get( 'enable_ai_chatbot', false );
2495 -
2496 - // AI Search Suggestions are enabled if all conditions are met
2497 - $ai_search_suggestions_enabled = betterdocs()->helper->is_ai_chatbot_enabled();
2498 -
2499 - return array(
2500 - 'CHATBOT_ACTIVE' => $chatbot_active,
2501 - 'CHATBOT_LICENSE_VALID' => $chatbot_license_valid,
2502 - 'CHATBOT_ENABLED' => $chatbot_enabled,
2503 - 'AI_SEARCH_SUGGESTIONS_ENABLED' => $ai_search_suggestions_enabled
2504 - );
2505 - }
2506 -
2507 - /**
2508 - * Call This Function As Helper, When Pro Is Deactivated, To Be Used As Settings Default Values, When Betterdocs Pro Is Deactivated
2509 - *
2510 - * @return array
2511 - */
2512 - public function pro_settings_default_values() {
2513 - return array(
2514 - 'multiple_kb' => false,
2515 - 'enable_glossaries' => false,
2516 - 'enable_encyclopedia' => false,
2517 - 'analytics_from' => false,
2518 - 'unique_visitor_count' => false,
2519 - 'exclude_bot_analytics' => false,
2520 - 'show_attachment' => false,
2521 - 'show_related_docs' => false,
2522 - 'advance_search' => false,
2523 - 'child_category_exclude' => false,
2524 - 'kb_based_search' => false,
2525 - 'enable_disable' => false,
2526 - 'enable_content_restriction' => false
2527 - );
2528 - }
2529 -
2530 1817 public function import_export_settings( $settings ) {
2531 1818 if ( ! current_user_can( 'import' ) ) {
2532 1819 return $settings;
2533 1820 }
2534 1821
2535 - $settings[ 'tab-import-export' ] = apply_filters( 'betterdocs_settings_tab_import_export', array(
2536 - 'id' => 'tab-import-export',
2537 - 'name' => 'tab-import-export',
2538 - 'classes' => 'tab-import-export',
2539 - 'label' => __( 'Import / Export', 'betterdocs' ),
1822 + $settings['tab-import-export'] = apply_filters( 'betterdocs_settings_tab_import_export', [
1823 + 'id' => 'tab-import-export',
1824 + 'name' => 'tab-import-export',
1825 + 'classes' => 'tab-import-export',
1826 + 'label' => __( 'Import / Export', 'betterdocs' ),
2540 1827 'priority' => 80,
2541 - 'fields' => array(
2542 - 'sections-import-export' => array(
2543 - 'name' => 'sections-import-export',
2544 - 'type' => 'section',
2545 - 'label' => __( 'Import / Export', 'betterdocs' ),
1828 + 'fields' => [
1829 + 'sections-import-export' => [
1830 + 'name' => 'sections-import-export',
1831 + 'type' => 'section',
1832 + 'label' => __( 'Import / Export', 'betterdocs' ),
2546 1833 'priority' => 30,
2547 - 'fields' => array(
2548 - 'all-tab-import-export' => array(
2549 - 'id' => 'all-tab-import-export',
2550 - 'name' => 'all-tab-import-export',
2551 - 'label' => __( 'Import Export Settings', 'betterdocs' ),
2552 - 'classes' => 'tab-layout',
2553 - 'type' => 'tab',
2554 - 'active' => 'import',
1834 + 'fields' => [
1835 + 'all-tab-import-export' => [
1836 + 'id' => 'all-tab-import-export',
1837 + 'name' => 'all-tab-import-export',
1838 + 'label' => __( 'Import Export Settings', 'betterdocs' ),
1839 + 'classes' => 'tab-layout',
1840 + 'type' => "tab",
1841 + 'active' => "import",
2555 1842 'completionTrack' => true,
2556 - 'sidebar' => false,
2557 - 'save' => false,
2558 - 'title' => false,
2559 - 'config' => array(
2560 - 'active' => 'import',
1843 + 'sidebar' => false,
1844 + 'save' => false,
1845 + 'title' => false,
1846 + 'config' => [
1847 + 'active' => 'import',
2561 1848 'sidebar' => false,
2562 - 'title' => false
2563 - ),
2564 - 'submit' => array(
1849 + 'title' => false
1850 + ],
1851 + 'submit' => [
2565 1852 'show' => false
2566 - ),
2567 - 'step' => array(
1853 + ],
1854 + 'step' => [
2568 1855 'show' => false
2569 - ),
2570 - 'priority' => 20,
2571 - 'fields' => array(
2572 - 'import' => array(
2573 - 'id' => 'import',
2574 - 'name' => 'import',
2575 - 'type' => 'section',
2576 - 'label' => __( 'Import', 'betterdocs' ),
1856 + ],
1857 + 'priority' => 20,
1858 + 'fields' => [
1859 + 'import' => [
1860 + 'id' => 'import',
1861 + 'name' => 'import',
1862 + 'type' => 'section',
1863 + 'label' => __( 'Import', 'betterdocs' ),
2577 1864 'priority' => 1,
2578 - 'fields' => array(
2579 - 'import_tab_nested' => array(
2580 - 'id' => 'import_tab_nested',
2581 - 'name' => 'import_tab_nested',
2582 - 'label' => __( 'Import', 'betterdocs' ),
2583 - 'classes' => 'tab-nested-layout',
2584 - 'type' => 'tab',
2585 - 'active' => 'import_docs_nested',
1865 + 'fields' => [
1866 + 'import_tab_nested' => [
1867 + 'id' => 'import_tab_nested',
1868 + 'name' => 'import_tab_nested',
1869 + 'label' => __( 'Import', 'betterdocs' ),
1870 + 'classes' => 'tab-nested-layout',
1871 + 'type' => "tab",
1872 + 'active' => "import_docs_nested",
2586 1873 'completionTrack' => true,
2587 - 'sidebar' => false,
2588 - 'save' => false,
2589 - 'title' => false,
2590 - 'config' => array(
2591 - 'active' => 'import_docs_nested',
1874 + 'sidebar' => false,
1875 + 'save' => false,
1876 + 'title' => false,
1877 + 'config' => [
1878 + 'active' => 'import_docs_nested',
2592 1879 'sidebar' => false,
2593 - 'title' => false
2594 - ),
2595 - 'submit' => array(
1880 + 'title' => false
1881 + ],
1882 + 'submit' => [
2596 1883 'show' => false
2597 - ),
2598 - 'step' => array(
1884 + ],
1885 + 'step' => [
2599 1886 'show' => false
2600 - ),
2601 - 'priority' => 1,
2602 - 'fields' => array(
2603 - 'import_docs_nested' => array(
2604 - 'id' => 'import_docs_nested',
2605 - 'name' => 'import_docs_nested',
2606 - 'type' => 'section',
2607 - 'label' => __( 'Import Docs', 'betterdocs' ),
1887 + ],
1888 + 'priority' => 1,
1889 + 'fields' => [
1890 + 'import_docs_nested' => [
1891 + 'id' => 'import_docs_nested',
1892 + 'name' => 'import_docs_nested',
1893 + 'type' => 'section',
1894 + 'label' => __( 'Import Docs', 'betterdocs' ),
2608 1895 'priority' => 1,
2609 - 'fields' => array(
2610 - 'import_docs' => array(
2611 - 'name' => 'import_docs',
2612 - 'type' => 'importerupload',
2613 - 'label' => __( 'Import Docs', 'betterdocs' ),
2614 - 'label_subtitle' => wp_sprintf( // Translators: %1$s is a link to download a sample CSV file.
2615 - __( 'To import your Docs, please upload the .xml / .csv file here. <a href="%1$s">Download sample csv file</a>', 'betterdocs' ), betterdocs()->assets->icon( 'BetterDocs-sample-data.csv', true ) ),
2616 - 'text' => array(
2617 - 'normal' => __( 'Proceed', 'betterdocs' ),
2618 - 'saved' => __( 'Proceed', 'betterdocs' ),
2619 - 'loading' => __( 'Importing...', 'betterdocs' ),
1896 + 'fields' => [
1897 + 'import_docs' => [
1898 + 'name' => 'import_docs',
1899 + 'type' => 'importerupload',
1900 + 'label' => __( 'Import Docs', 'betterdocs' ),
1901 + 'label_subtitle' => wp_sprintf( __( 'To import your Docs, please upload the .xml / .csv file here. <a href="%1$s">Download sample csv file</a>', 'betterdocs' ), betterdocs()->assets->icon( 'BetterDocs-sample-data.csv', true ) ),
1902 + 'text' => [
1903 + 'normal' => __( 'Proceed', 'betterdocs' ),
1904 + 'saved' => __( 'Proceed', 'betterdocs' ),
1905 + 'loading' => __( 'Importing...', 'betterdocs' ),
2620 1906 'exists_notice' => __( 'It seems like documentations with same slugs already exist on your website. What would you like to do?', 'betterdocs' )
2621 - ),
2622 - 'ajax' => array(
2623 - 'on' => 'click',
2624 - 'api' => '/betterdocs/v1/import-docs',
2625 - 'swal' => array(
2626 - 'text' => __( 'Import completed successfully.', 'betterdocs' ),
2627 - 'icon' => 'success',
1907 + ],
1908 + 'ajax' => [
1909 + 'on' => 'click',
1910 + 'api' => '/betterdocs/v1/import-docs',
1911 + 'swal' => [
1912 + 'text' => __( 'Import completed successfully.', 'betterdocs' ),
1913 + 'icon' => 'success',
2628 1914 'autoClose' => 2000
2629 - )
2630 - ),
2631 - 'file_type' => '.xml, .csv',
2632 - 'priority' => 1
2633 - )
2634 - )
2635 - ),
1915 + ]
1916 + ],
1917 + 'file_type' => '.xml, .csv',
1918 + 'priority' => 1
1919 + ]
1920 + ]
1921 + ],
2636 1922
2637 - 'import_settings_nested' => array(
2638 - 'id' => 'import_settings_nested',
2639 - 'name' => 'import_settings_nested',
2640 - 'type' => 'section',
2641 - 'label' => __( 'Import Settings', 'betterdocs' ),
1923 + 'import_settings_nested' => [
1924 + 'id' => 'import_settings_nested',
1925 + 'name' => 'import_settings_nested',
1926 + 'type' => 'section',
1927 + 'label' => __( 'Import Settings', 'betterdocs' ),
2642 1928 'priority' => 1,
2643 - 'fields' => array(
2644 - 'settings_importer' => array(
2645 - 'name' => 'settings_importer',
2646 - 'type' => 'settingsuploader',
2647 - 'label' => __( 'Import Settings', 'betterdocs' ),
1929 + 'fields' => [
1930 + 'settings_importer' => [
1931 + 'name' => 'settings_importer',
1932 + 'type' => 'settingsuploader',
1933 + 'label' => __( 'Import Settings', 'notificationx' ),
2648 1934 'label_subtitle' => __( 'To import BetterDocs Settings, please upload BetterDocs settings you have exported from another website in .json format', 'betterdocs' ),
2649 - 'reset' => __( 'Change', 'betterdocs' ),
2650 - 'priority' => 1
2651 - ),
2652 - 'import_settings' => array(
2653 - 'name' => 'import_settings',
2654 - 'type' => 'button',
2655 - 'rules' => Rules::is( 'settings_importer', null, true ),
2656 - 'text' => array(
2657 - 'normal' => __( 'Proceed', 'betterdocs' ),
2658 - 'saved' => __( 'Proceed', 'betterdocs' ),
1935 + 'reset' => __( 'Change', 'notificationx' ),
1936 + 'priority' => 1
1937 + ],
1938 + 'import_settings' => [
1939 + 'name' => 'import_settings',
1940 + 'type' => 'button',
1941 + 'rules' => Rules::is( 'settings_importer', null, true ),
1942 + 'text' => [
1943 + 'normal' => __( 'Proceed', 'betterdocs' ),
1944 + 'saved' => __( 'Proceed', 'betterdocs' ),
2659 1945 'loading' => __( 'Importing...', 'betterdocs' )
2660 - ),
2661 - 'ajax' => array(
2662 - 'on' => 'click',
2663 - 'api' => '/betterdocs/v1/import-settings',
2664 - 'data' => array(
1946 + ],
1947 + 'ajax' => [
1948 + 'on' => 'click',
1949 + 'api' => '/betterdocs/v1/import-settings',
1950 + 'data' => [
2665 1951 'settings' => '@settings_importer'
2666 - ),
2667 - 'swal' => array(
2668 - 'text' => __( 'Import completed successfully.', 'betterdocs' ),
2669 - 'icon' => 'success',
1952 + ],
1953 + 'swal' => [
1954 + 'text' => __( 'Import completed successfully.', 'betterdocs' ),
1955 + 'icon' => 'success',
2670 1956 'autoClose' => 1000
2671 - ),
1957 + ],
2672 1958 'reload' => true
2673 - ),
1959 + ],
2674 1960 'priority' => 2
2675 - )
2676 - )
2677 - )
2678 - )
2679 - )
2680 - )
2681 - ),
2682 - 'export' => array(
2683 - 'id' => 'export',
2684 - 'name' => 'export',
2685 - 'type' => 'section',
2686 - 'label' => __( 'Export', 'betterdocs' ),
1961 + ]
1962 + ]
1963 + ]
1964 + ]
1965 + ]
1966 + ]
1967 + ],
1968 + 'export' => [
1969 + 'id' => 'export',
1970 + 'name' => 'export',
1971 + 'type' => 'section',
1972 + 'label' => __( 'Export', 'betterdocs' ),
2687 1973 'priority' => 1,
2688 - 'fields' => array(
2689 - 'export_tab_nested' => array(
2690 - 'id' => 'export_tab_nested',
2691 - 'name' => 'export_tab_nested',
2692 - 'label' => __( 'Export', 'betterdocs' ),
2693 - 'classes' => 'tab-nested-layout',
2694 - 'type' => 'tab',
2695 - 'active' => 'export_docs_nested',
1974 + 'fields' => [
1975 + 'export_tab_nested' => [
1976 + 'id' => 'export_tab_nested',
1977 + 'name' => 'export_tab_nested',
1978 + 'label' => __( 'Export', 'betterdocs' ),
1979 + 'classes' => 'tab-nested-layout',
1980 + 'type' => "tab",
1981 + 'active' => "export_docs_nested",
2696 1982 'completionTrack' => true,
2697 - 'sidebar' => false,
2698 - 'save' => false,
2699 - 'title' => false,
2700 - 'config' => array(
2701 - 'active' => 'export_docs_nested',
1983 + 'sidebar' => false,
1984 + 'save' => false,
1985 + 'title' => false,
1986 + 'config' => [
1987 + 'active' => 'export_docs_nested',
2702 1988 'sidebar' => false,
2703 - 'title' => false
2704 - ),
2705 - 'submit' => array(
1989 + 'title' => false
1990 + ],
1991 + 'submit' => [
2706 1992 'show' => false
2707 - ),
2708 - 'step' => array(
1993 + ],
1994 + 'step' => [
2709 1995 'show' => false
2710 - ),
2711 - 'priority' => 1,
2712 - 'fields' => array(
2713 - 'export_docs_nested' => array(
2714 - 'id' => 'export_docs_nested',
2715 - 'name' => 'export_docs_nested',
2716 - 'type' => 'section',
2717 - 'label' => __( 'Export Docs', 'betterdocs' ),
1996 + ],
1997 + 'priority' => 1,
1998 + 'fields' => [
1999 + 'export_docs_nested' => [
2000 + 'id' => 'export_docs_nested',
2001 + 'name' => 'export_docs_nested',
2002 + 'type' => 'section',
2003 + 'label' => __( 'Export Docs', 'betterdocs' ),
2718 2004 'priority' => 1,
2719 - 'fields' => apply_filters( 'betterdocs_export_fields', array(
2720 - 'export_type' => array(
2721 - 'name' => 'export_type',
2722 - 'label' => __( 'Select Docs Type', 'betterdocs' ),
2005 + 'fields' => apply_filters( 'betterdocs_export_fields', [
2006 + 'export_type' => [
2007 + 'name' => 'export_type',
2008 + 'label' => __( 'Select Docs Type', 'betterdocs' ),
2723 2009 'label_subtitle' => __( 'Choose an export type: All Docs, a specific Knowledge Base, or a Doc Category', 'betterdocs' ),
2724 - 'type' => 'select',
2725 - 'default' => 'docs',
2726 - 'priority' => 3,
2727 - 'search' => true,
2728 - 'options' => $this->normalize_options( apply_filters( 'betterdocs_export_type_options', array(
2729 - 'docs' => __( 'Docs', 'betterdocs' ),
2730 - 'doc_category' => __( 'Docs Category', 'betterdocs' ),
2731 - 'glossaries' => __( 'Glossaries', 'betterdocs' )
2732 - ) ) )
2733 - ),
2734 - 'export_docs' => array(
2735 - 'name' => 'export_docs',
2736 - 'type' => 'checkbox-select',
2737 - 'label' => __( 'Select Docs', 'betterdocs' ),
2010 + 'type' => 'select',
2011 + 'default' => 'docs',
2012 + 'priority' => 3,
2013 + 'search' => true,
2014 + 'options' => $this->normalize_options( apply_filters( 'betterdocs_export_type_options', [
2015 + 'docs' => __( 'Docs', 'betterdocs' ),
2016 + 'doc_category' => __( 'Docs Category', 'betterdocs' )
2017 + ] ) )
2018 + ],
2019 + 'export_docs' => [
2020 + 'name' => 'export_docs',
2021 + 'type' => 'checkbox-select',
2022 + 'label' => __( 'Select Docs', 'betterdocs' ),
2738 2023 'label_subtitle' => __( 'Selected docs will be included in the export.', 'betterdocs' ),
2739 - 'priority' => 4,
2740 - 'multiple' => true,
2741 - 'search' => true,
2742 - 'default' => array( 'all' ),
2743 - 'placeholder' => __( 'Select any', 'betterdocs' ),
2744 - 'options' => array_merge( array(
2745 - array(
2024 + 'priority' => 4,
2025 + 'multiple' => true,
2026 + 'search' => true,
2027 + 'default' => ['all'],
2028 + 'placeholder' => __( 'Select any', 'betterdocs' ),
2029 + 'options' => array_merge( [
2030 + [
2746 2031 'value' => 'all',
2747 2032 'label' => 'All'
2748 - )
2749 - ), $this->docs() ),
2750 - 'filterValue' => 'all',
2751 - 'rules' => Rules::is( 'export_type', 'docs' )
2752 - ),
2753 - 'export_categories' => array(
2754 - 'name' => 'export_categories',
2755 - 'type' => 'checkbox-select',
2756 - 'label' => __( 'Select Categories', 'betterdocs' ),
2033 + ]
2034 + ], $this->docs() ),
2035 + 'filterValue' => 'all',
2036 + 'rules' => Rules::is( 'export_type', 'docs' )
2037 + ],
2038 + 'export_categories' => [
2039 + 'name' => 'export_categories',
2040 + 'type' => 'checkbox-select',
2041 + 'label' => __( 'Select Categories', 'betterdocs' ),
2757 2042 'label_subtitle' => __( 'Selected categories and its docs will be included in the export.', 'betterdocs' ),
2758 - 'priority' => 6,
2759 - 'multiple' => true,
2760 - 'search' => true,
2761 - 'default' => array( 'all' ),
2762 - 'placeholder' => __( 'Select any', 'betterdocs' ),
2763 - 'options' => $this->get_terms( 'doc_category', false ),
2764 - 'filterValue' => 'all',
2765 - 'rules' => Rules::is( 'export_type', 'doc_category' )
2766 - ),
2767 - 'export_glossaries' => array(
2768 - 'name' => 'export_glossaries',
2769 - 'type' => 'checkbox-select',
2770 - 'label' => __( 'Select Glossaries', 'betterdocs' ),
2771 - 'label_subtitle' => __( 'Selected glossary terms will be exported.', 'betterdocs' ),
2772 - 'priority' => 7,
2773 - 'multiple' => true,
2774 - 'search' => true,
2775 - 'default' => array( 'all' ),
2776 - 'placeholder' => __( 'Select any', 'betterdocs' ),
2777 - 'options' => $this->get_terms( 'glossaries' ),
2778 - 'filterValue' => 'all',
2779 - 'rules' => Rules::is( 'export_type', 'glossaries' )
2780 - ),
2781 - 'file_type' => array(
2782 - 'name' => 'file_type',
2783 - 'label' => __( 'Select File Type', 'betterdocs' ),
2043 + 'priority' => 6,
2044 + 'multiple' => true,
2045 + 'search' => true,
2046 + 'default' => ['all'],
2047 + 'placeholder' => __( 'Select any', 'betterdocs' ),
2048 + 'options' => $this->get_terms( 'doc_category' ),
2049 + 'filterValue' => 'all',
2050 + 'rules' => Rules::is( 'export_type', 'doc_category' )
2051 + ],
2052 + 'file_type' => [
2053 + 'name' => 'file_type',
2054 + 'label' => __( 'Select File Type', 'betterdocs' ),
2784 2055 'label_subtitle' => __( 'Choose a file type', 'betterdocs' ),
2785 - 'type' => 'select',
2786 - 'default' => 'xml',
2787 - 'priority' => 8,
2788 - 'search' => true,
2789 - 'options' => $this->normalize_options( apply_filters( 'betterdocs_export_file_type_options', array(
2056 + 'type' => 'select',
2057 + 'default' => 'xml',
2058 + 'priority' => 7,
2059 + 'search' => true,
2060 + 'options' => $this->normalize_options( apply_filters( 'betterdocs_export_file_type_options', [
2790 2061 'xml' => __( '.xml', 'betterdocs' ),
2791 2062 'csv' => __( '.csv', 'betterdocs' )
2792 - ) ) )
2793 - ),
2794 - 'enable_export_faq' => array(
2795 - 'name' => 'enable_export_faq',
2796 - 'type' => 'toggle',
2797 - 'priority' => 9,
2798 - 'label' => __( 'Export FAQ', 'betterdocs' ),
2799 - 'label_subtitle' => __( 'Export FAQ Related Terms & Posts', 'betterdocs' ),
2800 - 'enable_disable_text_active' => true,
2801 - 'default' => true,
2802 - 'rules' => Rules::is( 'export_type', 'glossaries', true )
2803 - ),
2804 - 'export_docs_btn' => array(
2805 - 'name' => 'export_docs_btn',
2806 - 'text' => array(
2807 - 'normal' => __( 'Proceed', 'betterdocs' ),
2808 - 'saved' => __( 'Proceed', 'betterdocs' ),
2063 + ] ) )
2064 + ],
2065 + 'export_docs_btn' => [
2066 + 'name' => 'export_docs_btn',
2067 + 'text' => [
2068 + 'normal' => __( 'Proceed', 'betterdocs' ),
2069 + 'saved' => __( 'Proceed', 'betterdocs' ),
2809 2070 'loading' => __( 'Exporting...', 'betterdocs' )
2810 - ),
2811 - 'type' => 'button',
2812 - 'priority' => 10,
2813 - 'ajax' => array(
2814 - 'on' => 'click',
2815 - 'api' => '/betterdocs/v1/export-docs',
2816 - 'data' => array(
2817 - 'export_type' => '@export_type',
2818 - 'export_docs' => '@export_docs',
2819 - 'export_kbs' => '@export_kbs',
2071 + ],
2072 + 'type' => 'button',
2073 + 'priority' => 8,
2074 + 'ajax' => [
2075 + 'on' => 'click',
2076 + 'api' => '/betterdocs/v1/export-docs',
2077 + 'data' => [
2078 + 'export_type' => '@export_type',
2079 + 'export_docs' => '@export_docs',
2080 + 'export_kbs' => '@export_kbs',
2820 2081 'export_categories' => '@export_categories',
2821 - 'export_glossaries' => '@export_glossaries',
2822 - 'file_type' => '@file_type',
2823 - 'enable_export_faq' => '@enable_export_faq'
2824 - ),
2825 - 'swal' => array(
2826 - 'text' => __( 'Exported Successfully.', 'betterdocs' ),
2827 - 'icon' => 'success',
2082 + 'file_type' => '@file_type'
2083 + ],
2084 + 'swal' => [
2085 + 'text' => __( 'Exported Successfully.', 'betterdocs' ),
2086 + 'icon' => 'success',
2828 2087 'autoClose' => 2000
2829 - )
2830 - )
2831 - )
2832 - ) )
2833 - ),
2088 + ]
2089 + ]
2090 + ]
2091 + ] )
2092 + ],
2834 2093
2835 - 'export_settings_nested' => array(
2836 - 'id' => 'export_settings_nested',
2837 - 'name' => 'export_settings_nested',
2838 - 'type' => 'section',
2839 - 'label' => __( 'Export Settings', 'betterdocs' ),
2094 + 'export_settings_nested' => [
2095 + 'id' => 'export_settings_nested',
2096 + 'name' => 'export_settings_nested',
2097 + 'type' => 'section',
2098 + 'label' => __( 'Export Settings', 'betterdocs' ),
2840 2099 'priority' => 1,
2841 - 'fields' => array(
2842 - 'export_settings' => array(
2843 - 'name' => 'export_settings',
2844 - 'label' => __( 'Export Settings', 'betterdocs' ),
2100 + 'fields' => [
2101 + 'export_settings' => [
2102 + 'name' => 'export_settings',
2103 + 'label' => __( 'Export Settings', 'betterdocs' ),
2845 2104 'label_subtitle' => __( 'Simply click on “Export Settings” button to download your BetterDocs settings in .json format', 'betterdocs' ),
2846 - 'text' => array(
2847 - 'normal' => __( 'Export Settings', 'betterdocs' ),
2848 - 'saved' => __( 'Export Settings', 'betterdocs' ),
2105 + 'text' => [
2106 + 'normal' => __( 'Export Settings', 'betterdocs' ),
2107 + 'saved' => __( 'Export Settings', 'betterdocs' ),
2849 2108 'loading' => __( 'Exporting...', 'betterdocs' )
2850 - ),
2851 - 'type' => 'button',
2852 - 'priority' => 8,
2853 - 'ajax' => array(
2854 - 'on' => 'click',
2855 - 'api' => '/betterdocs/v1/export-settings',
2856 - 'data' => array(
2109 + ],
2110 + 'type' => 'button',
2111 + 'priority' => 8,
2112 + 'ajax' => [
2113 + 'on' => 'click',
2114 + 'api' => '/betterdocs/v1/export-settings',
2115 + 'data' => [
2857 2116 'betterdocs_settings' => get_option( 'betterdocs_settings' )
2858 - ),
2859 - 'swal' => array(
2860 - 'text' => __( 'File downloaded successfully.', 'betterdocs' ),
2861 - 'icon' => 'success',
2117 + ],
2118 + 'swal' => [
2119 + 'text' => __( 'File downloaded successfully.', 'betterdocs' ),
2120 + 'icon' => 'success',
2862 2121 'autoClose' => 2000
2863 - )
2864 - )
2865 - )
2866 - )
2867 - )
2868 - )
2869 - )
2870 - )
2871 - )
2872 - )
2873 - )
2874 - )
2875 - )
2876 - )
2877 - ) );
2122 + ]
2123 + ]
2124 + ]
2125 + ]
2126 + ]
2127 + ]
2128 + ]
2129 + ]
2130 + ]
2131 + ]
2132 + ]
2133 + ]
2134 + ]
2135 + ]
2136 + ] );
2878 2137
2879 2138 return $settings;
2880 2139 }
2881 2140
2882 - public function maybe_remove_git_tab( $tabs ) {
2883 - $pro_active = is_plugin_active( 'betterdocs-pro/betterdocs-pro.php' );
2884 - $pro_has_git = apply_filters( 'betterdocs_pro_has_git_integration', false );
2885 -
2886 - if ( $pro_active && ! $pro_has_git ) {
2887 - unset( $tabs[ 'tab-git-sync' ] );
2888 - }
2889 -
2890 - return $tabs;
2891 - }
2892 -
2893 2141 public function normalize_options( $options ) {
2894 2142 return GlobalFields::normalize_fields( $options );
2895 2143 }
2896 2144
@@ -2900,20 +2148,20 @@
2900 2148 if ( $docs_tax ) {
2901 2149 return $docs_tax;
2902 2150 }
2903 2151
2904 - $taxonomies = get_taxonomies( array(
2905 - 'object_type' => array( 'docs' )
2906 - ), 'objects' );
2152 + $taxonomies = get_taxonomies( [
2153 + 'object_type' => ['docs']
2154 + ], 'objects' );
2907 2155
2908 - $docs_tax = array(
2909 - 'all' => 'All Docs Archive',
2156 + $docs_tax = [
2157 + 'all' => 'All Docs Archive',
2910 2158 'docs' => 'Docs Page'
2911 - );
2159 + ];
2912 2160 foreach ( $taxonomies as $key => $value ) {
2913 - $docs_tax[ $key ] = $value->label;
2161 + $docs_tax[$key] = $value->label;
2914 2162 }
2915 - unset( $docs_tax[ 'doc_tag' ] );
2163 + unset( $docs_tax['doc_tag'] );
2916 2164
2917 2165 $docs_tax = $this->normalize_options( $docs_tax );
2918 2166 if ( count( $docs_tax ) > 2 ) {
2919 2167 $this->database->set_cache( 'betterdocs::settings::taxonomies', $docs_tax );
@@ -2921,9 +2169,9 @@
2921 2169
2922 2170 return $docs_tax;
2923 2171 }
2924 2172
2925 - public function get_terms( $taxonomy, $hide_empty = true ) {
2173 + public function get_terms( $taxonomy ) {
2926 2174 $_cache_key = 'betterdocs::settings::terms::' . trim( $taxonomy );
2927 2175 $docs_tax = $this->database->get_cache( $_cache_key );
2928 2176
2929 2177 if ( $docs_tax ) {
@@ -2929,21 +2177,21 @@
2929 2177 if ( $docs_tax ) {
2930 2178 return $docs_tax;
2931 2179 }
2932 2180
2933 - $get_terms = get_terms( array(
2934 - 'taxonomy' => $taxonomy,
2935 - 'hide_empty' => $hide_empty
2936 - ) );
2181 + $get_terms = get_terms( [
2182 + 'taxonomy' => $taxonomy,
2183 + 'hide_empty' => false
2184 + ] );
2937 2185
2938 - $terms = array(
2186 + $terms = [
2939 2187 'all' => 'All'
2940 - );
2188 + ];
2941 2189
2942 2190 if ( ! empty( $get_terms ) && ! is_wp_error( $get_terms ) ) {
2943 2191 foreach ( $get_terms as $value ) {
2944 2192 if ( isset( $value->slug ) && isset( $value->name ) ) {
2945 - $terms[ $value->slug ] = $value->name;
2193 + $terms[$value->slug] = $value->name;
2946 2194 }
2947 2195 }
2948 2196 }
2949 2197
@@ -2954,40 +2202,8 @@
2954 2202
2955 2203 return $terms;
2956 2204 }
2957 2205
2958 - public function get_terms_with_ids( $taxonomy ) {
2959 - $_cache_key = 'betterdocs::settings::terms::ids' . trim( $taxonomy );
2960 - $docs_tax = $this->database->get_cache( $_cache_key );
2961 -
2962 - if ( $docs_tax ) {
2963 - return $docs_tax;
2964 - }
2965 -
2966 - $get_terms = get_terms( array(
2967 - 'taxonomy' => $taxonomy,
2968 - 'hide_empty' => false,
2969 - 'suppress_filter' => true
2970 - ) );
2971 -
2972 - $terms = array();
2973 -
2974 - if ( ! empty( $get_terms ) && ! is_wp_error( $get_terms ) ) {
2975 - foreach ( $get_terms as $value ) {
2976 - if ( isset( $value->term_id ) && isset( $value->name ) ) {
2977 - $terms[ $value->term_id ] = $value->name;
2978 - }
2979 - }
2980 - }
2981 -
2982 - $terms = $this->normalize_options( $terms );
2983 - if ( count( $terms ) > 1 ) {
2984 - $this->database->set_cache( $_cache_key, $terms );
2985 - }
2986 -
2987 - return $terms;
2988 - }
2989 -
2990 2206 /**
2991 2207 * Get all docs
2992 2208 */
2993 2209 public function docs() {
@@ -2996,19 +2212,19 @@
2996 2212 if ( $docs ) {
2997 2213 return $docs;
2998 2214 }
2999 2215
3000 - $docs = array();
2216 + $docs = [];
3001 2217
3002 - $_docs = get_posts( array(
3003 - 'post_type' => 'docs',
3004 - 'numberposts' => -1,
2218 + $_docs = get_posts( [
2219 + 'post_type' => 'docs',
2220 + 'numberposts' => -1,
3005 2221 'posts_per_page' => -1
3006 - ) );
2222 + ] );
3007 2223
3008 2224 if ( ! empty( $_docs ) ) {
3009 2225 foreach ( $_docs as $doc ) {
3010 - $docs[ $doc->ID ] = betterdocs()->template_helper->kses( $doc->post_title );
2226 + $docs[$doc->ID] = betterdocs()->template_helper->kses( $doc->post_title );
3011 2227 }
3012 2228 $docs = GlobalFields::normalize_fields( $docs );
3013 2229 $this->database->set_cache( 'betterdocs::settings::all_docs', $docs );
3014 2230 }
@@ -3015,16 +2231,15 @@
3015 2231
3016 2232 return $docs;
3017 2233 }
3018 2234
3019 - public function hide_roles_management( $tabData = array() ) {
2235 + public function hide_roles_management( $tabData = [] ) {
3020 2236 global $current_user;
3021 2237
3022 2238 if ( $current_user instanceof WP_User && ! in_array( 'administrator', $current_user->roles ) ) {
3023 - unset( $tabData[ 'fields' ][ 'title-advance-settings' ][ 'fields' ][ 'article_roles' ] );
3024 - unset( $tabData[ 'fields' ][ 'title-advance-settings' ][ 'fields' ][ 'settings_roles' ] );
3025 - unset( $tabData[ 'fields' ][ 'title-advance-settings' ][ 'fields' ][ 'analytics_roles' ] );
3026 - unset( $tabData[ 'fields' ][ 'title-advance-settings' ][ 'fields' ][ 'faq_roles' ] );
2239 + unset( $tabData['fields']['title-advance-settings']['fields']['article_roles'] );
2240 + unset( $tabData['fields']['title-advance-settings']['fields']['settings_roles'] );
2241 + unset( $tabData['fields']['title-advance-settings']['fields']['analytics_roles'] );
3027 2242 }
3028 2243
3029 2244 return $tabData;
3030 2245 }