HEX
Server: Apache
System: Linux ebs-107629 5.10.0-14-amd64 #1 SMP Debian 5.10.113-1 (2022-04-29) x86_64
User: shredder (65669)
PHP: 8.3.8
Disabled: link,symlink
Upload Files
File: /home/wwwroot/shredder/wwwroot/wp-content/plugins/wp-table-builder/inc/core/class-init.php
<?php

namespace WP_Table_Builder\Inc\Core;

use WP_Table_Builder as NS;
use WP_Table_Builder\Inc\Admin as Admin;
use WP_Table_Builder\Inc\Admin\Accessibility;
use WP_Table_Builder\Inc\Admin\Managers\Gutenberg_Block_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Icon_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Notification_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Screen_Options_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Scroll_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Upsells_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Version_Sync_Manager;
use WP_Table_Builder\Inc\Admin\Managers\What_Is_New_Manager;
use WP_Table_Builder\Inc\Admin\Style_Pass;
use WP_Table_Builder\Inc\Frontend as Frontend;
use WP_Table_Builder\Inc\Admin\Managers\Elements_Manager as Elements_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Table_Elements_Manager as Table_Elements_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Controls_Manager as Controls_Manager;
use WP_Table_Builder\Inc\Admin\Managers\Settings_Manager as Settings_Manager;
use function add_action;

/**
 * The core plugin class.
 * Defines internationalization, admin-specific hooks, and public-facing site hooks.
 *
 * @link       http://wptablebuilder.com/
 * @since      1.0.0
 *
 * @author     Imtiaz Rayhan
 */
class Init {

	/**
	 * Instance to instantiate object.
	 *
	 * @var $instance
	 */
	protected static $instance;

	/**
	 * The loader that's responsible for maintaining and registering all hooks that power
	 * the plugin.
	 *
	 * @var      Loader $loader Maintains and registers all hooks for the plugin.
	 */
	protected $loader;

	/**
	 * The name of the plugin.
	 *
	 * @since    1.0.0
	 * @access   protected
	 * @var      string $plugin_name The name of the plugin.
	 */
	protected $plugin_name;

	/**
	 * The unique identifier of this plugin.
	 *
	 * @since    1.0.0
	 * @access   protected
	 * @var      string $plugin_basename The string used to uniquely identify this plugin.
	 */
	protected $plugin_basename;

	/**
	 * The current version of the plugin.
	 *
	 * @since    1.0.0
	 * @access   protected
	 * @var      string $version The current version of the plugin.
	 */
	protected $version;

	/**
	 * The text domain of the plugin.
	 *
	 * @since    1.0.0
	 * @access   protected
	 * @var      string $plugin_text_domain The text domain of the plugin.
	 */
	protected $plugin_text_domain;

	/**
	 * Initialize and define the core functionality of the plugin.
	 */

	/**
	 * Items manager.
	 *
	 * Holds the plugin items manager.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @var elements_manager
	 */
	public $elements_manager;

	/**
	 * Table elements manager.
	 *
	 * Holds the plugin Table Elements manager.
	 *
	 * @since 1.2.1
	 * @access public
	 *
	 * @var elements_manager
	 */
	public $table_elements_manager;

	/**
	 * Controls manager.
	 *
	 * Holds the plugin controls manager.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @var Controls_Manager
	 */
	public $controls_manager;


	/**
	 * Settings manager.
	 *
	 * Holds the plugin settings manager
	 *
	 * @access public
	 *
	 * @var Settings_Manager
	 */
	public $settings_manager;

	/**
	 * Admin menu handler.
	 * @var object
	 */
	public $admin_menu;

	/**
	 * Icon manager instance
	 *
	 * @private
	 * @var Icon_Manager
	 */
	private $icon_manager;

	/**
	 * Screen options manager instance.
	 *
	 * @var Screen_Options_Manager
	 */
	public $screen_options_manager;

	private function __construct() {

		$this->plugin_name        = NS\WP_TABLE_BUILDER;
		$this->version            = NS\PLUGIN_VERSION;
		$this->plugin_basename    = NS\PLUGIN_BASENAME;
		$this->plugin_text_domain = NS\PLUGIN_TEXT_DOMAIN;

		$this->load_dependencies();
		$this->set_locale();
		$this->table_export();
		$this->define_admin_hooks();
		$this->define_public_hooks();
		$this->table_import();
		$this->table_preview();

		if ( isset( $_GET['page'] ) && sanitize_text_field( $_GET['page'] ) == 'wptb-builder' ) {
			$this->elements_resources();
		}
	}

	/**
	 * Singleton pattern, making only one instance of the class.
	 *
	 * @since 1.00
	 */
	public static function instance() {
		if ( ! isset( self::$instance ) ) {
			$className      = __CLASS__;
			self::$instance = new $className;
		}

		return self::$instance;
	}

	/**
	 * Loads the following required dependencies for this plugin.
	 *
	 * - Loader - Orchestrates the hooks of the plugin.
	 * - Internationalization_I18n - Defines internationalization functionality.
	 * - Admin - Defines all hooks for the admin area.
	 * - Frontend - Defines all hooks for the public side of the site.
	 * - Settings - Setup setting manager for menus and plugin wide settings handling
	 *
	 * @access    private
	 */
	private function load_dependencies() {
		$this->loader = new Loader();

		// initialize version sync manager
		Version_Sync_Manager::init();

		// initialize settings manager
		$this->settings_manager = new Settings_Manager( 'wp_table_builder_settings', $this->loader );

		// initialize screen options manager
		$this->screen_options_manager = new Screen_Options_Manager();

		// initialize icon manager instance
		$icon_dir_path = trailingslashit( NS\WP_TABLE_BUILDER_DIR ) . 'inc/frontend/views/icons';
		$icon_dir_url  = trailingslashit( NS\WP_TABLE_BUILDER_URL ) . 'inc/frontend/views/icons';

		$this->icon_manager = new Icon_Manager( $icon_dir_path, $icon_dir_url );

		// initialize gutenberg block manager
		new Gutenberg_Block_Manager( 'wptb/table-block' );

		// wait plugins loaded action hook to check availability of pro version
		add_action( 'plugins_loaded', function () {
			// initialize upsells manager
			Upsells_Manager::init();
		}, 99 );

		// initialize notification manager
		Notification_Manager::init();

		// initialize what is new manager
		What_Is_New_Manager::init();

		// initialize scroll manager
		Scroll_Manager::init( [], 'WP_Table_Builder\Inc\Admin\Managers\Scroll_Manager' );
	}

	/**
	 * Define the locale for this plugin for internationalization.
	 *
	 * Uses the Internationalization_I18n class in order to set the domain and to register the hook
	 * with WordPress.
	 *
	 * @access    private
	 */
	private function set_locale() {

		$plugin_i18n = new Internationalization_I18n( $this->plugin_text_domain );

		$this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );

	}

	/**
	 * Register all of the hooks related to the admin area functionality
	 * of the plugin.
	 *
	 * @access    private
	 */
	private function define_admin_hooks() {

		$plugin_admin = new Admin\Admin( $this->get_plugin_name(), $this->get_version(), $this->get_plugin_text_domain() );

		$tables           = new Admin\Tables;
		$this->admin_menu = new Admin\Admin_Menu;
		//$import = new Admin\Import;

		// accessibility initialization
		new Accessibility();

		// style pass initialization
		Style_Pass::init();

		$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
		$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' );
		$this->loader->add_action( 'admin_notices', $plugin_admin, 'review_notice' );
		$this->loader->add_action( 'wp_ajax_wptbReviewNoticeHide', $plugin_admin, 'wptb_hide_review_notify' );

//		add_action( 'admin_head', [ $this, 'content_width_header' ] );
	}

	/**
	 * Get icon manager instance.
	 *
	 * @return Icon_Manager
	 */
	public function get_icon_manager() {
		return $this->icon_manager;
	}

	/**
	 * Sets table max-width property.
	 *
	 * Width will be set according to global content_width variable that is set by user's current theme.If not found, a default value of 850px will be used.
	 */
	public function content_width_header() {
		// global variable set by themes
		global $content_width;

		// only change the content width if it is set, else use default css value
		if ( isset( $content_width ) ) {
			// currently table element wrappers have different class names for admin and front-end areas, here deciding which one to use depending on the current called action hook
			$class_name = current_filter() === 'admin_head' ? 'wptb-table-setup' : 'wptb-table-container';

			$style_tag = <<<STYLE
<style>
	.${class_name} {
		max-width: ${content_width}px;
	}
</style>
STYLE;
			echo $style_tag;
		}
	}

	/**
	 * Register all of the hooks related to the public-facing functionality
	 * of the plugin.
	 *
	 * @access    private
	 */
	private function define_public_hooks() {

		$plugin_public = new Frontend\Frontend( $this->get_plugin_name(), $this->get_version(), $this->get_plugin_text_domain() );

		// @deprecated
//		$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );

//		$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_footer_scripts' );

//		add_action( 'wp_head', [ $this, 'content_width_header' ] );
	}

	/**
	 * Сreates an instance of the class that is intended to display
	 * the table preview
	 *
	 * @access    private
	 */
	private function table_preview() {
		$this->loader->add_action( 'plugins_loaded', 'WP_Table_Builder\Inc\Admin\Preview', 'instance' );
	}

	/**
	 * Сreates an instance of the class that is intended to display
	 * the import
	 *
	 * @access    private
	 */
	private function table_import() {
		$this->loader->add_action( 'plugins_loaded', 'WP_Table_Builder\Inc\Admin\Import', 'instance' );
	}

	private function table_export() {
		$this->loader->add_action( 'plugins_loaded', 'WP_Table_Builder\Inc\Admin\Export', 'get_instance' );
	}

	/**
	 * Run the loader to execute all of the hooks with WordPress.
	 */
	public function run() {
		$this->loader->run();
	}

	/**
	 * The name of the plugin used to uniquely identify it within the context of
	 * WordPress and to define internationalization functionality.
	 */
	public function get_plugin_name() {
		return $this->plugin_name;
	}

	/**
	 * The reference to the class that orchestrates the hooks with the plugin.
	 *
	 * @return    Loader    Orchestrates the hooks of the plugin.
	 */
	public function get_loader() {
		return $this->loader;
	}

	/**
	 * Retrieve the version number of the plugin.
	 *
	 * @return    string    The version number of the plugin.
	 * @since     1.0.0
	 */
	public function get_version() {
		return $this->version;
	}

	/**
	 * Retrieve the text domain of the plugin.
	 *
	 * @return    string    The text domain of the plugin.
	 * @since     1.0.0
	 */
	public function get_plugin_text_domain() {
		return $this->plugin_text_domain;
	}

	/**
	 * Run all the necessary resources for Elements and Controls
	 *
	 * @since   1.1.5
	 */
	public function elements_resources() {
		$this->elements_manager       = new Elements_Manager();
		$this->table_elements_manager = new Table_Elements_Manager();
		$this->controls_manager       = new Controls_Manager();

		add_action( 'admin_footer', function () {
			$this->elements_manager->output_elements_templates();
			$this->elements_manager->output_directories_icons();
			$this->elements_manager->output_elements_scripts();
			$this->table_elements_manager->output_elements_scripts();
			$this->controls_manager->output_controls_templates();
			$this->controls_manager->output_control_stacks();
		} );
	}
}