PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.2.6
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.2.6
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
← All changes | includes/Core/SetupWizard.php +42 -187 4.6.24.2.6 View file →
@@ -1,12 +1,8 @@
1 1 <?php
2 +
2 3 namespace WPDeveloper\BetterDocs\Core;
3 4
4 -if ( ! defined( 'ABSPATH' ) ) {
5 - exit;
6 -}
7 -
8 -
9 5 use WPDeveloper\BetterDocs\Utils\Base;
10 6 use WPDeveloper\BetterDocs\Admin\Builder\Rules;
11 7 use WPDeveloper\BetterDocs\Admin\Builder\GlobalFields;
12 8
@@ -24,53 +20,8 @@
24 20 }
25 21
26 22 betterdocs()->assets->enqueue( 'betterdocs-quick-setup', 'admin/js/quick-setup.js' );
27 23 betterdocs()->assets->localize( 'betterdocs-quick-setup', 'betterdocsQuickSetup', GlobalFields::normalize( $this->quickbuilder_setup() ) );
28 - betterdocs()->assets->localize(
29 - 'betterdocs-quick-setup',
30 - 'betterdocsSampleDocs',
31 - [
32 - 'enabled' => (bool) $this->settings->get( 'enable_ai_sample_docs', true ),
33 - 'rest_url' => esc_url_raw( rest_url() ),
34 - 'rest_base' => esc_url_raw( get_rest_url( null, '/betterdocs/v1/sample-docs' ) ),
35 - 'nonce' => wp_create_nonce( 'wp_rest' ),
36 - ]
37 - );
38 - // The layout picker writes Customizer theme_mods, which a block (FSE) theme never
39 - // reads — so on FSE we don't offer the picker at all (and don't spend the work
40 - // building its groups). The Customize step shows the same "design it in the Site
41 - // Editor" card the Settings > Design tab already shows there instead.
42 - $is_fse = (bool) betterdocs()->helper->current_theme_is_fse_theme();
43 -
44 - betterdocs()->assets->localize(
45 - 'betterdocs-quick-setup',
46 - 'betterdocsCustomizeLayouts',
47 - [
48 - 'rest_url' => esc_url_raw( rest_url() ),
49 - 'rest_base' => esc_url_raw( get_rest_url( null, '/betterdocs/v1/customize' ) ),
50 - 'nonce' => wp_create_nonce( 'wp_rest' ),
51 - 'is_fse' => $is_fse,
52 - 'groups' => $is_fse ? [] : $this->customize_layout_groups(),
53 - 'fse' => [
54 - 'eyebrow' => __( 'Full Site Editing', 'betterdocs' ),
55 - 'title' => __( 'Design with the Gutenberg Site Editor', 'betterdocs' ),
56 - 'description' => __( 'BetterDocs ships editable templates and ready-made patterns for your documentation. Open the Site Editor to design them block by block — colors, typography and layout included.', 'betterdocs' ),
57 - 'features' => [
58 - __( 'Docs archive & category templates', 'betterdocs' ),
59 - __( 'Single doc layout', 'betterdocs' ),
60 - __( 'Ready-made BetterDocs patterns', 'betterdocs' ),
61 - ],
62 - 'button' => __( 'Design with Gutenberg', 'betterdocs' ),
63 - 'note' => __( 'Opens in a new tab, so you can finish setup here.', 'betterdocs' ),
64 - // Opens the Site Editor's template list filtered to BetterDocs, rather than
65 - // dropping the user straight into one template (what Settings::gutenberg_link()
66 - // does) — from the wizard they've not chosen a template to edit yet.
67 - // Built by concatenation on purpose: add_query_arg() would re-encode the %2F.
68 - 'url' => admin_url( 'site-editor.php?p=%2Ftemplate&activeView=BetterDocs' ),
69 - 'image' => betterdocs()->assets->icon( 'customizer/gutenberg-preview.png', true ),
70 - ],
71 - ]
72 - );
73 24 betterdocs()->assets->enqueue( 'betterdocs-sweetalert', 'vendor/js/sweetalert.min.js', [] );
74 25 betterdocs()->assets->enqueue( 'betterdocs-icons', 'admin/btd-icon/style.css' );
75 26 betterdocs()->assets->enqueue( 'betterdocs-setup-wizard-qb-css', 'admin/css/quick-setup.css' );
76 27 betterdocs()->assets->enqueue( 'betterdocs-setup-wizard-new-css', 'admin/css/setup-wizard.css' );
@@ -91,92 +42,8 @@
91 42 ]
92 43 );
93 44 }
94 45
95 - /**
96 - * Layout-picker groups for the interactive "Customize" step. Each group's
97 - * `current` reflects the saved theme_mod; only the free layouts are offered.
98 - *
99 - * @return array
100 - */
101 - private function customize_layout_groups() {
102 - $build = function ( $key, $default, $dir, $title, $hint, $cols, array $options ) {
103 - $out = [];
104 - foreach ( $options as $value => $label ) {
105 - $out[] = [
106 - 'value' => $value,
107 - 'label' => $label,
108 - 'image' => betterdocs()->assets->icon( "customizer/{$dir}/{$value}.png", true ),
109 - ];
110 - }
111 - return [
112 - 'title' => $title,
113 - 'hint' => $hint,
114 - 'cols' => $cols,
115 - 'key' => $key,
116 - 'current' => get_theme_mod( $key, $default ),
117 - 'options' => $out,
118 - ];
119 - };
120 -
121 - return [
122 - 'docs' => $build(
123 - 'betterdocs_docs_layout_select',
124 - 'layout-7',
125 - 'docs-page',
126 - __( 'Docs Page', 'betterdocs' ),
127 - __( 'The main knowledge-base landing page.', 'betterdocs' ),
128 - 4,
129 - [
130 - 'layout-7' => __( 'Sleek', 'betterdocs' ),
131 - 'layout-1' => __( 'Grid', 'betterdocs' ),
132 - 'layout-8' => __( 'Slate', 'betterdocs' ),
133 - 'layout-5' => __( 'Classic', 'betterdocs' ),
134 - ]
135 - ),
136 - 'category' => $build(
137 - 'betterdocs_archive_layout_select',
138 - 'layout-7',
139 - 'archive',
140 - __( 'Category Page', 'betterdocs' ),
141 - __( "Where a single category's articles live.", 'betterdocs' ),
142 - 4,
143 - [
144 - 'layout-7' => __( 'Sleek', 'betterdocs' ),
145 - 'layout-1' => __( 'Classic', 'betterdocs' ),
146 - 'layout-8' => __( 'Slate', 'betterdocs' ),
147 - 'layout-4' => __( 'Abstract', 'betterdocs' ),
148 - ]
149 - ),
150 - 'single' => $build(
151 - 'betterdocs_single_layout_select',
152 - 'layout-8',
153 - 'single',
154 - __( 'Single Doc', 'betterdocs' ),
155 - __( 'An individual article layout.', 'betterdocs' ),
156 - 4,
157 - [
158 - 'layout-8' => __( 'Essence', 'betterdocs' ),
159 - 'layout-9' => __( 'Rustic', 'betterdocs' ),
160 - 'layout-10' => __( 'Slate', 'betterdocs' ),
161 - 'layout-1' => __( 'Classic', 'betterdocs' ),
162 - ]
163 - ),
164 - 'search' => $build(
165 - 'betterdocs_search_layout_select',
166 - 'layout-2',
167 - 'search',
168 - __( 'Search', 'betterdocs' ),
169 - __( 'How visitors search your docs.', 'betterdocs' ),
170 - 4,
171 - [
172 - 'layout-2' => __( 'Modal', 'betterdocs' ),
173 - 'layout-1' => __( 'Classic', 'betterdocs' ),
174 - ]
175 - ),
176 - ];
177 - }
178 -
179 46 public function normalize_options( $options ) {
180 47 return GlobalFields::normalize_fields( $options );
181 48 }
182 49
@@ -222,19 +89,19 @@
222 89 'active' => 'getting-started',
223 90 'sidebar' => false,
224 91 'title' => false,
225 92 'tab_number' => true,
226 - 'clickable' => true,
93 + 'clickable' => false,
227 94 'completionTrack' => true,
228 95 'content_heading' => [],
229 96 'step' => [
230 97 'show' => true,
231 98 'buttons' => [
232 - 'skip' => __( 'Skip for now', 'betterdocs' ),
99 + 'skip' => __( 'Skip This Step', 'betterdocs' ),
233 100 'prev' => [
234 - 'name' => __( 'Back', 'betterdocs' ),
101 + 'name' => __( 'Previous', 'betterdocs' ),
235 102 'type' => 'customize',
236 - 'customName' => __( 'Back', 'betterdocs' ),
103 + 'customName' => __( 'Previous', 'betterdocs' ),
237 104 'condition' => 'getting-started',
238 105 ],
239 106 'start' => [
240 107 'name' => 'Start',
@@ -252,23 +119,18 @@
252 119 ],
253 120 'next' => [
254 121 'name' => 'Next',
255 122 'type' => 'customize',
256 - 'customName' => __( 'Save & Continue', 'betterdocs' ),
123 + 'customName' => __( 'Next', 'betterdocs' ),
257 124 'condition' => 'getting-started',
125 + ],
126 + 'quick-builder-publish' => [
127 + 'name' => 'quick-builder-publish',
128 + 'type' => 'action',
129 + 'action' => 'btd_quick_build_launch'
258 130 ]
259 131 ],
260 - // Hide the footer step bar on the first step (its CTA is in
261 - // content via showSteps) and on the last step (Finalize's
262 - // Finish CTA is in content too, so a lone Back button looked
263 - // off). Back-navigation there is still available via the tabs.
264 - 'rules' => Rules::logicalRule(
265 - [
266 - Rules::is( 'config.active', 'getting-started', true ),
267 - Rules::is( 'config.active', 'finalize', true ),
268 - ],
269 - 'and'
270 - )
132 + 'rules' => Rules::is( 'config.active', 'getting-started', true )
271 133 ]
272 134 ],
273 135 'submit' => [
274 136 'show' => false
@@ -289,9 +151,9 @@
289 151 'type' => 'header',
290 152 'title' => __( 'Quick Launch', 'betterdocs' ),
291 153 'direction' => 'column',
292 154 'description' => __( 'Start your Knowledge Base configuration process with an easy-to-follow setup wizard.', 'betterdocs' ),
293 - 'icon' => '<svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"></path><path d="M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"></path><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"></path><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"></path></svg>',
155 + 'icon' => '<img src="' . betterdocs()->assets->icon( 'icons/rocket.svg', true ) . '"/>',
294 156 'priority' => 1
295 157 ],
296 158 'betterdocs-quick-setup-start' => [
297 159 'name' => 'betterdocs-quick-setup-start',
@@ -303,9 +165,9 @@
303 165 'name' => 'betterdocs-quick-setup-start-collapse',
304 166 'type' => 'collapse',
305 167 'priority' => 2,
306 168 'label' => __( 'By clicking this button, you are allowing this app to collect your information.', 'betterdocs' ),
307 - 'collapse_title' => __( 'What do we collect?', 'betterdocs' ),
169 + 'collapse_title' => __( 'What We Collect?', 'betterdocs' ),
308 170 'collapse_message' => __( 'We collect non-sensitive diagnostic data and plugin usage information. Your site URL, WordPress & PHP version, plugins & themes and email address to send you the discount coupon. This data lets us make sure this plugin always stays compatible with the most popular plugins and themes. No spam, we promise.', 'betterdocs' )
309 171 ]
310 172 ]
311 173 ]
@@ -326,9 +188,9 @@
326 188 'type' => 'header',
327 189 'title' => __( 'Page Setup Magic', 'betterdocs' ),
328 190 'direction' => 'row',
329 191 'description' => __( 'Configure the structure and layout of your documentation pages to match your preferences for an organized Knowledge Base.', 'betterdocs' ),
330 - 'icon' => '<svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M15 8a1 1 0 0 1-1-1V2a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8z"></path><path d="M20 8v12a2 2 0 0 1-2 2h-4.182"></path><path d="m3.305 19.53.923-.382"></path><path d="M4 10.592V4a2 2 0 0 1 2-2h8"></path><path d="m4.228 16.852-.924-.383"></path><path d="m5.852 15.228-.383-.923"></path><path d="m5.852 20.772-.383.924"></path><path d="m8.148 15.228.383-.923"></path><path d="m8.53 21.696-.382-.924"></path><path d="m9.773 16.852.922-.383"></path><path d="m9.773 19.148.922.383"></path><circle cx="7" cy="18" r="3"></circle></svg>',
192 + 'icon' => '<img src="' . betterdocs()->assets->icon( 'icons/content-setting.svg', true ) . '"/>',
331 193 'priority' => 1
332 194 ],
333 195 'betterdocs-quick-setup-fields' => [
334 196 'name' => 'betterdocs-quick-setup-fields',
@@ -341,13 +203,9 @@
341 203 'label' => __( 'Built-in Documentation Page', 'betterdocs' ),
342 204 'enable_disable_text_active' => true,
343 205 'default' => 1,
344 206 'priority' => 1,
345 - 'label_subtitle' => sprintf(
346 - /* translators: %s: example knowledge base URL */
347 - __( 'If you disable root slug for KB Archives, your individual knowledge base URL will be like this: %s', 'betterdocs' ),
348 - 'https://example.com/knowledgebase-1'
349 - )
207 + 'label_subtitle' => __( 'If you disable root slug for KB Archives, your individual knowledge base URL will be like this: https://example.com/knowledgebase-1', 'betterdocs' )
350 208 ],
351 209 'docs_page' => [
352 210 'name' => 'docs_page',
353 211 'label' => __( 'Docs Page', 'betterdocs' ),
@@ -467,14 +325,17 @@
467 325 'type' => 'header',
468 326 'title' => __( 'Content Crafting', 'betterdocs' ),
469 327 'direction' => 'row',
470 328 'description' => __( 'Craft categories & articles for your Knowledge Base to efficiently organize and manage your repository with respective categories.', 'betterdocs' ),
471 - 'icon' => '<svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4a1 1 0 0 1 1-1h9l5 5v3"></path><path d="M4 4v15a1 1 0 0 0 1 1h6"></path><path d="M14 3v5h5"></path><path d="M18.5 13.5a2.1 2.1 0 0 1 3 3L16 22l-4 1 1-4z"></path></svg>',
329 + 'icon' => '<img src="' . betterdocs()->assets->icon( 'icons/create-content.svg', true ) . '"/>',
472 330 'priority' => 1
473 331 ],
474 - 'create_content_generator' => [
475 - 'name' => 'create_content_generator',
476 - 'type' => 'sample_docs_generator',
332 + 'create_content_video' => [
333 + 'name' => 'create_content_video',
334 + 'type' => 'image',
335 + 'media' => [
336 + 'url' => betterdocs()->assets->icon( 'setup-wizard/DocCreate.gif', true )
337 + ],
477 338 'priority' => 2
478 339 ]
479 340 ]
480 341 ]
@@ -482,14 +343,9 @@
482 343 'customize' => apply_filters(
483 344 'betterdocs_quick_setup_tab_customize',
484 345 [
485 346 'id' => 'customize',
486 - // A block theme has no Customizer layouts to pick, so the step isn't
487 - // "Customize" there — it hands off to the Site Editor. (The tab id stays
488 - // `customize`: it keys the step's navigation and styling.)
489 - 'label' => betterdocs()->helper->current_theme_is_fse_theme()
490 - ? __( 'Design', 'betterdocs' )
491 - : __( 'Customize', 'betterdocs' ),
347 + 'label' => __( 'Customize', 'betterdocs' ),
492 348 'classes' => 'customize',
493 349 'priority' => 50,
494 350 'fields' => [
495 351 'customize_header' => [
@@ -494,24 +350,20 @@
494 350 'fields' => [
495 351 'customize_header' => [
496 352 'name' => 'customize_header',
497 353 'type' => 'header',
498 - 'title' => betterdocs()->helper->current_theme_is_fse_theme()
499 - ? __( 'Design Your Documentation', 'betterdocs' )
500 - : __( 'Style Your Documentation', 'betterdocs' ),
354 + 'title' => __( 'Style Your Documentation', 'betterdocs' ),
501 355 'direction' => 'row',
502 - // On a block theme the layout picker is replaced by the Site Editor
503 - // hand-off, so the copy leads with what the user CAN do rather than
504 - // naming a Customizer they will never open.
505 - 'description' => betterdocs()->helper->current_theme_is_fse_theme()
506 - ? __( 'Your theme supports Full Site Editing. Design your docs archive, single doc pages and patterns right in the Gutenberg Site Editor.', 'betterdocs' )
507 - : __( 'Pick a layout for your docs page, categories, single articles, and search — applied when you finish setup. Fine-tune the details anytime in the Customizer.', 'betterdocs' ),
508 - 'icon' => '<svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2.5"></rect><path d="M3 9h18M9 9v11"></path></svg>',
356 + 'description' => __( 'Personalize the appearance of your documentation page, articles, and archive pages using the power of this Customizer.', 'betterdocs' ),
357 + 'icon' => '<img src="' . betterdocs()->assets->icon( 'icons/customize.svg', true ) . '"/>',
509 358 'priority' => 1
510 359 ],
511 - 'customize_layouts' => [
512 - 'name' => 'customize_layouts',
513 - 'type' => 'layout_customizer',
360 + 'customize_video' => [
361 + 'name' => 'customize_video',
362 + 'type' => 'image',
363 + 'media' => [
364 + 'url' => betterdocs()->assets->icon( 'setup-wizard/Customizer.gif', true )
365 + ],
514 366 'priority' => 2
515 367 ]
516 368 ]
517 369 ]
@@ -526,17 +378,20 @@
526 378 'fields' => [
527 379 'finalize_header' => [
528 380 'name' => 'finalize_header',
529 381 'type' => 'header',
530 - 'title' => __( 'One last step', 'betterdocs' ),
382 + 'title' => __( 'Congratulations!', 'betterdocs' ),
531 383 'direction' => 'row',
532 - 'description' => __( 'Review your setup below. When you\'re ready, finish to save your settings and apply BetterDocs across your site — you can change anything later in Settings.', 'betterdocs' ),
533 - 'icon' => '<svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path><path d="M13 6h8"></path><path d="M13 12h8"></path><path d="M13 18h8"></path></svg>',
384 + 'description' => __( 'Your documentation page is now ready for use. Enrich it with more articles to ensure proper categorization and valuable resources.', 'betterdocs' ),
385 + 'icon' => '<img src="' . betterdocs()->assets->icon( 'icons/thumbs-up.svg', true ) . '"/>',
534 386 'priority' => 1
535 387 ],
536 - 'finalize_finish' => [
537 - 'name' => 'finalize_finish',
538 - 'type' => 'finish_panel',
388 + 'finalize_video' => [
389 + 'name' => 'finalize_video',
390 + 'type' => 'image',
391 + 'media' => [
392 + 'url' => betterdocs()->assets->icon( 'setup-wizard/ThankYou.gif', true )
393 + ],
539 394 'priority' => 2
540 395 ]
541 396 ]
542 397 ]