logger = $logger; $this->price_updater = $price_updater; // Add admin menu. add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); // Register settings. add_action( 'admin_init', array( $this, 'register_settings' ) ); // Handle AJAX requests. add_action( 'wp_ajax_informatiq_sp_manual_sync', array( $this, 'handle_manual_sync' ) ); add_action( 'wp_ajax_informatiq_sp_test_connection', array( $this, 'handle_test_connection' ) ); // Enqueue admin assets. add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_assets' ) ); } /** * Add admin menu under WooCommerce. */ public function add_admin_menu() { add_submenu_page( 'woocommerce', __( 'Smart Pricing', 'informatiq-smart-pricing' ), __( 'Smart Pricing', 'informatiq-smart-pricing' ), 'manage_woocommerce', 'informatiq-smart-pricing', array( $this, 'render_admin_page' ) ); } /** * Register plugin settings. */ public function register_settings() { // Register settings. register_setting( 'informatiq_sp_settings', 'informatiq_sp_merchant_id' ); register_setting( 'informatiq_sp_settings', 'informatiq_sp_service_account' ); register_setting( 'informatiq_sp_settings', 'informatiq_sp_minimum_margin' ); register_setting( 'informatiq_sp_settings', 'informatiq_sp_auto_update_enabled' ); register_setting( 'informatiq_sp_settings', 'informatiq_sp_update_frequency' ); // Add settings sections. add_settings_section( 'informatiq_sp_google_settings', __( 'Google Merchant Center Settings', 'informatiq-smart-pricing' ), array( $this, 'render_google_settings_section' ), 'informatiq_sp_settings' ); add_settings_section( 'informatiq_sp_pricing_settings', __( 'Pricing Settings', 'informatiq-smart-pricing' ), array( $this, 'render_pricing_settings_section' ), 'informatiq_sp_settings' ); add_settings_section( 'informatiq_sp_automation_settings', __( 'Automation Settings', 'informatiq-smart-pricing' ), array( $this, 'render_automation_settings_section' ), 'informatiq_sp_settings' ); // Add settings fields. add_settings_field( 'informatiq_sp_merchant_id', __( 'Google Merchant ID', 'informatiq-smart-pricing' ), array( $this, 'render_merchant_id_field' ), 'informatiq_sp_settings', 'informatiq_sp_google_settings' ); add_settings_field( 'informatiq_sp_service_account', __( 'Service Account JSON', 'informatiq-smart-pricing' ), array( $this, 'render_service_account_field' ), 'informatiq_sp_settings', 'informatiq_sp_google_settings' ); add_settings_field( 'informatiq_sp_minimum_margin', __( 'Minimum Margin (%)', 'informatiq-smart-pricing' ), array( $this, 'render_minimum_margin_field' ), 'informatiq_sp_settings', 'informatiq_sp_pricing_settings' ); add_settings_field( 'informatiq_sp_auto_update_enabled', __( 'Enable Automatic Updates', 'informatiq-smart-pricing' ), array( $this, 'render_auto_update_field' ), 'informatiq_sp_settings', 'informatiq_sp_automation_settings' ); add_settings_field( 'informatiq_sp_update_frequency', __( 'Update Frequency', 'informatiq-smart-pricing' ), array( $this, 'render_update_frequency_field' ), 'informatiq_sp_settings', 'informatiq_sp_automation_settings' ); } /** * Render admin page. */ public function render_admin_page() { if ( ! current_user_can( 'manage_woocommerce' ) ) { return; } // Check if form was submitted. if ( isset( $_GET['settings-updated'] ) ) { // Update cron schedule if frequency changed. $frequency = get_option( 'informatiq_sp_update_frequency', 'daily' ); Informatiq_SP_Scheduler::reschedule( $frequency ); add_settings_error( 'informatiq_sp_messages', 'informatiq_sp_message', __( 'Settings saved successfully.', 'informatiq-smart-pricing' ), 'success' ); } ?>



render_schedule_info(); ?>
render_logs_section(); ?>
render_sidebar(); ?>
' . esc_html__( 'Configure your Google Merchant Center API credentials.', 'informatiq-smart-pricing' ) . '

'; } /** * Render pricing settings section description. */ public function render_pricing_settings_section() { echo '

' . esc_html__( 'Configure pricing rules and safeguards.', 'informatiq-smart-pricing' ) . '

'; } /** * Render automation settings section description. */ public function render_automation_settings_section() { echo '

' . esc_html__( 'Configure automated price updates.', 'informatiq-smart-pricing' ) . '

'; } /** * Render merchant ID field. */ public function render_merchant_id_field() { $value = get_option( 'informatiq_sp_merchant_id' ); ?>

%

logger->get_todays_logs(); ?>

created_at ) ) ); ?> product_name ); ?> old_price ) ); ?> new_price ) ); ?> competitor_price ) ); ?>

informatiq.services', 'informatiq-smart-pricing' ) ), 'https://informatiq.services' ); ?>

__( 'Insufficient permissions', 'informatiq-smart-pricing' ) ) ); } try { $scheduler = new Informatiq_SP_Scheduler( $this->price_updater ); $results = $scheduler->trigger_manual_update(); wp_send_json_success( array( 'message' => sprintf( /* translators: %1$d: updated count, %2$d: processed count */ __( 'Sync completed! Updated %1$d of %2$d products.', 'informatiq-smart-pricing' ), $results['updated'], $results['processed'] ), 'results' => $results, ) ); } catch ( Exception $e ) { wp_send_json_error( array( 'message' => $e->getMessage() ) ); } } /** * Handle test connection AJAX request. */ public function handle_test_connection() { check_ajax_referer( 'informatiq_sp_admin', 'nonce' ); if ( ! current_user_can( 'manage_woocommerce' ) ) { wp_send_json_error( array( 'message' => __( 'Insufficient permissions', 'informatiq-smart-pricing' ) ) ); } $merchant_id = get_option( 'informatiq_sp_merchant_id' ); $service_account = get_option( 'informatiq_sp_service_account' ); if ( empty( $merchant_id ) || empty( $service_account ) ) { wp_send_json_error( array( 'message' => __( 'Please configure Google Merchant settings first.', 'informatiq-smart-pricing' ) ) ); } try { $google_api = new Informatiq_SP_Google_API( $merchant_id, $service_account, $this->logger ); $success = $google_api->test_connection(); if ( $success ) { wp_send_json_success( array( 'message' => __( 'Connection successful!', 'informatiq-smart-pricing' ) ) ); } else { wp_send_json_error( array( 'message' => __( 'Connection failed. Check your credentials.', 'informatiq-smart-pricing' ) ) ); } } catch ( Exception $e ) { wp_send_json_error( array( 'message' => $e->getMessage() ) ); } } /** * Enqueue admin assets. * * @param string $hook Current admin page hook. */ public function enqueue_admin_assets( $hook ) { if ( 'woocommerce_page_informatiq-smart-pricing' !== $hook ) { return; } wp_enqueue_style( 'informatiq-sp-admin', INFORMATIQ_SP_PLUGIN_URL . 'assets/css/admin.css', array(), INFORMATIQ_SP_VERSION ); wp_enqueue_script( 'informatiq-sp-admin', INFORMATIQ_SP_PLUGIN_URL . 'assets/js/admin.js', array( 'jquery' ), INFORMATIQ_SP_VERSION, true ); wp_localize_script( 'informatiq-sp-admin', 'informatiqSP', array( 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'informatiq_sp_admin' ), 'strings' => array( 'syncInProgress' => __( 'Sync in progress...', 'informatiq-smart-pricing' ), 'testInProgress' => __( 'Testing connection...', 'informatiq-smart-pricing' ), ), ) ); } }