157 lines
7.4 KiB
PHP
157 lines
7.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Affiliate Manager
|
|
*
|
|
* Handles database table creation and core management.
|
|
*
|
|
* @package WooNooW\Modules\Affiliate
|
|
*/
|
|
|
|
namespace WooNooW\Modules\Affiliate;
|
|
|
|
if (!defined('ABSPATH')) exit;
|
|
|
|
class AffiliateManager
|
|
{
|
|
private static $affiliates_table = 'woonoow_affiliates';
|
|
private static $referrals_table = 'woonoow_referrals';
|
|
private static $payouts_table = 'woonoow_affiliate_payouts';
|
|
|
|
/**
|
|
* Initialize
|
|
*/
|
|
public static function init()
|
|
{
|
|
// Initialization logic for the manager if needed
|
|
}
|
|
|
|
/**
|
|
* Create database tables
|
|
*/
|
|
public static function create_tables()
|
|
{
|
|
global $wpdb;
|
|
$charset_collate = $wpdb->get_charset_collate();
|
|
|
|
$affiliates_table = $wpdb->prefix . self::$affiliates_table;
|
|
$referrals_table = $wpdb->prefix . self::$referrals_table;
|
|
$payouts_table = $wpdb->prefix . self::$payouts_table;
|
|
|
|
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
|
|
|
// Affiliates Table
|
|
$sql_affiliates = "CREATE TABLE $affiliates_table (
|
|
id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
user_id bigint(20) UNSIGNED NOT NULL,
|
|
referral_code varchar(50) NOT NULL,
|
|
coupon_id bigint(20) UNSIGNED DEFAULT NULL,
|
|
commission_rate decimal(10,2) NOT NULL DEFAULT '0.00',
|
|
custom_commission_rate decimal(10,2) DEFAULT NULL,
|
|
status varchar(20) NOT NULL DEFAULT 'pending',
|
|
total_referrals int(11) NOT NULL DEFAULT 0,
|
|
total_earnings decimal(19,4) NOT NULL DEFAULT '0.0000',
|
|
paid_earnings decimal(19,4) NOT NULL DEFAULT '0.0000',
|
|
payment_bank_name varchar(100) DEFAULT NULL,
|
|
payment_bank_account varchar(100) DEFAULT NULL,
|
|
payment_email varchar(100) DEFAULT NULL,
|
|
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY user_id (user_id),
|
|
UNIQUE KEY referral_code (referral_code),
|
|
KEY status (status)
|
|
) $charset_collate;";
|
|
|
|
dbDelta($sql_affiliates);
|
|
|
|
// Add custom_commission_rate column if it doesn't exist (for existing installations)
|
|
if ($wpdb->get_var("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$affiliates_table' AND COLUMN_NAME = 'custom_commission_rate'") == 0) {
|
|
$wpdb->query("ALTER TABLE $affiliates_table ADD COLUMN custom_commission_rate decimal(10,2) DEFAULT NULL AFTER commission_rate");
|
|
}
|
|
|
|
// Add payment details columns if they don't exist (for existing installations)
|
|
$payment_columns = ['payment_bank_name', 'payment_bank_account', 'payment_email'];
|
|
foreach ($payment_columns as $col) {
|
|
if ($wpdb->get_var("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$affiliates_table' AND COLUMN_NAME = '$col'") == 0) {
|
|
$col_def = $col === 'payment_email' ? "varchar(100) DEFAULT NULL" : "varchar(100) DEFAULT NULL";
|
|
$wpdb->query("ALTER TABLE $affiliates_table ADD COLUMN $col $col_def AFTER paid_earnings");
|
|
}
|
|
}
|
|
|
|
// Add flexible payment_details JSON column
|
|
if ($wpdb->get_var("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$affiliates_table' AND COLUMN_NAME = 'payment_details'") == 0) {
|
|
$wpdb->query("ALTER TABLE $affiliates_table ADD COLUMN payment_details longtext DEFAULT NULL AFTER payment_email");
|
|
}
|
|
|
|
// Add payment_method column
|
|
if ($wpdb->get_var("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$affiliates_table' AND COLUMN_NAME = 'payment_method'") == 0) {
|
|
$wpdb->query("ALTER TABLE $affiliates_table ADD COLUMN payment_method varchar(50) DEFAULT NULL AFTER payment_details");
|
|
}
|
|
|
|
// Referrals Table
|
|
$sql_referrals = "CREATE TABLE $referrals_table (
|
|
id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
affiliate_id bigint(20) UNSIGNED NOT NULL,
|
|
order_id bigint(20) UNSIGNED NOT NULL,
|
|
customer_id bigint(20) UNSIGNED DEFAULT NULL,
|
|
commission_amount decimal(19,4) NOT NULL DEFAULT '0.0000',
|
|
currency varchar(10) NOT NULL DEFAULT 'USD',
|
|
status varchar(20) NOT NULL DEFAULT 'pending',
|
|
cancelled_reason varchar(100) DEFAULT NULL,
|
|
cancelled_at datetime DEFAULT NULL,
|
|
utm_source varchar(100) DEFAULT NULL,
|
|
utm_medium varchar(100) DEFAULT NULL,
|
|
utm_campaign varchar(255) DEFAULT NULL,
|
|
utm_content varchar(255) DEFAULT NULL,
|
|
utm_term varchar(255) DEFAULT NULL,
|
|
referrer_url varchar(500) DEFAULT NULL,
|
|
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
approved_at datetime DEFAULT NULL,
|
|
paid_at datetime DEFAULT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY affiliate_id (affiliate_id),
|
|
KEY order_id (order_id),
|
|
KEY status (status)
|
|
) $charset_collate;";
|
|
|
|
dbDelta($sql_referrals);
|
|
|
|
// Add cancelled columns if they don't exist (for existing installations)
|
|
if ($wpdb->get_var("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$referrals_table' AND COLUMN_NAME = 'cancelled_reason'") == 0) {
|
|
$wpdb->query("ALTER TABLE $referrals_table ADD COLUMN cancelled_reason varchar(100) DEFAULT NULL AFTER status");
|
|
}
|
|
if ($wpdb->get_var("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$referrals_table' AND COLUMN_NAME = 'cancelled_at'") == 0) {
|
|
$wpdb->query("ALTER TABLE $referrals_table ADD COLUMN cancelled_at datetime DEFAULT NULL AFTER cancelled_reason");
|
|
}
|
|
|
|
// Add UTM columns if they don't exist (for existing installations)
|
|
$utm_columns = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'referrer_url'];
|
|
foreach ($utm_columns as $col) {
|
|
if ($wpdb->get_var("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$referrals_table' AND COLUMN_NAME = '$col'") == 0) {
|
|
$col_def = $col === 'referrer_url' ? "varchar(500) DEFAULT NULL" : ($col === 'utm_campaign' || $col === 'utm_content' || $col === 'utm_term' ? "varchar(255) DEFAULT NULL" : "varchar(100) DEFAULT NULL");
|
|
$after_col = $col === 'utm_source' ? 'cancelled_at' : ($col === 'utm_medium' ? 'utm_source' : ($col === 'utm_campaign' ? 'utm_medium' : ($col === 'utm_content' ? 'utm_campaign' : ($col === 'utm_term' ? 'utm_content' : 'utm_term'))));
|
|
$wpdb->query("ALTER TABLE $referrals_table ADD COLUMN $col $col_def AFTER cancelled_at");
|
|
}
|
|
}
|
|
|
|
// Payouts Table
|
|
$sql_payouts = "CREATE TABLE $payouts_table (
|
|
id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
affiliate_id bigint(20) UNSIGNED NOT NULL,
|
|
amount decimal(19,4) NOT NULL,
|
|
currency varchar(10) NOT NULL DEFAULT 'USD',
|
|
method varchar(50) NOT NULL,
|
|
status varchar(20) NOT NULL DEFAULT 'pending',
|
|
notes text DEFAULT NULL,
|
|
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
completed_at datetime DEFAULT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY affiliate_id (affiliate_id),
|
|
KEY status (status)
|
|
) $charset_collate;";
|
|
|
|
dbDelta($sql_payouts);
|
|
}
|
|
}
|