PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.2.0
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.2.0
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
← All changes | includes/Plugin.php +408 -319 3.4.04.2.0 View file →
@@ -2,379 +2,468 @@
2 2
3 3 namespace WPDeveloper\BetterDocs;
4 4
5 5 if ( ! defined( 'ABSPATH' ) ) {
6 - exit; // Exit if accessed directly
6 + exit; // Exit if accessed directly
7 7 }
8 8
9 +use WPDeveloper\BetterDocs\Admin\Analytics;
10 +use WPDeveloper\BetterDocs\Admin\Customizer\Customizer;
11 +use WPDeveloper\BetterDocs\Admin\HelpScoutMigration;
12 +use WPDeveloper\BetterDocs\Admin\ReportEmail;
9 13 use WPDeveloper\BetterDocs\Core\Admin;
10 -use WPDeveloper\BetterDocs\Core\Query;
11 -use WPDeveloper\BetterDocs\Core\Roles;
12 -use WPDeveloper\BetterDocs\Core\WriteWithAI;
13 -use WPDeveloper\BetterDocs\Dependencies\DI\Container;
14 -use WPDeveloper\BetterDocs\Utils\Views;
15 14 use WPDeveloper\BetterDocs\Core\BaseAPI;
16 15 use WPDeveloper\BetterDocs\Core\Install;
16 +use WPDeveloper\BetterDocs\Core\KBMigration;
17 +use WPDeveloper\BetterDocs\Core\Query;
17 18 use WPDeveloper\BetterDocs\Core\Request;
18 19 use WPDeveloper\BetterDocs\Core\Rewrite;
20 +use WPDeveloper\BetterDocs\Core\Roles;
19 21 use WPDeveloper\BetterDocs\Core\Scripts;
20 -use WPDeveloper\BetterDocs\Utils\Helper;
21 22 use WPDeveloper\BetterDocs\Core\Settings;
22 -use WPDeveloper\BetterDocs\Core\KBMigration;
23 -use WPDeveloper\BetterDocs\Utils\Enqueue;
23 +use WPDeveloper\BetterDocs\Core\ShortcodeFactory;
24 +use WPDeveloper\BetterDocs\Core\WriteWithAI;
25 +use WPDeveloper\BetterDocs\Core\ArticleSummary;
26 +use WPDeveloper\BetterDocs\Dependencies\DI\Container;
27 +use WPDeveloper\BetterDocs\Dependencies\DI\ContainerBuilder;
24 28 use WPDeveloper\BetterDocs\Editors\Editor;
25 -use WPDeveloper\BetterDocs\Utils\Database;
26 -use WPDeveloper\BetterDocs\Admin\Analytics;
27 -use WPDeveloper\BetterDocs\Admin\ReportEmail;
28 29 use WPDeveloper\BetterDocs\FrontEnd\FrontEnd;
29 -use WPDeveloper\BetterDocs\Core\ShortcodeFactory;
30 30 use WPDeveloper\BetterDocs\FrontEnd\TemplateTags;
31 -use WPDeveloper\BetterDocs\Admin\Customizer\Customizer;
32 -use WPDeveloper\BetterDocs\Dependencies\DI\ContainerBuilder;
31 +use WPDeveloper\BetterDocs\Modules\StyleHandler as ModulesStyleHandler;
32 +use WPDeveloper\BetterDocs\Utils\Database;
33 +use WPDeveloper\BetterDocs\Utils\Enqueue;
34 +use WPDeveloper\BetterDocs\Utils\Helper;
35 +use WPDeveloper\BetterDocs\Utils\Views;
33 36
34 37 final class Plugin {
35 - private static $_instance = null;
36 - /**
37 - * Assets manager
38 - *
39 - * @var Enqueue
40 - */
41 - public $assets;
42 - /**
43 - * View manager
44 - *
45 - * @var Views
46 - */
47 - public $views;
48 - /**
49 - * Container Manager
50 - *
51 - * @var Container
52 - */
53 - public $container;
54 - /**
55 - * Editor Manager
56 - * @var Editor
57 - */
58 - public $editor;
59 - /**
60 - * Helper class
61 - * @var Helper
62 - */
63 - public $helper;
64 - /**
65 - * KBMigration class
66 - * @var KBMigration
67 - */
68 - public $kbmigration;
69 - /**
70 - * KBMigration class
71 - * @var Admin
72 - */
73 - public $admin;
74 - /**
75 - * Helper class
76 - * @var Database
77 - */
78 - public $database;
79 - /**
80 - * Helper class
81 - * @var Settings
82 - */
83 - public $settings;
84 - /**
85 - * Helper class
86 - * @var TemplateTags
87 - */
88 - public $template_helper;
89 - /**
90 - * Customizer class
91 - * @var Customizer
92 - */
93 - public $customizer;
94 - /**
95 - * Query class
96 - * @var Query
97 - */
98 - public $query;
99 - /**
100 - * Rewrite Class
101 - * @var Rewrite
102 - */
103 - public $rewrite;
104 - /**
105 - * Request Class
106 - * @var Request
107 - */
108 - public $request;
109 - /**
110 - * Analytics Class
111 - * @var Analytics
112 - */
113 - public $analytics;
114 - /**
115 - * Plugin Version
116 - * @var string
117 - */
118 - public $version = '3.4.0';
38 + private static $_instance = null;
39 + /**
40 + * Assets manager
41 + *
42 + * @var Enqueue
43 + */
44 + public $assets;
45 + /**
46 + * View manager
47 + *
48 + * @var Views
49 + */
50 + public $views;
51 + /**
52 + * Container Manager
53 + *
54 + * @var Container
55 + */
56 + public $container;
57 + /**
58 + * Editor Manager
59 + * @var Editor
60 + */
61 + public $editor;
62 + /**
63 + * Helper class
64 + * @var Helper
65 + */
66 + public $helper;
67 + /**
68 + * KBMigration class
69 + * @var KBMigration
70 + */
71 + public $kbmigration;
72 + /**
73 + * KBMigration class
74 + * @var Admin
75 + */
76 + public $admin;
77 + /**
78 + * Helper class
79 + * @var Database
80 + */
81 + public $database;
82 + /**
83 + * Helper class
84 + * @var Settings
85 + */
86 + public $settings;
87 + /**
88 + * Helper class
89 + * @var TemplateTags
90 + */
91 + public $template_helper;
92 + /**
93 + * Article Summary class
94 + * @var ArticleSummary
95 + */
96 + public $article_summary;
97 + /**
98 + * Customizer class
99 + * @var Customizer
100 + */
101 + public $customizer;
102 + /**
103 + * Query class
104 + * @var Query
105 + */
106 + public $query;
107 + /**
108 + * Rewrite Class
109 + * @var Rewrite
110 + */
111 + public $rewrite;
112 + /**
113 + * Request Class
114 + * @var Request
115 + */
116 + public $request;
117 + /**
118 + * Analytics Class
119 + * @var Analytics
120 + */
121 + public $analytics;
122 + /**
123 + * Plugin Version
124 + * @var string
125 + */
126 + public $version = '4.2.0';
119 127
120 - /**
121 - * WriteWithAI Class
122 - * @var string
123 - */
124 - public $ai_autowrtie;
128 + /**
129 + * WriteWithAI Class
130 + * @var string
131 + */
132 + public $ai_autowrtie;
133 + public $backgroundProccessor;
125 134
126 - /**
127 - * Plugin DB Version
128 - * @var string
129 - */
130 - public $db_version = '1.0.1';
135 + /**
136 + * Plugin DB Version
137 + * @var string
138 + */
139 + public $db_version = '1.0.1';
131 140
132 - public function __construct() {
133 - $this->define_constants();
141 + public function __construct() {
142 + $this->define_constants();
134 143
135 - do_action( 'betterdocs_init_before' );
136 - $this->setup_container();
137 - /**
138 - * Register activation and deactivation hooks
139 - * and version updates check
140 - */
141 - $this->container->get( Install::class );
144 + do_action( 'betterdocs_init_before' );
142 145
143 - $this->initialize();
146 + $this->setup_container();
147 + /**
148 + * Register activation and deactivation hooks
149 + * and version updates check
150 + */
151 + $this->container->get( Install::class );
144 152
145 - add_action( 'init', [ $this, 'init' ], 0 );
153 + add_action( 'init', [ $this, 'initialize' ], 0 );
146 154
147 - /**
148 - * For admin only
149 - */
150 - add_action( 'admin_init', [ $this, 'admin_init' ], 0 );
155 + /**
156 + * Initialize API
157 + */
158 + add_action( 'rest_api_init', [ $this, 'api_initialization' ] );
151 159
152 - /**
153 - * For AJAX only
154 - */
155 - $this->ajax();
156 - }
160 + /**
161 + * For admin only
162 + */
163 + add_action( 'admin_init', [ $this, 'admin_init' ], 0 );
157 164
158 - private function define_constants() {
159 - $this->define( 'BETTERDOCS_VERSION', $this->version );
160 - $this->define( 'BETTERDOCS_DB_VERSION', $this->db_version );
161 - $this->define( 'BETTERDOCS_ABSPATH', dirname( BETTERDOCS_PLUGIN_FILE ) . '/' );
162 - $this->define( 'BETTERDOCS_ABSURL', plugin_dir_url( BETTERDOCS_PLUGIN_FILE ) );
163 - $this->define( 'BETTERDOCS_PLUGIN_BASENAME', plugin_basename( BETTERDOCS_PLUGIN_FILE ) );
164 - $this->define( 'BETTERDOCS_BLOCKS_DIRECTORY', BETTERDOCS_ABSPATH . 'assets/blocks/' );
165 - $this->define( 'BETTERDOCS_ROOT_DIR_PATH', plugin_dir_path( BETTERDOCS_PLUGIN_FILE ) );
166 - $this->define( 'BETTERDOCS_FSE_TEMPLATES_PATH', BETTERDOCS_ROOT_DIR_PATH . 'views/templates/fse' );
165 + /**
166 + * For AJAX only
167 + */
168 + $this->ajax();
167 169
168 - /**
169 - * Third Party Constants
170 - * @since 2.5.0
171 - *
172 - * WPML compatibility with Polylang
173 - */
174 - if ( Helper::is_plugin_active( 'polylang/polylang.php' ) ) {
175 - define( 'PLL_WPML_COMPAT', false );
176 - }
177 - }
170 + /**
171 + * Style Handler For Parsing and Saving Styles as file.
172 + */
173 + ModulesStyleHandler::init();
174 + }
178 175
179 - /**
180 - * Define constant if not already set.
181 - *
182 - * @param string $name Constant name.
183 - * @param string|bool $value Constant value.
184 - */
185 - private function define( $name, $value ) {
186 - if ( ! defined( $name ) ) {
187 - define( $name, $value );
188 - }
189 - }
176 + private function define_constants() {
177 + $this->define( 'BETTERDOCS_VERSION', $this->version );
178 + $this->define( 'BETTERDOCS_DB_VERSION', $this->db_version );
179 + $this->define( 'BETTERDOCS_ABSPATH', dirname( BETTERDOCS_PLUGIN_FILE ) . '/' );
180 + $this->define( 'BETTERDOCS_ABSURL', plugin_dir_url( BETTERDOCS_PLUGIN_FILE ) );
181 + $this->define( 'BETTERDOCS_PLUGIN_BASENAME', plugin_basename( BETTERDOCS_PLUGIN_FILE ) );
182 + $this->define( 'BETTERDOCS_BLOCKS_DIRECTORY', BETTERDOCS_ABSPATH . 'assets/blocks/' );
183 + $this->define( 'BETTERDOCS_ROOT_DIR_PATH', plugin_dir_path( BETTERDOCS_PLUGIN_FILE ) );
184 + $this->define( 'BETTERDOCS_FSE_TEMPLATES_PATH', BETTERDOCS_ROOT_DIR_PATH . 'views/templates/fse' );
190 185
191 - public function setup_container() {
192 - $config_array = require_once BETTERDOCS_ABSPATH . 'includes/config.php';
193 - $config = apply_filters( 'betterdocs_container_config', $config_array );
194 - $builder = new ContainerBuilder();
186 + /**
187 + * Third Party Constants
188 + * @since 2.5.0
189 + *
190 + * WPML compatibility with Polylang
191 + */
192 + if ( Helper::is_plugin_active( 'polylang/polylang.php' ) ) {
193 + define( 'PLL_WPML_COMPAT', false );
194 + }
195 + }
195 196
196 - $builder->addDefinitions( $config );
197 - $this->container = $builder->build();
198 - }
197 + /**
198 + * Define constant if not already set.
199 + *
200 + * @param string $name Constant name.
201 + * @param string|bool $value Constant value.
202 + */
203 + private function define( $name, $value ) {
204 + if ( ! defined( $name ) ) {
205 + define( $name, $value );
206 + }
207 + }
199 208
200 - public function initialize() {
201 - $this->container->get( Scripts::class );
202 - $this->rewrite = $this->container->get( Rewrite::class );
203 - $this->request = $this->container->get( Request::class );
204 - $this->query = $this->container->get( Query::class );
209 + public function setup_container() {
210 + $config_array = require_once BETTERDOCS_ABSPATH . 'includes/config.php';
211 + $config = apply_filters( 'betterdocs_container_config', $config_array );
212 + $builder = new ContainerBuilder();
205 213
206 - $this->rewrite->init();
207 - $this->request->init();
214 + $builder->addDefinitions( $config );
215 + $this->container = $builder->build();
216 + }
208 217
209 - $this->assets = $this->container->get( Enqueue::class );
210 - $this->views = $this->container->get( Views::class );
211 - $this->helper = $this->container->get( Helper::class );
212 - $this->kbmigration = $this->container->get( KBMigration::class );
213 - $this->admin = $this->container->get( Admin::class );
214 - $this->database = $this->container->get( Database::class );
215 - $this->settings = $this->container->get( Settings::class );
216 - $this->analytics = $this->container->get( Analytics::class );
218 + public function initialize() {
217 219
218 - $this->template_helper = $this->container->get( TemplateTags::class );
219 - $this->customizer = $this->container->get( Customizer::class );
220 - $this->editor = $this->container->get( Editor::class );
221 - $this->ai_autowrtie = $this->container->get( WriteWithAI::class );
220 + /**
221 + * Setup localization.
222 + */
223 + $this->load_plugin_textdomain();
222 224
223 - /**
224 - * Initialize all editors.
225 - * Elementor, Gutenberg/BlockEditor
226 - */
227 - add_action( 'init', [ $this->editor, 'init' ] );
225 + $this->container->get( Scripts::class );
226 + $this->rewrite = $this->container->get( Rewrite::class );
227 + $this->request = $this->container->get( Request::class );
228 + $this->query = $this->container->get( Query::class );
228 229
229 - /**
230 - * Initialize API
231 - */
232 - add_action( 'rest_api_init', [ $this, 'api_initialization' ] );
233 - }
230 + // Initialize background process
231 + $this->backgroundProccessor = $this->container->get( HelpScoutMigration::class );
234 232
235 - /**
236 - * Initialize the BetterDocs Plugin
237 - *
238 - * @return void
239 - * @since 2.5.0
240 - */
241 - public function init() {
242 - /**
243 - * Setup localization.
244 - */
245 - $this->load_plugin_textdomain();
233 + $this->rewrite->init();
234 + $this->request->init();
246 235
247 - $this->container->get( Admin::class );
248 - $this->container->get( Roles::class );
249 - $this->container->get( ReportEmail::class );
236 + $this->assets = $this->container->get( Enqueue::class );
237 + $this->views = $this->container->get( Views::class );
238 + $this->helper = $this->container->get( Helper::class );
239 + $this->kbmigration = $this->container->get( KBMigration::class );
240 + $this->admin = $this->container->get( Admin::class );
241 + $this->database = $this->container->get( Database::class );
242 + $this->settings = $this->container->get( Settings::class );
243 + $this->analytics = $this->container->get( Analytics::class );
250 244
251 - /**
252 - * Initialize Shortcode
253 - * Make sure you have listed out all shortcode in shortcode factory.
254 - */
255 - $this->container->get( ShortcodeFactory::class )->init();
245 + $this->template_helper = $this->container->get( TemplateTags::class );
246 + $this->customizer = $this->container->get( Customizer::class );
247 + $this->editor = $this->container->get( Editor::class );
248 + $this->ai_autowrtie = $this->container->get( WriteWithAI::class );
249 + $this->article_summary = $this->container->get( ArticleSummary::class );
256 250
257 - $this->container->get( FrontEnd::class );
251 + $this->container->get( Admin::class );
252 + $this->container->get( Roles::class );
253 + $this->container->get( ReportEmail::class );
258 254
259 - do_action( 'betterdocs_init' );
260 - }
255 + /**
256 + * Initialize Shortcode
257 + * Make sure you have listed out all shortcode in shortcode factory.
258 + */
259 + $this->container->get( ShortcodeFactory::class )->init();
261 260
262 - /**
263 - * Load plugins textdomain `betterdocs` into actions.
264 - * @return void
265 - */
266 - public function load_plugin_textdomain( $textdomain = 'betterdocs', $plugin_file = BETTERDOCS_PLUGIN_FILE ) {
267 - $locale = determine_locale();
261 + $this->container->get( FrontEnd::class );
268 262
269 - /**
270 - * Filter to adjust the BetterDocs locale to use for translations.
271 - */
272 - $locale = apply_filters( 'plugin_locale', $locale, $textdomain );
263 + do_action( 'betterdocs_init' );
273 264
274 - unload_textdomain( $textdomain );
275 - load_textdomain( $textdomain, WP_LANG_DIR . "/$textdomain-" . $locale . '.mo' );
276 - load_plugin_textdomain( $textdomain, false, plugin_basename( dirname( $plugin_file ) ) . '/languages' );
277 - }
265 + $this->editor->init();
266 + }
278 267
279 - /**
280 - * For AJAX Only
281 - * @return void
282 - */
283 - public function ajax() {
284 - }
268 + /**
269 + * Load plugins textdomain `betterdocs` into actions.
270 + * @return void
271 + */
272 + public function load_plugin_textdomain( $textdomain = 'betterdocs', $plugin_file = BETTERDOCS_PLUGIN_FILE ) {
273 + $locale = determine_locale();
285 274
286 - /**
287 - * Create a plugin instance.
288 - *
289 - * @param mixed ...$args
290 - *
291 - * @return static
292 - *
293 - * @suppress PHP0441
294 - * @since 2.5.0
295 - */
296 - public static function get_instance() {
297 - if ( static::$_instance == null ) {
298 - static::$_instance = new self();
275 + /**
276 + * Filter to adjust the BetterDocs locale to use for translations.
277 + */
278 + $locale = apply_filters( 'plugin_locale', $locale, $textdomain );
299 279
300 - do_action( 'betterdocs_loaded' );
301 - }
280 + if ( file_exists( WP_LANG_DIR . "/$textdomain-" . $locale . '.mo' ) ) {
281 + unload_textdomain( $textdomain );
282 + load_textdomain( $textdomain, WP_LANG_DIR . "/$textdomain-" . $locale . '.mo' );
283 + }
302 284
303 - return static::$_instance;
304 - }
285 + load_plugin_textdomain( $textdomain, false, plugin_basename( dirname( $plugin_file ) ) . '/languages' );
286 + }
305 287
306 - /**
307 - * Hooked with `admin_init` action.
308 - * @return void
309 - */
310 - public function admin_init() {
311 - /**
312 - * Maybe Redirect
313 - * for setup related settings.
314 - */
315 - $this->maybe_redirect();
316 - }
288 + /**
289 + * For AJAX Only
290 + * @return void
291 + */
292 + public function ajax() {
293 + }
317 294
318 - /**
319 - * Summary of maybe_redirect
320 - * @return void
321 - */
322 - public function maybe_redirect() {
323 - // Bail if no activation transient is set.
324 - if ( ! $this->database->get_transient( 'betterdocs_maybe_redirect' ) ) {
325 - return;
326 - }
295 + /**
296 + * Create a plugin instance.
297 + *
298 + * @param mixed ...$args
299 + *
300 + * @return static
301 + *
302 + * @suppress PHP0441
303 + * @since 2.5.0
304 + */
305 + public static function get_instance() {
306 + if ( self::$_instance == null ) {
307 + self::$_instance = new self();
327 308
328 - // Delete the activation transient.
329 - $this->database->delete_transient( 'betterdocs_maybe_redirect' );
309 + do_action( 'betterdocs_loaded' );
310 + }
330 311
331 - if ( ! is_multisite() ) {
332 - $betterdocs_settings = get_option('betterdocs_settings');
333 - if ( $betterdocs_settings) {
334 - wp_safe_redirect( add_query_arg( [ 'page' => 'betterdocs-settings' ], admin_url( 'admin.php' ) ) );
335 - } else {
336 - wp_safe_redirect( add_query_arg( [ 'page' => 'betterdocs-setup' ], admin_url( 'admin.php' ) ) );
337 - }
338 - }
339 - }
312 + return self::$_instance;
313 + }
340 314
341 - /**
342 - * Is Pro Plugin Is Installed?
343 - * @return bool
344 - */
345 - public function is_pro_installed() {
346 - return $this->helper->get_plugins( 'betterdocs-pro/betterdocs-pro.php' );
347 - }
315 + /**
316 + * Hooked with `admin_init` action.
317 + * @return void
318 + */
319 + public function admin_init() {
320 + /**
321 + * Maybe Redirect
322 + * for setup related settings.
323 + */
324 + $this->maybe_redirect();
325 + }
348 326
349 - /**
350 - * Is Pro Plugin Is Active?
351 - * @return bool
352 - */
353 - public function is_pro_active() {
354 - return $this->helper->is_plugin_active( 'betterdocs-pro/betterdocs-pro.php' );
355 - }
327 + /**
328 + * Summary of maybe_redirect
329 + * @return void
330 + */
331 + public function maybe_redirect() {
332 + // Bail if no activation transient is set.
333 + if ( ! $this->database->get_transient( 'betterdocs_maybe_redirect' ) ) {
334 + return;
335 + }
356 336
357 - /**
358 - * Get all the API initialized.
359 - * @return void
360 - */
361 - public function api_initialization() {
362 - $_api_classes = scandir( __DIR__ . DIRECTORY_SEPARATOR . 'REST' );
337 + // Delete the activation transient.
338 + $this->database->delete_transient( 'betterdocs_maybe_redirect' );
363 339
364 - if ( ! empty( $_api_classes ) && is_array( $_api_classes ) ) {
365 - foreach ( $_api_classes as $class ) {
366 - if ( $class == '.' || $class == '..' || strpos( $class, '.' ) === 0) {
367 - continue;
368 - }
340 + if ( ! is_multisite() ) {
341 + $betterdocs_settings = get_option( 'betterdocs_settings' );
342 + if ( $betterdocs_settings ) {
343 + wp_safe_redirect( add_query_arg( [ 'page' => 'betterdocs-settings' ], admin_url( 'admin.php' ) ) );
344 + } else {
345 + wp_safe_redirect( add_query_arg( [ 'page' => 'betterdocs-setup' ], admin_url( 'admin.php' ) ) );
346 + }
347 + }
348 + }
369 349
370 - $classname = basename( $class, '.php' );
371 - $classname = '\\' . __NAMESPACE__ . "\\REST\\$classname";
372 - $_api_class = $this->container->get( $classname );
350 + /**
351 + * Is Pro Plugin Is Installed?
352 + * @return bool
353 + */
354 + public function is_pro_installed() {
355 + return $this->helper->get_plugins( 'betterdocs-pro/betterdocs-pro.php' );
356 + }
373 357
374 - if ( $_api_class instanceof BaseAPI ) {
375 - $_api_class->register();
376 - }
377 - }
378 - }
379 - }
358 + /**
359 + * Is Pro Plugin Is Active?
360 + * @return bool
361 + */
362 + public function pro_file() {
363 + return WP_PLUGIN_DIR . '/betterdocs-pro/betterdocs-pro.php';
364 + }
365 +
366 + public function is_pro_active() {
367 + if ( file_exists( $this->pro_file() ) ) {
368 + return $this->helper->is_plugin_active( 'betterdocs-pro/betterdocs-pro.php' );
369 + }
370 +
371 + return false;
372 + }
373 +
374 + public function chatbot_file() {
375 + return WP_PLUGIN_DIR . '/betterdocs-ai-chatbot/betterdocs-ai-chatbot.php';
376 + }
377 +
378 + public function is_chatbot_active() {
379 + if ( file_exists( $this->chatbot_file() ) ) {
380 + return $this->helper->is_plugin_active( 'betterdocs-ai-chatbot/betterdocs-ai-chatbot.php' );
381 + }
382 +
383 + return false;
384 + }
385 +
386 + public function pro_version() {
387 + if ( ! $this->is_pro_active() ) {
388 + return false;
389 + }
390 +
391 + if ( ! function_exists( 'get_plugin_data' ) ) {
392 + require_once ABSPATH . 'wp-admin/includes/plugin.php';
393 + }
394 +
395 + $plugin_data = get_plugin_data( $this->pro_file() );
396 +
397 + return $plugin_data['Version'];
398 + }
399 +
400 + /**
401 + * Get all the API initialized.
402 + * @return void
403 + */
404 + public function api_initialization() {
405 + $_api_classes = scandir( __DIR__ . DIRECTORY_SEPARATOR . 'REST' );
406 +
407 + if ( ! empty( $_api_classes ) && is_array( $_api_classes ) ) {
408 + foreach ( $_api_classes as $class ) {
409 + if ( $class == '.' || $class == '..' || strpos( $class, '.' ) === 0 ) {
410 + continue;
411 + }
412 +
413 + $classname = basename( $class, '.php' );
414 + $classname = '\\' . __NAMESPACE__ . "\\REST\\$classname";
415 + $_api_class = $this->container->get( $classname );
416 +
417 + if ( $_api_class instanceof BaseAPI ) {
418 + $_api_class->register();
419 + }
420 + }
421 + }
422 + }
423 +
424 + public function is_betterdocs_screen( $hook, $admin_check = true ): bool {
425 + $screens = [
426 + 'toplevel_page_betterdocs-dashboard',
427 + 'toplevel_page_betterdocs-admin',
428 + 'admin_page_betterdocs-admin',
429 + 'betterdocs_page_betterdocs-admin',
430 + 'betterdocs_page_betterdocs-analytics',
431 + 'betterdocs_page_betterdocs-settings',
432 + 'betterdocs_page_betterdocs-faq',
433 + 'betterdocs_page_betterdocs-glossaries',
434 + 'betterdocs_page_betterdocs-ai-chatbot',
435 + ];
436 +
437 + if ( $admin_check ) {
438 + if ( in_array( $hook, $screens ) ) {
439 + return true;
440 + }
441 +
442 + return false;
443 + }
444 +
445 + return false;
446 + }
447 +
448 + public function get_betterdocs_screen() {
449 + $registered_screens = [
450 + 'toplevel_page_betterdocs-dashboard',
451 + 'admin_page_betterdocs-admin',
452 + 'betterdocs_page_betterdocs-admin',
453 + 'betterdocs_page_betterdocs-settings',
454 + 'betterdocs_page_betterdocs-analytics',
455 + 'betterdocs_page_betterdocs-faq',
456 + 'betterdocs_page_betterdocs-glossaries',
457 + 'betterdocs_page_betterdocs-ai-chatbot',
458 + 'edit-docs',
459 + ];
460 +
461 + $current_screen_id = get_current_screen() != null ? get_current_screen()->id : '';
462 +
463 + if ( in_array( $current_screen_id, $registered_screens ) ) {
464 + return $current_screen_id;
465 + }
466 +
467 + return false;
468 + }
380 469 }