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