plugin = $plugin; $this->products_handler = $this->plugin->get_products_handler(); // privacy $this->privacy_handler = new Admin\Privacy(); new Revenue(); $this->add_hooks(); } /** * Adds the action & filter hooks. * * @since 2.0.0 */ private function add_hooks() { // add the settings page. add_filter( 'woocommerce_get_settings_pages', function ( $pages ) { $pages[] = new Admin\Settings_Page( $this->get_plugin()->get_settings_handler() ); return $pages; } ); // load admin scripts. add_action( 'admin_enqueue_scripts', function ( $hook ) { $this->load_scripts_styles( $hook ); } ); } /** * Loads and enqueues admin scripts and styles. * * @param string $hook The current admin page. * * @since 2.0.0 */ private function load_scripts_styles( $hook ) { global $typenow; if ( 'product' === $typenow ) { wp_enqueue_script( 'wc-square-admin-products', $this->get_plugin()->get_plugin_url() . '/build/assets/admin/wc-square-admin-products.js', array( 'jquery' ), Plugin::VERSION, true ); wp_localize_script( 'wc-square-admin-products', 'wc_square_admin_products', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'settings_url' => esc_url( $this->get_plugin()->get_settings_url() ), 'variable_product_types' => $this->get_variable_product_types(), 'synced_with_square_taxonomy' => Product::SYNCED_WITH_SQUARE_TAXONOMY, 'is_product_sync_enabled' => $this->get_plugin()->get_settings_handler()->is_product_sync_enabled(), 'is_woocommerce_sor' => $this->get_plugin()->get_settings_handler()->is_system_of_record_woocommerce(), 'is_square_sor' => $this->get_plugin()->get_settings_handler()->is_system_of_record_square(), 'is_inventory_sync_enabled' => $this->get_plugin()->get_settings_handler()->is_inventory_sync_enabled(), 'get_quick_edit_product_details_nonce' => wp_create_nonce( 'get-quick-edit-product-details' ), 'fetch_product_stock_with_square_nonce' => wp_create_nonce( 'fetch-product-stock-with-square' ), 'supported_products_for_sync' => array( 'simple', 'variable' ), 'i18n' => array( 'inventory_tracking_disabled' => __( 'Inventory tracking is disabled for this product', 'woocommerce-square' ), 'synced_with_square' => __( 'Synced with Square', 'woocommerce-square' ), 'managed_by_square' => __( 'Managed by Square', 'woocommerce-square' ), 'fetch_stock_with_square' => __( 'Fetch stock from Square', 'woocommerce-square' ), 'sync_inventory' => __( 'Sync inventory', 'woocommerce-square' ), 'sync_stock_from_square' => __( 'Sync stock from Square', 'woocommerce-square' ), ), ) ); } elseif ( $this->get_plugin()->is_plugin_settings() ) { wp_enqueue_style( 'wc-square-admin', $this->get_plugin()->get_plugin_url() . '/build/assets/admin/wc-square-admin.css', array(), Plugin::VERSION ); wp_enqueue_media(); wp_enqueue_script( 'wc-square-admin-settings', $this->get_plugin()->get_plugin_url() . '/build/assets/admin/wc-square-admin-settings.js', array( 'jquery', 'jquery-blockui', 'backbone', 'wc-backbone-modal' ), Plugin::VERSION, true ); $sync_job = $this->get_plugin()->get_sync_handler()->get_job_in_progress(); if ( $sync_job ) { $existing_sync_id = $sync_job->id; } else { $existing_sync_id = false; } wp_localize_script( 'wc-square-admin-settings', 'wc_square_admin_settings', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'is_product_sync_enabled' => $this->get_plugin()->get_settings_handler()->is_product_sync_enabled(), 'is_woocommerce_sor' => $this->get_plugin()->get_settings_handler()->is_system_of_record_woocommerce(), 'is_square_sor' => $this->get_plugin()->get_settings_handler()->is_system_of_record_square(), 'is_inventory_sync_enabled' => $this->get_plugin()->get_settings_handler()->is_inventory_sync_enabled(), 'is_sandbox' => $this->get_plugin()->get_settings_handler()->is_sandbox(), 'existing_sync_job_id' => $existing_sync_id, 'import_products_from_square' => wp_create_nonce( 'import-products-from-square' ), 'sync_products_with_square' => wp_create_nonce( 'sync-products-with-square' ), 'get_sync_with_square_status_nonce' => wp_create_nonce( 'get-sync-with-square-status' ), 'handle_sync_with_square_records' => wp_create_nonce( 'handle-sync-with-square-records' ), 'i18n' => array( 'resolved' => __( 'Resolved', 'woocommerce-square' ), 'no_records_found' => __( 'No records found', 'woocommerce-square' ), 'skipped' => __( 'Skipped', 'woocommerce-square' ), 'updated' => __( 'Updated', 'woocommerce-square' ), 'imported' => __( 'Imported', 'woocommerce-square' ), 'sync_inventory_label' => array( 'square' => __( 'Enable to fetch inventory changes from Square', 'woocommerce-square' ), 'woocommerce' => __( 'Enable to push inventory changes to Square', 'woocommerce-square' ), ), 'sync_inventory_description' => array( 'square' => __( 'Inventory is fetched from Square periodically and updated in WooCommerce', 'woocommerce-square' ), 'woocommerce' => sprintf( /* translators: Placeholders: %1$s - tag, %2$s - tag */ __( 'Inventory is %1$salways fetched from Square%2$s periodically to account for sales from other channels.', 'woocommerce-square' ), '', '' ), ), ), ) ); $asset_file = WC_SQUARE_PLUGIN_PATH . 'build/settings.asset.php'; if ( ! file_exists( $asset_file ) ) { return; } $asset = include $asset_file; wp_enqueue_script( 'woocommerce-square-settings-js', WC_SQUARE_PLUGIN_URL . 'build/settings.js', $asset['dependencies'], $asset['version'], array( 'in_footer' => true, ) ); $gift_card_placeholder_url = Products::get_gift_card_default_placeholder_url(); if ( empty( $gift_card_placeholder_url ) ) { $gift_card_placeholder_url = WC_SQUARE_PLUGIN_URL . 'build/images/gift-card-featured-image.png'; } wp_localize_script( 'woocommerce-square-settings-js', 'wcSquareSettings', array( 'nonce' => wp_create_nonce( 'wc_square_settings' ), 'homeUrl' => home_url(), 'adminUrl' => admin_url(), 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'depsCheck' => $this->get_plugin()->get_dependency_handler()->meets_php_dependencies(), 'gcPlaceholderUrl' => esc_url( $gift_card_placeholder_url ), ) ); wp_enqueue_style( 'woocommerce-square-settings-css', WC_SQUARE_PLUGIN_URL . 'build/settings.css', array(), $asset['version'], ); } elseif ( 'woocommerce_page_woocommerce-square-onboarding' === $hook ) { $asset_file = WC_SQUARE_PLUGIN_PATH . 'build/onboarding.asset.php'; if ( ! file_exists( $asset_file ) ) { return; } $asset = include $asset_file; wp_enqueue_script( 'woocommerce-square-onboarding-js', WC_SQUARE_PLUGIN_URL . 'build/onboarding.js', $asset['dependencies'], $asset['version'], array( 'in_footer' => true, ) ); wp_localize_script( 'woocommerce-square-onboarding-js', 'wcSquareSettings', array( 'nonce' => wp_create_nonce( 'wc_square_settings' ), 'homeUrl' => home_url(), 'adminUrl' => admin_url(), 'ajaxUrl' => admin_url( 'admin-ajax.php' ), ) ); wp_enqueue_style( 'woocommerce-square-onboarding-css', WC_SQUARE_PLUGIN_URL . 'build/onboarding.css', array(), $asset['version'], ); wp_localize_script( 'woocommerce-square-onboarding-js', 'wcSquareOnboarding', array( 'plugin_version' => WC_SQUARE_PLUGIN_VERSION, 'is_mobile' => wp_is_mobile(), ) ); } wp_enqueue_style( 'wp-components' ); } /** * Gets a list of variable product types. * * @since 2.0.0 * * @return string[] */ private function get_variable_product_types() { /** * Filters the variable product types. * * @since 2.0.0 * * @param string[] array of product types */ return (array) apply_filters( 'wc_square_variable_product_types', array( 'variable', 'variable-subscription' ) ); } /** * Gets the products handler. * * @since 2.0.0 * * @return Admin\Products */ public function get_products_handler() { return $this->products_handler; } /** * Gets the plugin instance. * * @since 2.0.0 * * @return Plugin */ protected function get_plugin() { return $this->plugin; } }