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;
}
}