'', 'url' => '', 'cx_ui_instance' => false, 'plugin_data' => array( 'slug' => false, 'version' => '', ), ); /** * [$cx_ui_instance description] * @var boolean */ public $cx_ui_instance = false; /** * [$plugin_slug description] * @var boolean */ public $plugin_data = false; /** * [$assets_enqueued description] * @var boolean */ protected $assets_enqueued = false; /** * [$registered_plugins description] * @var array */ public $registered_plugins = array(); /** * Jet_Dashboard constructor. * * @since 1.0.0 * @access public * @return void */ public function __construct() { $this->load_files(); add_action( 'admin_menu', array( $this, 'register_page' ), 21 ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); add_action( 'init', array( $this, 'init_managers' ), -998 ); } /** * [load_files description] * @return [type] [description] */ public function load_files() { require $this->path . 'inc/utils.php'; require $this->path . 'inc/license-manager.php'; require $this->path . 'inc/plugin-manager.php'; require $this->path . 'inc/module-manager.php'; require $this->path . 'inc/modules/base.php'; require $this->path . 'inc/modules/welcome/module.php'; require $this->path . 'inc/modules/license/module.php'; } /** * [init description] * @return [type] [description] */ public function init( $args = [] ) { $args = wp_parse_args( $args, $this->default_args ); $this->path = ! empty( $args['path'] ) ? $args['path'] : false; $this->url = ! empty( $args['url'] ) ? $args['url'] : false; if ( ! $this->path || ! $this->url || ! $args['cx_ui_instance'] ) { wp_die( 'Jet_Dashboard not initialized. Module URL, Path, UI instance and plugin data should be passed into constructor', 'Jet_Dashboard Error' ); } $this->cx_ui_instance = $args['cx_ui_instance']; $this->plugin_data = $args['plugin_data']; $this->register_plugin( $args['plugin_data']['file'], $args['plugin_data'] ); } /** * [init_managers description] * @param array $args [description] * @return [type] [description] */ public function init_managers() { $this->module_manager = new Module_Manager(); $this->license_manager = new License_Manager(); $this->plugin_manager = new Plugin_Manager(); } /** * Register add/edit page * * @return void */ public function register_page() { add_menu_page( 'JetPlugins', 'JetPlugins', 'manage_options', $this->dashboard_slug, array( $this, 'render_dashboard' ), "data:image/svg+xml,%3Csvg width='18' height='15' viewBox='0 0 18 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.0767 0.00309188C17.6897 -0.0870077 18.6099 1.81257 17.5381 3.02007L7.99824 13.7682C6.88106 15.0269 4.79904 14.2223 4.82092 12.5403L4.87766 8.17935C4.88509 7.60797 4.62277 7.06644 4.16961 6.71768L0.710961 4.05578C-0.623014 3.02911 0.0373862 0.899003 1.71878 0.805085L16.0767 0.00309188Z' fill='white'/%3E%3C/svg%3E%0A", 59 ); add_submenu_page( 'jet-dashboard', esc_html__( 'Dashboard', 'jet-tricks' ), esc_html__( 'Dashboard', 'jet-tricks' ), 'manage_options', 'jet-dashboard' ); } /** * Render installation wizard page * * @return void */ public function render_dashboard() { include $this->get_view( 'common/dashboard' ); } /** * Enqueue builder assets * * @return void */ public function enqueue_assets( $hook ) { if ( 'toplevel_page_' . $this->dashboard_slug !== $hook ) { return; } if ( $this->assets_enqueued ) { return; } $this->cx_ui_instance->enqueue_assets(); /** * Fires before enqueue page assets */ do_action( 'jet-dashboard/before-enqueue-assets', $this ); /** * Fires before enqueue page assets with dynamic subpage name */ do_action( 'jet-dashboard/before-enqueue-assets/' . $this->get_subpage(), $this ); wp_enqueue_style( 'jet-dashboard-admin-css', $this->url . 'assets/css/jet-dashboard-admin.css', false, $this->version ); wp_enqueue_script( 'jet-dashboard-script', $this->url . 'assets/js/jet-dashboard.js', array( 'cx-vue-ui' ), $this->version, true ); wp_localize_script( 'jet-dashboard-script', 'JetDashboardPageConfig', apply_filters( 'jet-dashboard/js-page-config', array( 'headerTitle' => '', 'mainPage' => $this->get_dashboard_page_url( $this->get_initial_page() ), 'page' => false, 'module' => $this->get_subpage(), 'nonce' => wp_create_nonce( $this->dashboard_slug ), 'ajaxUrl' => esc_url( admin_url( 'admin-ajax.php' ) ), 'licenseList' => array_values( Utils::get_license_list() ), 'allJetPlugins' => $this->plugin_manager->get_plugin_data_list(), ) ) ); add_action( 'admin_footer', array( $this, 'print_vue_templates' ), 0 ); $this->assets_enqueued = true; } /** * Print components templates * * @return void */ public function print_vue_templates() { $templates = apply_filters( 'jet-dashboard/js-page-templates', array( 'header' => 'common/header', ), $this->get_subpage() ); foreach ( $templates as $name => $path ) { ob_start(); include $this->get_view( $path ); $content = ob_get_clean(); printf( '', $name, $content ); } } /** * [get_registered_plugins description] * @return [type] [description] */ public function get_registered_plugins() { return $this->registered_plugins; } /** * [get_registered_plugins description] * @return [type] [description] */ public function register_plugin( $plugin_slug = false, $plugin_data = array() ) { if ( ! array_key_exists( $plugin_slug, $this->registered_plugins ) ) { $this->registered_plugins[ $plugin_slug ] = $plugin_data; } return false; } /** * [get_dashboard_version description] * @return [type] [description] */ public function get_dashboard_path() { return $this->path; } /** * [get_dashboard_version description] * @return [type] [description] */ public function get_dashboard_url() { return $this->url; } /** * [get_dashboard_version description] * @return [type] [description] */ public function get_dashboard_version() { return $this->version; } /** * Returns path to view file * * @param [type] $path [description] * @return [type] [description] */ public function get_view( $path ) { return apply_filters( 'jet-dashboard/get-view', $this->path . 'views/' . $path . '.php' ); } /** * Returns current subpage slug * * @return string */ public function get_subpage() { if ( null === $this->subpage ) { $this->subpage = isset( $_GET['sub'] ) ? esc_attr( $_GET['sub'] ) : $this->get_initial_page(); } return $this->subpage; } /** * Returns wizard initial subpage * * @return string */ public function get_initial_page() { return 'license-page'; } /** * Check if dashboard page is currently displayiing * * @return boolean [description] */ public function is_dashboard_page() { return ( ! empty( $_GET['page'] ) && $this->dashboard_slug === $_GET['page'] ); } /** * [get_admin_url description] * @return [type] [description] */ public function get_dashboard_page_url( $subpage = null, $args = array() ) { $page_args = array( 'page' => $this->dashboard_slug, 'sub' => $subpage, ); if ( ! empty( $args ) ) { $page_args = array_merge( $page_args, $args ); } return add_query_arg( $page_args, admin_url( 'admin.php' ) ); } /** * Returns the instance. * * @since 1.0.0 * @access public * @return object */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } }