print '

' . esc_html__( 'WooDoo requires WooCommerce to be active.', 'woodoo' ) . '

' ); return; } WooDoo_Admin::init(); WooDoo_Invoices::init(); WooDoo_Calendar::init(); WooDoo_Orders::init(); } /** * Returns a configured WooDoo_API instance using saved options. * Returns null if credentials are not set. */ function woodoo_api(): ?WooDoo_API { static $instance = null; if ( $instance ) return $instance; $opts = [ 'url' => get_option( 'woodoo_odoo_url', '' ), 'db' => get_option( 'woodoo_odoo_db', '' ), 'username' => get_option( 'woodoo_odoo_username', '' ), 'api_key' => get_option( 'woodoo_odoo_api_key', '' ), ]; foreach ( $opts as $v ) { if ( empty( $v ) ) return null; } $instance = new WooDoo_API( rtrim( $opts['url'], '/' ), $opts['db'], $opts['username'], $opts['api_key'] ); return $instance; } // ── Activation / Deactivation ───────────────────────────────────────────── register_activation_hook( __FILE__, 'woodoo_activate' ); function woodoo_activate(): void { // Create DB table for customer links (supplement to user meta) global $wpdb; $table = $wpdb->prefix . 'woodoo_customer_links'; $charset = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS {$table} ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, wp_user_id BIGINT UNSIGNED NOT NULL, odoo_partner_id INT UNSIGNED NOT NULL, linked_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY wp_user_id (wp_user_id), KEY odoo_partner_id (odoo_partner_id) ) {$charset};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); // Register endpoints and flush so My Account tabs appear immediately WC()->query->init_query_vars(); WC()->query->add_endpoints(); flush_rewrite_rules(); }