Files
WooDoo/woodoo.php

124 lines
4.2 KiB
PHP
Raw Normal View History

<?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();
}