124 lines
4.2 KiB
PHP
124 lines
4.2 KiB
PHP
|
|
<?php
|
|||
|
|
/**
|
|||
|
|
* Plugin Name: WooDoo – WooCommerce & Odoo Integration
|
|||
|
|
* Plugin URI: https://github.com/
|
|||
|
|
* Description: Connects WooCommerce to a self-hosted Odoo 19 instance. Customer linking, invoices, meeting booking, and automatic sales order creation.
|
|||
|
|
* Version: 1.0.0
|
|||
|
|
* Requires at least: 6.0
|
|||
|
|
* Requires PHP: 8.1
|
|||
|
|
* Author: WooDoo
|
|||
|
|
* License: GPL v2 or later
|
|||
|
|
* Text Domain: woodoo
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
defined( 'ABSPATH' ) || exit;
|
|||
|
|
|
|||
|
|
define( 'WOODOO_VERSION', '1.0.0' );
|
|||
|
|
define( 'WOODOO_FILE', __FILE__ );
|
|||
|
|
define( 'WOODOO_DIR', plugin_dir_path( __FILE__ ) );
|
|||
|
|
define( 'WOODOO_URL', plugin_dir_url( __FILE__ ) );
|
|||
|
|
|
|||
|
|
// ── Auto-load includes ──────────────────────────────────────────────────────
|
|||
|
|
foreach ( [
|
|||
|
|
'class-woodoo-api',
|
|||
|
|
'class-woodoo-admin',
|
|||
|
|
'class-woodoo-invoices',
|
|||
|
|
'class-woodoo-calendar',
|
|||
|
|
'class-woodoo-orders',
|
|||
|
|
] as $file ) {
|
|||
|
|
require_once WOODOO_DIR . 'includes/' . $file . '.php';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ── Frontend Assets ───────────────────────────────────────────────────────────
|
|||
|
|
add_action( 'wp_enqueue_scripts', 'woodoo_register_frontend_assets' );
|
|||
|
|
|
|||
|
|
function woodoo_register_frontend_assets(): void {
|
|||
|
|
wp_register_style(
|
|||
|
|
'woodoo-frontend',
|
|||
|
|
WOODOO_URL . 'assets/css/woodoo.css',
|
|||
|
|
[],
|
|||
|
|
WOODOO_VERSION
|
|||
|
|
);
|
|||
|
|
wp_register_script(
|
|||
|
|
'woodoo-frontend',
|
|||
|
|
WOODOO_URL . 'assets/js/woodoo-frontend.js',
|
|||
|
|
[],
|
|||
|
|
WOODOO_VERSION,
|
|||
|
|
true
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ── Boot ─────────────────────────────────────────────────────────────────────
|
|||
|
|
add_action( 'plugins_loaded', 'woodoo_init' );
|
|||
|
|
|
|||
|
|
function woodoo_init(): void {
|
|||
|
|
if ( ! class_exists( 'WooCommerce' ) ) {
|
|||
|
|
add_action( 'admin_notices', fn() =>
|
|||
|
|
print '<div class="notice notice-error"><p>' .
|
|||
|
|
esc_html__( 'WooDoo requires WooCommerce to be active.', 'woodoo' ) .
|
|||
|
|
'</p></div>'
|
|||
|
|
);
|
|||
|
|
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();
|
|||
|
|
}
|