init($config); // TODO: redesign and re-enable dashboard widgets after the redesign is implemented. // https://webpros.atlassian.net/browse/EXTWPTOOLK-14392 // https://webpros.atlassian.net/browse/EXTWPTOOLK-14393 // (new DashboardIntegration(self::$translator))->init($config); } /** * @return void */ public static function enqueueScripts(Config $config) { $scriptHandle = 'wp-toolkit-script'; $jsBundleSlug = self::MODULE_PATH_SLUG . '/admin/js/main.bundle.js'; self::registerAndEnqueueScript($config, $scriptHandle, $jsBundleSlug); } /** * @return void */ public static function enqueueStyles() { $styleHandle = 'wp-toolkit-style'; $cssBundleSlug = self::MODULE_PATH_SLUG . '/admin/css/host.css'; self::registerAndEnqueueStyle($styleHandle, $cssBundleSlug); } /** * @return void */ public static function enqueueDashboardScripts(Config $config) { $scriptHandle = 'wp-toolkit-dashboard-script'; $jsBundleSlug = self::MODULE_PATH_SLUG . '/admin/js/widgets.bundle.js'; self::registerAndEnqueueScript($config, $scriptHandle, $jsBundleSlug); } /** * @return void */ public static function enqueueDashboardStyles() { $styleHandle = 'wp-toolkit-dashboard-style'; $cssBundleSlug = self::MODULE_PATH_SLUG . '/admin/css/dashboardHost.css'; self::registerAndEnqueueStyle($styleHandle, $cssBundleSlug); } /** * @param string $styleHandle * @param string $cssBundleSlug * @return void */ private static function registerAndEnqueueStyle($styleHandle, $cssBundleSlug) { wp_enqueue_style( $styleHandle, WPMU_PLUGIN_URL . $cssBundleSlug, [], (string)filemtime(WPMU_PLUGIN_DIR . $cssBundleSlug) ); } /** * @return PluginInitialParams */ private static function prepareInitialParams(Config $config) { $analyticsParams = new AnalyticsParams( (bool) get_option(AnalyticsSettingsController::OPTION_NAME, true), self::getCustomAnalyticsKey(), self::getCustomAnalyticsHost() ); $urlParams = new UrlsParams( rest_url('/wp-toolkit/api'), [ new PageParams( 'vulnerabilityPage', menu_page_url(self::PLUGIN_MAIN_PAGE_SLUG, false), AdminMenuIntegration::isPageActive(AdminMenuIntegration::PLUGIN_MAIN_PAGE_ID) ), new PageParams( 'autoUpdatesSettingsPage', menu_page_url(self::PLUGIN_AUTO_UPDATES_SETTINGS_PAGE_SLUG, false), AdminMenuIntegration::isPageActive(AdminMenuIntegration::PLUGIN_AUTO_UPDATES_SETTINGS_PAGE_ID) ), new PageParams( 'subscriptionsPage', menu_page_url(self::PLUGIN_SUBSCRIPTIONS_PAGE_SLUG, false), AdminMenuIntegration::isPageActive(AdminMenuIntegration::PLUGIN_SUBSCRIPTIONS_PAGE_ID) ), new PageParams( 'settingsPage', menu_page_url(self::PLUGIN_SETTINGS_PAGE_SLUG, false), AdminMenuIntegration::isPageActive(AdminMenuIntegration::PLUGIN_SETTINGS_PAGE_ID) ), ] ); if (!self::$translator instanceof TranslatorInterface) { throw new \RuntimeException('Translator is not initialized'); } $pluginInitialParams = new PluginInitialParams( wp_create_nonce('wp_rest'), self::isIntegrationPluginDebug(), self::$translator->getLocaleContainer(), $analyticsParams, $urlParams, $config, null, null ); try { $apiToken = (new ApiTokenParser())->parse(ApiTokenParser::getTokenFromConfig()); $pluginInitialParams->setInstallationId($apiToken->getInstallationId()); $pluginInitialParams->setTokenIssuedAt($apiToken->getNotBefore()); $analyticsParams->setState(self::getAnalyticsState($apiToken->getAnalyticsId())); $analyticsParams->setId($apiToken->getAnalyticsId()); } catch (\RuntimeException $e) { error_log($e->getMessage()); } $subscriptionGuid = \get_option(self::WP_OPTION_VIRTUAL_PATCHES_SUBSCRIPTION_GUID) ?: null; if (is_string($subscriptionGuid)) { $pluginInitialParams->setVirtualPatchesSubscriptionGuid($subscriptionGuid); } return $pluginInitialParams; } /** * @param Config $config * @param string $scriptHandle Script identifier * @param string $jsBundleSlug Relative path to the script file * @return void */ private static function registerAndEnqueueScript(Config $config, $scriptHandle, $jsBundleSlug) { wp_register_script( $scriptHandle, WPMU_PLUGIN_URL . $jsBundleSlug, [], (string)filemtime(WPMU_PLUGIN_DIR . $jsBundleSlug), true ); $pluginInitialParams = self::prepareInitialParams($config); add_filter('script_loader_tag', function ($tag, $handle) use ($scriptHandle, $pluginInitialParams) { if ($scriptHandle === $handle) { $jsonObject = json_encode($pluginInitialParams); $inlineScript = <<window.wpToolkitApp = {$jsonObject}; HTML; return $inlineScript . $tag; } return $tag; }, 10, 2); wp_enqueue_script($scriptHandle); } /** * @param ?string $analyticsId * @return bool */ private static function getAnalyticsState($analyticsId) { return $analyticsId !== null && $analyticsId !== ''; } /** * @return string | null */ private static function getCustomAnalyticsHost() { return defined('WP_TOOLKIT_ANALYTICS_HOST') ? \WP_TOOLKIT_ANALYTICS_HOST : null; } /** * @return string | null */ private static function getCustomAnalyticsKey() { return defined('WP_TOOLKIT_ANALYTICS_KEY') ? \WP_TOOLKIT_ANALYTICS_KEY : null; } /** * @return bool */ private static function isIntegrationPluginDebug() { return defined('WP_TOOLKIT_DEBUG') && filter_var(\WP_TOOLKIT_DEBUG, FILTER_VALIDATE_BOOLEAN); } }