/home/smartbloks/public_html/help.smartbloks.ai/wp-content/plugins/eazydocs/eazydocs.php
<?php
/**
* Plugin Name: EazyDocs
* Description: A powerful & beautiful documentation, knowledge base builder plugin.
* Plugin URI: https://spider-themes.net/eazydocs
* Author: spider-themes
* Author URI: https://spider-themes.net/eazydocs
* Version: 2.5.3
* Requires at least: 5.0
* Requires PHP: 7.4
* Text Domain: eazydocs
* License: GPL2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
if ( ! defined( 'ABSPATH' ) ) {
exit();
}
if ( function_exists( 'eaz_fs' ) ) {
eaz_fs()->set_basename( false, __FILE__ );
} else {
// DO NOT REMOVE THIS IF, IT IS ESSENTIAL FOR THE `function_exists` CALL ABOVE TO PROPERLY WORK.
if ( ! function_exists( 'eaz_fs' ) ) {
// Create a helper function for easy SDK access.
function eaz_fs() {
global $eaz_fs;
if ( ! isset( $eaz_fs ) ) {
// Include Freemius SDK.
require_once dirname( __FILE__ ) . '/includes/fs/start.php';
$eaz_fs = fs_dynamic_init(
[
'id' => '10290',
'slug' => 'eazydocs',
'premium_slug' => 'eazydocs-pro',
'type' => 'plugin',
'public_key' => 'pk_8474e4208f0893a7b28c04faf5045',
'is_premium' => false,
'is_premium_only' => false,
'has_addons' => false,
'has_paid_plans' => true,
'trial' => [
'days' => 14,
'is_require_payment' => true,
],
'menu' => [
'slug' => 'eazydocs',
'contact' => false,
'support' => false,
'first-path' => 'admin.php?page=eazydocs'
],
]
);
}
return $eaz_fs;
}
// Init Freemius.
eaz_fs()->add_filter( 'deactivate_on_activation', '__return_false' );
eaz_fs()->add_filter( 'hide_freemius_powered_by', '__return_true' );
// Signal that SDK was initiated.
do_action( 'eaz_fs_loaded' );
}
}
use eazyDocs\Post_Types;
// Make sure the same class is not loaded.
if ( ! class_exists( 'EazyDocs' ) ) {
require_once __DIR__ . '/vendor/autoload.php';
/**
* Class EazyDocs
*/
class EazyDocs {
// Default constants
const version = '2.5.3';
public $plugin_path;
public $theme_dir_path;
public static $dir = '';
/**
* Constructor.
*
* Initialize the EazyDocs plugin
*
* @access public
*/
public function __construct() {
$this->define_constants();
// Include core files in action hook.
$this->core_includes();
register_activation_hook( __FILE__, [ $this, 'activate' ] );
add_action( 'init', [ $this, 'i18n' ] );
add_action( 'init', [ $this, 'init_hooked' ] );
add_action( 'plugins_loaded', [ $this, 'init_plugin' ] );
// Add the setup wizard
add_action('admin_init', [ $this, 'ezd_get_setup_wizard_init' ]);
if ( eaz_fs()->is_plan( 'promax' ) ) {
add_action( 'admin_notices', [ $this, 'database_not_found' ] );
}
// Added Documentation links to plugin row meta
add_filter('plugin_row_meta',[ $this, 'eazydocs_row_meta' ], 10, 2);
}
// get the instance of the EazyDocs class
public static function get_instance() {
static $instance = null;
if ( null === $instance ) {
$instance = new EazyDocs();
}
return $instance;
}
/**
* Load Textdomain
*
* Load plugin localization files.
*
* @access public
*/
public function i18n() {
load_plugin_textdomain( 'eazydocs', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
}
/**
* Include Files
*
* Load core files required to run the plugin.
*
* @access public
*/
public function core_includes() {
require_once __DIR__ . '/includes/functions.php';
// Notices
require_once __DIR__ . '/includes/notices/deactivate-other-doc-plugins.php';
require_once __DIR__ . '/includes/notices/asking-for-review.php';
if ( eaz_fs()->is_plan( 'promax' ) ) {
require_once __DIR__ . '/includes/notices/update-database.php';
}
require_once __DIR__ . '/includes/sidebars.php';
require_once __DIR__ . '/includes/Frontend/Ajax.php';
require_once __DIR__ . '/includes/Frontend/Mailer.php';
require_once __DIR__ . '/includes/Post_Types.php';
require_once __DIR__ . '/includes/One_page_doc_type.php';
require_once __DIR__ . '/includes/Frontend/Shortcode.php';
require_once __DIR__ . '/includes/Frontend/post-views.php';
require_once __DIR__ . '/includes/Frontend/search-counts.php';
require_once __DIR__ . '/includes/Walker_Docs_Onepage.php';
require_once __DIR__ . '/includes/Walker_Docs_Onepage_Fullscreen.php';
// Options
require_once __DIR__ . '/vendor/csf/classes/setup.class.php';
require_once __DIR__ . '/includes/Admin/options/settings-options.php';
if ( ezd_is_premium() ) {
require_once __DIR__ . '/includes/Admin/options/taxonomy-options.php';
}
if ( ezd_unlock_themes() ) {
require_once __DIR__ . '/shortcodes/reference.php';
require_once __DIR__ . '/shortcodes/conditional_data.php';
}
if ( ezd_is_premium() ) {
// Remove docs slug from URLs
$docs_url = ezd_get_opt('docs-url-structure', 'custom-slug');
$permalink = get_option('permalink_structure');
if ( $docs_url == 'post-name' ) {
if ( empty ( $permalink == '' || $permalink == '/archives/%post_id%' ) ) {
require_once __DIR__ . '/includes/Root_Conversion.php';
}
}
}
// Blocks
require_once __DIR__ . '/blocks.php';
}
/**
* Define constants
*/
public function define_constants() {
define( 'EAZYDOCS_VERSION', self::version );
define( 'EAZYDOCS_FILE', __FILE__ );
define( 'EAZYDOCS_PATH', __DIR__ );
define( 'EAZYDOCS_URL', plugins_url( '', EAZYDOCS_FILE ) );
define( 'EAZYDOCS_ASSETS', EAZYDOCS_URL . '/assets' );
define( 'EAZYDOCS_FRONT_CSS', EAZYDOCS_URL . '/assets/css/frontend' );
define( 'EAZYDOCS_IMG', EAZYDOCS_URL . '/assets/images' );
define( 'EAZYDOCS_VEND', EAZYDOCS_URL . '/assets/vendors' );
}
/**
* Initializes a singleton instances
*
* @return void
*/
public static function init() {
static $instance = false;
if ( ! $instance ) {
$instance = new self();
}
return $instance;
}
/**
* Initializes the plugin based on the locations
*
* @return void
*/
public function init_plugin() {
$this->theme_dir_path = apply_filters( 'eazydocs_theme_dir_path', 'eazydocs/' );
if ( is_admin() ) {
new eazyDocs\Admin\Admin();
new eazyDocs\Admin\Create_Post();
new eazyDocs\Admin\Delete_Post();
new eazyDocs\Admin\Assets();
new eazyDocs\One_Page();
new eazyDocs\Edit_OnePage();
} elseif ( ! is_admin() ) {
new eazyDocs\Frontend\Frontend();
new eazyDocs\Frontend\Assets();
new eazyDocs\Frontend\Shortcode();
}
new eazyDocs\Elementor\Widgets();
}
public function init_hooked() {
new eazyDocs\Frontend\Ajax();
}
/**
* Do stuff upon plugin activation
*/
public function activate() {
//Insert the installation time into the database
$installed = get_option( 'eazyDocs_installed' );
if ( ! $installed ) {
update_option( 'eazyDocs_installed', time() );
}
update_option( 'EazyDocs_version', EAZYDOCS_VERSION );
// Insert the documentation page into the database if not exists
if ( ! ezd_get_page_by_title( 'Documentation' ) ) {
// Create page object
$docs_page = [
'post_title' => wp_strip_all_tags( 'Documentation' ),
'post_content' => '[eazydocs]',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'page',
];
wp_insert_post( $docs_page );
}
if ( eaz_fs()->is_plan( 'promax' ) ) {
$this->create_analytics_db_tables();
}
// Update the option when the setup wizard is activated
update_option('ezd_get_setup_wizard', true);
}
// Redirect to the setup wizard page
public function ezd_get_setup_wizard_init() {
// Check if the plugin has been activated
$opt = get_option('eazydocs_settings');
$setup_wizard = $opt['setup_wizard_completed'] ?? '';
if ( get_option('ezd_get_setup_wizard') && $setup_wizard == '' ) {
// Redirect to the setup wizard page
wp_safe_redirect(admin_url('admin.php?page=eazydocs-initial-setup'));
// Remove the activation flag
delete_option('ezd_get_setup_wizard');
}
}
/**
* Create database table if not exists
* Insert search keywords table and search key logs table into the database if not exists
*/
public function create_analytics_db_tables() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$search_keyword = $wpdb->prefix . 'eazydocs_search_keyword';
$search_logs = $wpdb->prefix . 'eazydocs_search_log';
$view_logs = $wpdb->prefix . 'eazydocs_view_log';
// Use table names directly in SQL since these are not user inputs
$sql = "CREATE TABLE {$search_keyword} (
id bigint(9) NOT NULL AUTO_INCREMENT,
keyword varchar(255) NOT NULL,
UNIQUE KEY id (id)
) {$charset_collate};";
$sql2 = "CREATE TABLE {$search_logs} (
id bigint(9) NOT NULL AUTO_INCREMENT,
keyword_id bigint(255) NOT NULL references {$search_keyword}(id),
count mediumint(255) NOT NULL,
not_found_count mediumint(9) NOT NULL,
created_at datetime NOT NULL,
UNIQUE KEY id (id)
) {$charset_collate};";
$sql3 = "CREATE TABLE {$view_logs} (
id bigint(9) NOT NULL AUTO_INCREMENT,
post_id bigint(255) NOT NULL,
count mediumint(255) NOT NULL,
created_at datetime NOT NULL,
UNIQUE KEY id (id)
) {$charset_collate};";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
dbDelta( $sql2 );
dbDelta( $sql3 );
global $wpdb;
// Check if the tables are created
// @codingStandardsIgnoreLine WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$keyword_exists = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $search_keyword ) );
// @codingStandardsIgnoreLine WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$logs_exists = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $search_logs ) );
// @codingStandardsIgnoreLine WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$view_exists = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $view_logs ) );
if ( $keyword_exists !== $search_keyword || $logs_exists !== $search_logs || $view_exists !== $view_logs ) {
// Send notification to user
$this->database_not_found();
}
}
/**
* Database not found
*/
function database_not_found() {
global $wpdb;
$table_name = $wpdb->prefix . 'eazydocs_search_keyword';
$table_name2 = $wpdb->prefix . 'eazydocs_search_log';
$table_name3 = $wpdb->prefix . 'eazydocs_view_log';
// Suppress direct query warnings since checking table existence requires direct queries
// @codingStandardsIgnoreLine WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$keyword_exists = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name ) );
// @codingStandardsIgnoreLine WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$logs_exists = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name2 ) );
// @codingStandardsIgnoreLine WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$view_exists = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name3 ) );
if ( $keyword_exists != $table_name || $logs_exists != $table_name2 || $view_exists != $table_name3 ) {
?>
<div class="notice notice-error is-dismissible eazydocs_table_error">
<p><?php esc_html_e( 'EazyDocs database needs an update. Please click the Update button to update your database.', 'eazydocs' ); ?></p>
<form method="get">
<input type="hidden" name="eazydocs_table_create" value="1">
<input type="submit" class="button button-primary" value="<?php esc_html_e( 'Update Database', 'eazydocs' ); ?>">
</form>
</div>
<?php
}
}
/**
* Get the plugin url.
*
* @return string
*/
public function plugin_url() {
if ( $this->plugin_url ) {
return $this->plugin_url;
}
return $this->plugin_url = untrailingslashit( plugins_url( '/', __FILE__ ) );
}
/**
* Get the plugin path.
*
* @return string
*/
public function plugin_path() {
if ( $this->plugin_path ) {
return $this->plugin_path;
}
return $this->plugin_path = untrailingslashit( plugin_dir_path( __FILE__ ) );
}
/**
* Get the template path.
*
* @return string
*/
public function template_path() {
return $this->plugin_path() . '/templates/';
}
/**
* Documentation links to plugin row meta
*/
public function eazydocs_row_meta($links, $file) {
// Check if this is your plugin
if (plugin_basename(__FILE__) === $file) {
// Add your custom links
$plugin_links = array(
'<a href="https://helpdesk.spider-themes.net/docs/eazydocs-wordpress-plugin/" target="_blank">Documentation</a>'
);
// Merge the custom links with the existing links
$links = array_merge($links, $plugin_links);
}
return $links;
}
// end
}
}
/**
* @return EazyDocs|false
*/
if ( ! function_exists( 'eazydocs' ) ) {
/**
* Load eazydocs
*
* Main instance of eazydocs
*
*/
function eazydocs() {
return EazyDocs::init();
}
/**
* Kick of the plugin
*/
eazydocs();
}