namespace IngramMicro; class Ingram_Admin { public function __construct() { add_action('admin_menu', array($this, 'add_admin_menu')); add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets')); add_action('wp_ajax_ingram_micro_search_products', array($this, 'ajax_search_products')); add_action('wp_ajax_ingram_micro_import_products', array($this, 'ajax_import_products')); add_action('wp_ajax_ingram_micro_authorize', array($this, 'ajax_authorize')); } public function add_admin_menu() { add_submenu_page( 'woocommerce', __('Ingram Micro Products', 'ingram-micro-woocommerce'), __('Ingram Micro', 'ingram-micro-woocommerce'), 'edit_products', 'ingram-micro-products', array($this, 'render_admin_page') ); } public function enqueue_admin_assets($hook) { if ($hook !== 'woocommerce_page_ingram-micro-products') { return; } wp_enqueue_style( 'ingram-micro-admin', INGRAM_MICRO_WC_PLUGIN_URL . 'assets/css/admin.css', array(), INGRAM_MICRO_WC_VERSION ); wp_enqueue_script( 'ingram-micro-admin', INGRAM_MICRO_WC_PLUGIN_URL . 'assets/js/admin.js', array('jquery'), INGRAM_MICRO_WC_VERSION, true ); wp_localize_script('ingram-micro-admin', 'ingramMicro', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('ingram_micro_nonce'), 'loading_text' => __('Loading...', 'ingram-micro-woocommerce'), 'importing_text' => __('Importing...', 'ingram-micro-woocommerce'), 'authorizing_text' => __('Authorizing...', 'ingram-micro-woocommerce'), )); } public function render_admin_page() { include INGRAM_MICRO_WC_PLUGIN_DIR . 'templates/admin/product-import.php'; } public function ajax_search_products() { check_ajax_referer('ingram_micro_nonce', 'nonce'); if (!current_user_can('manage_woocommerce')) { wp_send_json_error(__('You do not have permission to perform this action.', 'ingram-micro-woocommerce')); } $params = array( 'pageNumber' => isset($_POST['page']) ? absint($_POST['page']) : 1, 'pageSize' => isset($_POST['per_page']) ? absint($_POST['per_page']) : 25, ); if (!empty($_POST['type'])) { $params['type'] = sanitize_text_field($_POST['type']); } if (!empty($_POST['vendor'])) { $params['vendor'] = array_map('sanitize_text_field', (array)$_POST['vendor']); } if (!empty($_POST['category'])) { $params['category'] = sanitize_text_field($_POST['category']); } if (!empty($_POST['keyword'])) { $params['keyword'] = array_map('sanitize_text_field', (array)$_POST['keyword']); } $api = new Ingram_API(); $response = $api->search_products($params); if (is_wp_error($response)) { wp_send_json_error($response->get_error_message()); } wp_send_json_success($response); } public function ajax_import_products() { check_ajax_referer('ingram_micro_nonce', 'nonce'); if (!current_user_can('manage_woocommerce')) { wp_send_json_error(__('You do not have permission to perform this action.', 'ingram-micro-woocommerce')); } if (empty($_POST['products']) || !is_array($_POST['products'])) { wp_send_json_error(__('No products selected for import.', 'ingram-micro-woocommerce')); } $products = array_map('sanitize_text_field', $_POST['products']); $importer = new Ingram_Product_Importer(); $results = $importer->import_products($products); wp_send_json_success(array( 'message' => sprintf(__('Successfully imported %d products', 'ingram-micro-woocommerce'), count($results)), 'results' => $results, )); } public function ajax_authorize() { check_ajax_referer('ingram_micro_nonce', 'nonce'); if (!current_user_can('manage_woocommerce')) { wp_send_json_error(__('You do not have permission to perform this action.', 'ingram-micro-woocommerce')); } $api = new Ingram_API(); $result = $api->authenticate(); if ($result) { wp_send_json_success(__('Successfully authenticated with Ingram Micro API', 'ingram-micro-woocommerce')); } else { wp_send_json_error(__('Failed to authenticate with Ingram Micro API', 'ingram-micro-woocommerce')); } } }namespace IngramMicro; class Ingram_Settings { public function __construct() { add_action('admin_init', array($this, 'register_settings')); add_filter('woocommerce_get_settings_pages', array($this, 'add_settings_page')); } public function register_settings() { register_setting('woocommerce_ingram_micro', 'ingram_micro_client_id'); register_setting('woocommerce_ingram_micro', 'ingram_micro_client_secret'); register_setting('woocommerce_ingram_micro', 'ingram_micro_customer_number'); register_setting('woocommerce_ingram_micro', 'ingram_micro_country_code'); register_setting('woocommerce_ingram_micro', 'ingram_micro_sender_id'); } public function add_settings_page($settings) { $settings[] = include INGRAM_MICRO_WC_PLUGIN_DIR . 'includes/class-ingram-settings-page.php'; return $settings; } }