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

class-betterdocs.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 1.7.6, at includes/class-betterdocs.php

343 lines 10.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The file that defines the core plugin class
5 *
6 * A class definition that includes attributes and functions used across both the
7 * public-facing side of the site and the admin area.
8 *
9 * @link https://wpdeveloper.net
10 * @since 1.0.0
11 *
12 * @package BetterDocs
13 * @subpackage BetterDocs/includes
14 */
15
16 /**
17 * The core plugin class.
18 *
19 * This is used to define internationalization, admin-specific hooks, and
20 * public-facing site hooks.
21 *
22 * Also maintains the unique identifier of this plugin as well as the current
23 * version of the plugin.
24 *
25 * @since 1.0.0
26 * @package BetterDocs
27 * @subpackage BetterDocs/includes
28 * @author WPDeveloper <support@wpdeveloper.net>
29 */
30 class BetterDocs {
31
32 /**
33 * The loader that's responsible for maintaining and registering all hooks that power
34 * the plugin.
35 *
36 * @since 1.0.0
37 * @access protected
38 * @var BetterDocs_Loader $loader Maintains and registers all hooks for the plugin.
39 */
40 protected $loader;
41
42 /**
43 * The unique identifier of this plugin.
44 *
45 * @since 1.0.0
46 * @access protected
47 * @var string $plugin_name The string used to uniquely identify this plugin.
48 */
49 protected $plugin_name;
50
51 /**
52 * The current version of the plugin.
53 *
54 * @since 1.0.0
55 * @access protected
56 * @var string $version The current version of the plugin.
57 */
58 protected $version;
59
60 /**
61 * Define the core functionality of the plugin.
62 *
63 * Set the plugin name and the plugin version that can be used throughout the plugin.
64 * Load the dependencies, define the locale, and set the hooks for the admin area and
65 * the public-facing side of the site.
66 *
67 * @since 1.0.0
68 */
69 public function __construct() {
70 if ( defined( 'BETTER_DOCUMENTATION_VERSION' ) ) {
71 $this->version = BETTER_DOCUMENTATION_VERSION;
72 } else {
73 $this->version = '1.0.0';
74 }
75 $this->plugin_name = 'betterdocs';
76
77 $this->load_dependencies();
78 $this->set_locale();
79 $this->start_plugin_tracking();
80 $this->define_admin_hooks();
81 $this->define_public_hooks();
82 add_action( 'admin_init', array( $this, 'redirect' ) );
83 add_action( 'wp_ajax_optin_wizard_action_betterdocs', array( $this, 'wizard_action' ) );
84 }
85
86 /**
87 * Load the required dependencies for this plugin.
88 *
89 * Include the following files that make up the plugin:
90 *
91 * - BetterDocs_Loader. Orchestrates the hooks of the plugin.
92 * - BetterDocs_i18n. Defines internationalization functionality.
93 * - BetterDocs_Admin. Defines all hooks for the admin area.
94 * - BetterDocs_Public. Defines all hooks for the public side of the site.
95 *
96 * Create an instance of the loader which will be used to register the hooks
97 * with WordPress.
98 *
99 * @since 1.0.0
100 * @access private
101 */
102 private function load_dependencies() {
103 /**
104 * Quick Setup Wizard
105 */
106 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/setup-wizard/betterdocs-setup-wizard-config.php';
107 /**
108 * The class responsible for orchestrating the actions and filters of the
109 * core plugin.
110 */
111 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-betterdocs-loader.php';
112
113 /**
114 * The class responsible for defining internationalization functionality
115 * of the plugin.
116 */
117 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-betterdocs-i18n.php';
118 require_once BETTERDOCS_DIR_PATH . 'includes/class-betterdocs-usage-tracker.php';
119 /**
120 * The class responsible for defining all actions that occur in the admin area.
121 */
122 require_once BETTERDOCS_ADMIN_DIR_PATH . 'class-betterdocs-admin.php';
123 require_once BETTERDOCS_ADMIN_DIR_PATH . 'includes/class-betterdocs-db.php';
124 require_once BETTERDOCS_ADMIN_DIR_PATH . 'includes/class-betterdocs-metabox.php';
125 require_once BETTERDOCS_ADMIN_DIR_PATH . 'includes/class-betterdocs-settings.php';
126
127 /**
128 * Notice Messages
129 */
130 require_once BETTERDOCS_ADMIN_DIR_PATH . 'includes/class-betterdocs-notice.php';
131
132 /**
133 * The class responsible for defining all actions that occur in the public-facing
134 * side of the site.
135 */
136 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-betterdocs-public.php';
137
138 /**
139 * The functions responsible for betterdocs helpers
140 */
141 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-betterdocs-helpers.php';
142
143 /**
144 * The class responsible for registering docs post type and it's category and tags taxonomy
145 */
146 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-betterdocs-docs-post-type.php';
147
148 /**
149 * The functions responsible for betterdocs shortcodes
150 */
151 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/betterdocs-shortcodes.php';
152
153 /**
154 * The functions responsible for betterdocs breadcrumbs
155 */
156 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/betterdocs-breadcrumbs.php';
157
158 /**
159 * The functions responsible for betterdocs customizer
160 */
161 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/customizer/customizer.php';
162 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/customizer/defaults.php';
163
164 /**
165 * The class responsible for registering widget in elementor and extend single page functionality
166 */
167 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/elementor/class-betterdocs-elementor.php';
168
169 $this->loader = new BetterDocs_Loader();
170 }
171
172 /**
173 * Optional usage tracker
174 *
175 * @since v1.0.0
176 */
177 public function start_plugin_tracking() {
178 $tracker = BetterDocs_Plugin_Usage_Tracker::get_instance( BETTERDOCS_FILE, [
179 'opt_in' => true,
180 'goodbye_form' => true,
181 'item_id' => 'c7b16777b4f1b83f6083'
182 ] );
183 $tracker->set_notice_options(array(
184 'notice' => __( 'Want to help make <strong>BetterDocs</strong> even more awesome? You can get a <strong>10% discount coupon</strong> for Premium extensions if you allow us to track the usage.', 'betterdocs' ),
185 'extra_notice' => __( 'We collect non-sensitive diagnostic data and plugin usage information.
186 Your site URL, WordPress & PHP version, plugins & themes and email address to send you the
187 discount coupon. This data lets us make sure this plugin always stays compatible with the most
188 popular plugins and themes. No spam, I promise.', 'betterdocs' ),
189 ));
190 $tracker->init();
191 }
192
193 public function wizard_action() {
194 if( ! check_ajax_referer( 'betterdocsqswnonce', 'nonce') ) {
195 return;
196 }
197 if( $this->do_wizard_tracking(true, $_POST) ) {
198 wp_send_json_success( 'done' );
199 }
200 wp_send_json_error( 'Something went wrong.' );
201 }
202 public function do_wizard_tracking( $force = false, $data = [] ) {
203 if( ! class_exists( 'BetterDocs_Plugin_Usage_Tracker' ) ) {
204 require_once BETTERDOCS_DIR_PATH . 'includes/class-betterdocs-usage-tracker.php';
205 }
206 $tracker = BetterDocs_Plugin_Usage_Tracker::get_instance( BETTERDOCS_FILE, [
207 'opt_in' => true,
208 'goodbye_form' => true,
209 'item_id' => 'c7b16777b4f1b83f6083'
210 ] );
211 // If the home site hasn't been defined, we just drop out. Nothing much we can do.
212 if ( empty( $tracker::API_URL ) ) {
213 return false;
214 }
215 // Get our data
216 $body = $tracker->get_data();
217 if( isset( $data['admin_email'] ) && ! empty( $data['admin_email'] ) ) {
218 $body['email'] = $data['admin_email'];
219 }
220 // Send the data
221 return $tracker->send_data($body);
222 }
223
224 /**
225 * Define the locale for this plugin for internationalization.
226 *
227 * Uses the BetterDocs_i18n class in order to set the domain and to register the hook
228 * with WordPress.
229 *
230 * @since 1.0.0
231 * @access private
232 */
233 private function set_locale() {
234
235 $plugin_i18n = new BetterDocs_i18n();
236
237 $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );
238
239 }
240
241 /**
242 * Register all of the hooks related to the admin area functionality
243 * of the plugin.
244 *
245 * @since 1.0.0
246 * @access private
247 */
248 private function define_admin_hooks() {
249
250 $plugin_admin = new BetterDocs_Admin( $this->get_plugin_name(), $this->get_version() );
251
252 add_action( 'admin_menu', array( $plugin_admin, 'menu_page') );
253
254 add_action( 'admin_enqueue_scripts', array( $plugin_admin, 'enqueue_styles') );
255 add_action( 'admin_enqueue_scripts', array( $plugin_admin, 'enqueue_scripts') );
256 add_filter( 'parent_file', array( &$plugin_admin, 'highlight_admin_menu'), 10, 2 );
257 global $pagenow;
258 if ( $pagenow == 'edit-tags.php' ) {
259 add_filter( 'submenu_file', array( &$plugin_admin, 'highlight_admin_submenu'), 10, 2);
260 }
261 add_action( 'admin_bar_menu', array( $plugin_admin, 'toolbar_menu'), 32 );
262
263 BetterDocs_Settings::init();
264 }
265
266 /**
267 * Register all of the hooks related to the public-facing functionality
268 * of the plugin.
269 *
270 * @since 1.0.0
271 * @access private
272 */
273 private function define_public_hooks() {
274
275 $plugin_public = new BetterDocs_Public( $this->get_plugin_name(), $this->get_version() );
276
277 $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
278 $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
279
280 }
281
282 /**
283 * Run the loader to execute all of the hooks with WordPress.
284 *
285 * @since 1.0.0
286 */
287 public function run() {
288 $this->loader->run();
289 }
290
291 /**
292 * The name of the plugin used to uniquely identify it within the context of
293 * WordPress and to define internationalization functionality.
294 *
295 * @since 1.0.0
296 * @return string The name of the plugin.
297 */
298 public function get_plugin_name() {
299 return $this->plugin_name;
300 }
301
302 /**
303 * The reference to the class that orchestrates the hooks with the plugin.
304 *
305 * @since 1.0.0
306 * @return BetterDocs_Loader Orchestrates the hooks of the plugin.
307 */
308 public function get_loader() {
309 return $this->loader;
310 }
311
312 /**
313 * Retrieve the version number of the plugin.
314 *
315 * @since 1.0.0
316 * @return string The version number of the plugin.
317 */
318 public function get_version() {
319 return $this->version;
320 }
321
322 public function is_pro_active(){
323 return defined( 'BETTERDOCS_PRO_VERSION' );
324 }
325
326 public function redirect() {
327 // Bail if no activation transient is set.
328 if ( ! get_transient( '_betterdocs_meta_activation_notice' ) ) {
329 return;
330 }
331 // Delete the activation transient.
332 delete_transient( '_betterdocs_meta_activation_notice' );
333
334 if ( ! is_multisite() ) {
335 // Redirect to the welcome page.
336 wp_safe_redirect( add_query_arg( array(
337 'page' => 'betterdocs-setup'
338 ), admin_url( ! $this->is_pro_active() ? 'edit.php?post_type=docs' : 'admin.php?page=betterdocs-setup' ) ) );
339 }
340 }
341
342 }
343