PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.6.1
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.6.1
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / includes / Plugin.php

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

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