capability) || AdminHelper::is_pro_installed()) { return; } // SVG icon (base64 encoded) $icon_svg = 'data:image/svg+xml;base64,' . base64_encode(' '); add_menu_page( __('Divi Torque', 'divitorque'), __('Divi Torque', 'divitorque'), $this->capability, $this->menu_slug, [$this, 'render_app'], $icon_svg, 130 ); add_submenu_page( $this->menu_slug, __('Dashboard', 'divitorque'), __('Dashboard', 'divitorque'), $this->capability, $this->menu_slug, array($this, 'render_app') ); add_submenu_page( $this->menu_slug, __('Modules', 'divitorque'), __('Modules', 'divitorque'), $this->capability, "{$this->menu_slug}&path=module-manager", [$this, 'render_app'] ); // add_submenu_page( // $this->menu_slug, // __('Free vs Pro', 'divitorque'), // __('Free vs Pro', 'divitorque'), // $this->capability, // "{$this->menu_slug}&path=free-vs-pro", // [$this, 'render_app'] // ); } public function render_app() { $this->enqueue_scripts(); echo '
'; } public function enqueue_scripts() { $manifest_path = DIVI_TORQUE_LITE_DIR . 'assets/mix-manifest.json'; if (!file_exists($manifest_path)) { return; } $manifest = json_decode(file_get_contents($manifest_path), true); if (!$manifest) { return; } $assets_url = DIVI_TORQUE_LITE_URL . 'assets'; $dashboard_js = $assets_url . $manifest['/admin/js/dashboard.js']; $dashboard_css = $assets_url . $manifest['/admin/css/dashboard.css']; wp_enqueue_script( 'divi-torque-lite-dashboard', $dashboard_js, $this->wp_deps(), DIVI_TORQUE_LITE_VERSION, true ); wp_enqueue_style( 'divi-torque-lite-dashboard', $dashboard_css, ['wp-components'], DIVI_TORQUE_LITE_VERSION ); $localize = [ 'root' => esc_url_raw(get_rest_url()), 'admin_slug' => $this->menu_slug, 'nonce' => wp_create_nonce('wp_rest'), 'assetsPath' => esc_url_raw($assets_url), 'version' => DIVI_TORQUE_LITE_VERSION, 'module_info' => ModulesManager::get_all_modules(), 'pro_module_info' => ModulesManager::get_all_pro_modules(), 'module_icon_path' => DIVI_TORQUE_LITE_URL . 'assets/imgs/icons', 'isProInstalled' => AdminHelper::is_pro_installed(), 'upgradeLink' => 'https://divitorque.com/pricing-lifetime/?utm_source=divi-torque-lite&utm_medium=wp-admin&utm_campaign=upgrade-to-pro&utm_content=menu-button', 'currentVersion' => DIVI_TORQUE_LITE_VERSION, ]; wp_localize_script('divi-torque-lite-dashboard', 'diviTorqueLite', $localize); } public function admin_enqueue_scripts() { wp_enqueue_style( 'divi-torque-lite-admin', DIVI_TORQUE_LITE_URL . 'assets/admin/css/admin.css', [], DIVI_TORQUE_LITE_VERSION ); } public function wp_deps() { return [ 'react', 'wp-api', 'wp-i18n', 'lodash', 'wp-components', 'wp-element', 'wp-api-fetch', 'wp-core-data', 'wp-data', 'wp-dom-ready', ]; } private function icon_url() { return 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0yNTAgMEMzODguMDcxIDAgNTAwIDExMS45MjkgNTAwIDI1MEM1MDAgMzg4LjA3MSAzODguMDcxIDUwMCAyNTAgNTAwQzExMS45MjkgNTAwIDAgMzg4LjA3MSAwIDI1MEMwIDExMS45MjkgMTExLjkyOSAwIDI1MCAwWk0yNDguMTA5IDExMEMyMTkuOTUyIDExMCAxOTQuMDA0IDExOC4xNTUgMTcxLjkyIDEzMS43NDdDMTQ3LjA3NiAxNDcuNTE0IDEyNy4yIDE3MC4zNDkgMTE2LjE1OCAxOTcuNTMzQzExNC41MDIgMjAyLjQyNiAxMTEuNzQxIDIxMC41ODIgMTEwLjA4NSAyMTYuNTYyQzEwOS41MzMgMjE5LjI4MSAxMTEuNzQxIDIyMS45OTkgMTE0LjUwMiAyMjIuNTQzQzExNy44MTUgMjIzLjA4NyAxMjAuNTc1IDIyMS40NTYgMTIxLjEyNyAyMTguNzM3QzEyMS42NzkgMjE2LjU2MyAxMjMuMzM1IDIxMi4yMTUgMTIzLjMzNiAyMTEuNjdDMTI0LjQ0IDIwOC45NTEgMTI3LjIgMjA3LjMyIDEyOS45NjEgMjA4LjQwN0MxMzIuMTY5IDIwOS40OTUgMTMzLjgyNSAyMTEuNjcgMTMzLjgyNSAyMTMuODQ1QzEzMy4yNzMgMjE0LjM4OCAxMzMuMjczIDIxNC4zODggMTMzLjI3MyAyMTQuOTMyQzEzMS4wNjUgMjIzLjA4NyAxMjguODU3IDIzMi44NzMgMTI4LjMwNSAyNDIuMTE2QzEyNy43NTMgMjQ0LjgzNCAxMjkuOTYxIDI0Ny41NTMgMTMzLjI3MyAyNDcuNTUzQzEzNi4wMzQgMjQ4LjA5NiAxMzguNzk0IDI0NS4zNzggMTM4Ljc5NCAyNDIuNjZDMTM4Ljc5NCAyNDIuMTE2IDEzOS4zNDcgMjM3LjIyMiAxMzkuMzQ3IDIzNi42NzlDMTQxLjAwMyAyMjYuODkzIDE0My43NjQgMjE3LjEwNyAxNDcuNjI4IDIwNy44NjRDMTQ4LjE4IDIwNi4yMzMgMTQ5LjI4NCAyMDUuMTQ2IDE0OS44MzYgMjAzLjUxNUMxNTAuOTQgMjAxLjM0IDE1NC4yNTMgMjAwLjI1MiAxNTcuMDE0IDIwMS4zNEgxNTcuNTY1QzE2MC4zMjYgMjAyLjQyNyAxNjEuNDMgMjA1LjE0NiAxNjAuMzI2IDIwNy44NjRDMTU5Ljc3NCAyMDguNDA5IDE1Ni40NjEgMjE0LjM4OSAxNTQuMjUzIDIyMy42MzFDMTUzLjE0OSAyMjYuMzQ5IDE1NS4zNTggMjI5LjYxMiAxNTguNjcgMjMwLjE1NUMxNjEuNDMgMjMwLjY5OSAxNjMuNjM5IDIyOS4wNjggMTY0Ljc0MyAyMjYuMzVDMTY2Ljk1MSAyMTkuMjgyIDE3MC4yNjMgMjEyLjIxNCAxNzAuODE1IDIxMS4xMjZDMTc4LjU0NSAxOTUuOTAzIDE5MC42OTEgMTgzLjM5OCAyMDUuNTk4IDE3NS4yNDJDMjE3Ljc0NCAxNjguMTc0IDIzMi4wOTkgMTY0LjM2OSAyNDcuNTU4IDE2NC4zNjlDMjk1LjU5IDE2NC4zNjkgMzM0LjIzNyAyMDIuNDI3IDMzNC4yMzcgMjQ5LjcyOEMzMzQuMjM3IDI5My4yMjIgMzAxLjY2MyAzMjguNTYyIDI1OS43MDQgMzM0LjU0M1YyNDEuMDI4QzI1OS43MDQgMjI1LjgwNSAyNDcuNTU3IDIxMy44NDUgMjMyLjA5OSAyMTMuODQ1QzIxNi42NCAyMTMuODQ1IDIwNC40OTQgMjI1LjgwNSAyMDQuNDk0IDI0MS4wMjhWMzYyLjgxNUMyMDQuNDk0IDM3OC4wMzggMjE2LjY0IDM5MCAyMzIuMDk5IDM5MEgyNDcuNTU4QzMyNS45NTUgMzkwIDM5MCAzMjcuNDc1IDM5MCAyNTAuMjcxQzM5MCAxNzMuMDY4IDMyNi41MDcgMTEwIDI0OC4xMDkgMTEwWiIgZmlsbD0iI2E3YWFhZCIvPjwvc3ZnPg=='; } }