PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.0.0
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.0.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
betterdocs / includes / Plugin.php

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

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