OwlCyberSecurity - MANAGER
Edit File: Init.php
<?php declare( strict_types = 1 ); namespace Automattic\WooCommerce\Admin\Features\Blueprint; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCCoreProfilerOptions; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCPaymentGateways; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCSettingsAccount; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCSettingsAdvanced; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCSettingsEmails; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCSettingsGeneral; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCSettingsIntegrations; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCSettingsProducts; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCSettingsSiteVisibility; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCShipping; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCTaskOptions; use Automattic\WooCommerce\Admin\Features\Blueprint\Exporters\ExportWCTaxRates; use Automattic\WooCommerce\Admin\Features\Blueprint\Importers\ImportSetWCPaymentGateways; use Automattic\WooCommerce\Admin\Features\Blueprint\Importers\ImportSetWCShipping; use Automattic\WooCommerce\Admin\Features\Blueprint\Importers\ImportSetWCTaxRates; use Automattic\WooCommerce\Admin\PageController; use Automattic\WooCommerce\Blueprint\Exporters\HasAlias; use Automattic\WooCommerce\Blueprint\Exporters\StepExporter; use Automattic\WooCommerce\Blueprint\StepProcessor; use Automattic\WooCommerce\Blueprint\UseWPFunctions; /** * Class Init * * This class initializes the Blueprint feature for WooCommerce. */ class Init { use UseWPFunctions; /** * Array of initialized exporters. * * @var StepExporter[] */ private array $initialized_exporters = array(); /** * Init constructor. */ public function __construct() { add_action( 'rest_api_init', array( $this, 'init_rest_api' ) ); add_filter( 'woocommerce_admin_shared_settings', array( $this, 'add_js_vars' ) ); add_filter( 'wooblueprint_export_landingpage', function () { return '/wp-admin/admin.php?page=wc-admin'; } ); add_filter( 'wooblueprint_exporters', array( $this, 'add_woo_exporters' ) ); } /** * Register REST API routes. * * @return void */ public function init_rest_api() { ( new RestApi() )->register_routes(); } /** * Return Woo Exporter classnames. * * @return StepExporter[] */ public function get_woo_exporters() { $classnames = array( ExportWCSettingsGeneral::class, ExportWCSettingsProducts::class, ExportWCTaxRates::class, ExportWCShipping::class, ExportWCPaymentGateways::class, ExportWCSettingsAccount::class, ExportWCSettingsEmails::class, ExportWCSettingsIntegrations::class, ExportWCSettingsSiteVisibility::class, ExportWCSettingsAdvanced::class, ); $exporters = array(); foreach ( $classnames as $classname ) { $exporters[ $classname ] = $this->initialized_exporters[ $classname ] ?? new $classname(); $this->initialized_exporters[ $classname ] = $exporters[ $classname ]; } return array_values( $exporters ); } /** * Add Woo Specific Exporters. * * @param StepExporter[] $exporters Array of step exporters. * * @return StepExporter[] */ public function add_woo_exporters( array $exporters ) { return array_merge( $exporters, $this->get_woo_exporters() ); } /** * Return step groups for JS. * * This is used to populate exportable items on the blueprint settings page. * * @return array */ public function get_step_groups_for_js() { $all_plugins = $this->wp_get_plugins(); $active_plugins = array_intersect_key( $all_plugins, array_flip( get_option( 'active_plugins', array() ) ) ); $active_theme = $this->wp_get_theme(); return array( array( 'id' => 'settings', 'description' => __( 'It includes all the items featured in WooCommerce | Settings.', 'woocommerce' ), 'label' => __( 'WooCommerce Settings', 'woocommerce' ), 'icon' => 'settings', 'items' => array_map( function ( $exporter ) { return array( 'id' => $exporter instanceof HasAlias ? $exporter->get_alias() : $exporter->get_step_name(), 'label' => $exporter->get_label(), 'description' => $exporter->get_description(), ); }, $this->get_woo_exporters() ), ), array( 'id' => 'plugins', 'description' => __( 'It includes all the installed plugins and extensions.', 'woocommerce' ), 'label' => __( 'Plugins and extensions', 'woocommerce' ), 'icon' => 'plugins', 'items' => array_map( function ( $key, $plugin ) { return array( 'id' => $key, 'label' => $plugin['Name'], ); }, array_keys( $active_plugins ), $active_plugins ), ), array( 'id' => 'themes', 'description' => __( 'It includes all the installed themes.', 'woocommerce' ), 'label' => __( 'Themes', 'woocommerce' ), 'icon' => 'brush', 'items' => array( array( 'id' => $active_theme->get_stylesheet(), 'label' => $active_theme->get( 'Name' ), ), ), ), ); } /** * Add shared JS vars. * * @param array $settings shared settings. * * @return mixed */ public function add_js_vars( $settings ) { if ( ! is_admin() ) { return $settings; } $screen_id = PageController::get_instance()->get_current_screen_id(); $advanced_page = strpos( $screen_id, 'woocommerce_page_wc-settings-advanced' ) !== false; if ( 'woocommerce_page_wc-admin' === $screen_id || $advanced_page ) { // Add upload nonce to global JS settings. The value can be accessed at wcSettings.admin.blueprint_upload_nonce. $settings['blueprint_upload_nonce'] = wp_create_nonce( 'blueprint_upload_nonce' ); } if ( $advanced_page ) { // Used on the settings page. // wcSettings.admin.blueprint_step_groups. $settings['blueprint_step_groups'] = $this->get_step_groups_for_js(); $settings['blueprint_max_step_size_bytes'] = RestApi::MAX_FILE_SIZE; } return $settings; } }